Tight Auditing of Differentially Private Machine Learning