Revisiting the Provable-Auditable Privacy Gap of DP-SGD
Organizations: University of Texas at Austin · University of Waterloo and Vector Institute
Abstract
Differential privacy (DP) has traditionally been used to provide theoretical upper bounds on an algorithm's stability to changing its training data. In modern private machine learning applications, achieving strong tradeoffs between utility and theoretical privacy is challenging, and thus one may optimistically hope that existing theoretical privacy analyses are loose. Recent work on privacy auditing has adopted a dual viewpoint, instead lower bounding the true privacy of an algorithm by constructing empirical distinguishing events. The auditing literature has thus far yielded a pessimistic outlook on the looseness of theoretical privacy bounds for DP-SGD, the de facto private training method in modern ML, as nearly-matching empirical lower bounds have been achieved under various threat models [NHSBTJCT23, AC24, CBP25]. In this work, we propose the empirical privacy lower bound of an algorithm as a concrete metric to optimize for, complementary to the theoretical upper bound. We give a lightweight defense framework that generically augments optimization methods in the ML pipeline to have significantly-improved empirical privacy on standard benchmarks. Moreover, we show that our framework comes at no theoretical privacy cost when augmenting DP-SGD, unlike previously-proposed defenses against membership inference attacks. We evaluate our defense against a broad range of audit constructions, models, and datasets to demonstrate its flexibility.
Figures & tables
| Dataset (Model) | Theoretical | Train Acc (%) | Test Acc (%) |
|---|---|---|---|
| MNIST (CNN) | 2 | 97.47/96.36 | 97.40/96.57 |
| MNIST (CNN) | 4 | 98.42/97.23 | 98.37/97.52 |
| MNIST (CNN) | 6 | 98.65/97.44 | 98.53/97.74 |
| MNIST (CNN) | 8 | 98.75/97.54 | 98.61/97.86 |
| MNIST (CNN) | 10 | 98.80/97.59 | 98.64/97.89 |
| Purchase (MLP) | 2 | 77.82/76.79 | 74.51/73.19 |
| Attack | Dataset (Model) | Defense Setting | Train Acc (%) | Test Acc (%) | Empirical |
|---|---|---|---|---|---|
| FGSM | CIFAR-10 (CNN) | No Defense | 76.06 | 70.75 | 1.14 |
| FGSM | CIFAR-10 (CNN) | Defense | 74.95 | 70.14 | 0.07 |
| FGSM | MNIST (CNN) | No Defense | 98.78 | 98.57 | 3.03 |
| FGSM | MNIST (CNN) | Defense | 97.58 | 97.78 | 0 |
| Mislabeled | CIFAR-10 (CNN) | No Defense | 76.31 | 71.37 | 0.47 |
| Mislabeled | CIFAR-10 (CNN) | Defense | 75.05 | 70.61 | 0 |
| Average drop epoch | |
|---|---|
| 0.0 | 5.7 |
| 0.0 | 6.0 |
| 0.1 | 16.7 |
| 0.5 | 14.0 |
| 1.0 | 15.0 |
| 5.0 | 13.0 |
| Defense Setting | Group-Privacy |
|---|---|
| No Defense | 4.43 |
| Defense | 27.26 |
Appendix figures & tables28 assets
Supplementary material from the paper’s appendix.
Appendix
| majority_pct | c0_red (maj) | c0_blue (min) | c1_red (min) | c1_blue (maj) |
|---|---|---|---|---|
| 0.995 | ||||
| 0.950 | ||||
| 0.900 | ||||
| 0.850 | ||||
| 0.800 | ||||
| 0.750 |
| Experiment | Train Acc (%) | Test Acc (%) | |
|---|---|---|---|
| Mislabeled Single Run Audit, No Defense | 75.62 | 70.81 | 0.20 |
| Mislabeled Single Run Audit, Defense | 74.73 | 70.42 | 0.10 |
| Mislabeled Group Privacy Audit, No Defense | 76.13 | 71.65 | 3.54 |
| Mislabeled Group Privacy Audit, Defense | 74.69 | 70.62 | 2.67 |
| Scoring Function | Train Acc (%) | Test Acc (%) | |
|---|---|---|---|
| Cosine similarity ( ) | 75.85 | 71.05 | 1.11 |
| Grad norm clipped ( ) | 75.14 | 70.47 | 1.37 |
| Grad norm clipped ( ) | 75.28 | 70.54 | 0 |
| Grad norm unclipped ( ) | 75.25 | 70.73 | 1.19 |
| Grad norm unclipped ( ) | 75.20 | 70.58 | 0 |
| Gradient kurtosis unclipped | 75.49 | 70.62 | 0 |
| Dataset | Defense Setting | |||||
|---|---|---|---|---|---|---|
| CIFAR-10 | No Defense | 0.46 | 0.42 | 0.30 | 0.35 | 0.73 |
| CIFAR-10 | Defense | 0 | 0 | 0 | 0.11 | 0 |
| MNIST | No Defense | 2.45 | 2.45 | 2.50 | 2.45 | 2.50 |
| MNIST | Defense | 0.59 | 0.58 | 0.62 | 0.71 | 0.69 |
| Defense Setting | Train Acc (%) | Test Acc (%) | (400 Trials) | (1000 Trials) |
|---|---|---|---|---|
| No Defense | 98.80 | 98.64 | 3.71 | 4.01 |
| Defense | 97.60 | 97.89 | 0 | 0.09 |
| Global Filtering Value | Train Acc (%) | Test Acc (%) | |
|---|---|---|---|
| 10 | 0.984 | 0.984 | 0 |
| 25 | 0.980 | 0.981 | 0.015 |
| 50 | 0.975 | 0.977 | 0.090 |
| Local Filtering Value | Train Acc (%) | Test Acc (%) | |
|---|---|---|---|
| 1 | 76.01 | 71.07 | 0.44 |
| 2 | 75.92 | 71.11 | 0.52 |
| 3 | 75.52 | 70.62 | 0.43 |
| 4 | 75.28 | 70.60 | 0.12 |
| 5 | 75.27 | 70.77 | 0.36 |
| Epochs Before Filtering | Train Acc (%) | Test Acc (%) | |
|---|---|---|---|
| 1 | 75.21 | 70.77 | 0.43 |
| 5 | 75.74 | 70.73 | 1.21 |
| 10 | 76.19 | 71.13 | 1.39 |
| 20 | 76.06 | 70.89 | 1.19 |
| Dataset (Model) | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% | |
|---|---|---|---|---|---|---|---|---|---|
| MNIST (CNN) | 2 | No Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Defense | 0.000 | 0.000 | 0.000 | 0.015 | 0.000 | 0.000 | 0.000 | ||
| 4 | No Defense | 0.000 | 0.000 | 0.011 | 0.398 | 0.000 | 0.000 | 0.000 | |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | ||
| 6 | No Defense | 0.575 | 0.000 | 0.688 | 0.600 | 0.000 | 0.000 | 0.138 | |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Scoring Function | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| Cosine similarity ( ) | Defense | 0.000 | 0.000 | 0.063 | 0.357 | 0.000 | 0.000 | 0.000 |
| Grad norm clipped ( ) | Defense | 0.000 | 0.394 | 0.000 | 0.477 | 0.000 | 0.000 | 0.000 |
| Grad norm clipped ( ) | Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Grad norm unclipped ( ) | Defense | 0.000 | 0.000 | 0.023 | 0.391 | 0.000 | 0.000 | 0.000 |
| Grad norm unclipped ( ) | Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Gradient kurtosis unclipped | Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Dataset | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| MNIST (CNN) | No Defense | 1.856 | 2.313 | 2.867 | 1.437 | 0.133 | 0.891 | 1.157 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Sampling Method | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| Shuffled | No Defense | 0.000 | 0.617 | 1.335 | 1.372 | 0.000 | 0.025 | 0.368 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | |
| Poisson | No Defense | 0.773 | 1.580 | 2.708 | 1.066 | 0.071 | 0.184 | 0.669 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Audit Type | Dataset | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|---|
| Group privacy (multi-canary) | CIFAR-10 | No Defense | 0.453 | 1.180 | 2.563 | 1.376 | 0.000 | 0.449 | 0.701 |
| Defense | 0.000 | 1.425 | 1.415 | 1.146 | 0.062 | 0.394 | 0.409 |
| Canary Type | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| Majority canary | No Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Minority canary | No Defense | 0.000 | 0.000 | 0.000 | 0.296 | 0.000 | 0.000 | 0.000 |
| Dataset | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| MNIST (CNN) | No Defense | 0.153 | 1.732 | 2.663 | 1.052 | 0.199 | 0.000 | 0.152 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | |
| CIFAR-10 (CNN) | No Defense | 2.845 | 1.519 | 1.809 | 0.767 | 0.000 | 0.253 | 0.491 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Dataset | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| MNIST (CNN) | No Defense | 0.000 | 1.452 | 2.404 | 1.306 | 0.000 | 0.340 | 0.543 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | |
| CIFAR-10 (CNN) | No Defense | 0.018 | 0.269 | 0.000 | 0.362 | 0.000 | 0.000 | 0.000 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Dataset | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| MNIST (CNN) | No Defense | 0.701 | 1.576 | 1.318 | 0.806 | 0.065 | 0.152 | 0.223 |
| Defense | 0.829 | 0.000 | 0.000 | 0.124 | 0.000 | 0.000 | 0.000 | |
| CIFAR-10 (CNN) | No Defense | 0.008 | 0.000 | 0.000 | 0.068 | 0.000 | 0.000 | 0.000 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|
| No Defense | 1.081 | 2.476 | 2.410 | 1.760 | 0.150 | 0.872 | 0.861 |
| Defense | 19.564 | 24.378 | 27.130 | 4.185 | 2.785 | 3.493 | 3.903 |
| Dataset | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% | |
|---|---|---|---|---|---|---|---|---|---|
| CIFAR-10 | 0.00 | No Defense | 0.000 | 0.000 | 0.000 | 0.062 | 0.000 | 0.000 | 0.000 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | ||
| 0.25 | No Defense | 0.000 | 0.000 | 0.000 | 0.060 | 0.000 | 0.000 | 0.000 | |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | ||
| 0.50 | No Defense | 0.000 | 0.000 | 0.000 | 0.024 | 0.000 | 0.000 | 0.000 | |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Epochs Between Filtering | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|
| 1 | 0.000 | 0.000 | 0.000 | 0.066 | 0.000 | 0.000 | 0.000 |
| 5 | 0.000 | 0.086 | 0.302 | 0.391 | 0.000 | 0.000 | 0.013 |
| 10 | 0.000 | 0.266 | 0.000 | 0.449 | 0.000 | 0.000 | 0.000 |
| 20 | 0.000 | 0.000 | 0.000 | 0.391 | 0.000 | 0.000 | 0.000 |
| Local Filtering Value | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|
| 1 | 0.000 | 0.000 | 0.000 | 0.055 | 0.000 | 0.000 | 0.000 |
| 2 | 0.000 | 0.000 | 0.000 | 0.102 | 0.000 | 0.000 | 0.000 |
| 3 | 0.000 | 0.000 | 0.000 | 0.065 | 0.000 | 0.000 | 0.000 |
| 4 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| 5 | 0.000 | 0.000 | 0.000 | 0.035 | 0.000 | 0.000 | 0.000 |
| Attack | Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|---|
| Mislabeled | No Defense | 0.701 | 1.576 | 1.318 | 0.806 | 0.065 | 0.152 | 0.223 |
| Defense | 0.849 | 0.000 | 0.000 | 0.153 | 0.000 | 0.000 | 0.000 | |
| Defense-aware | No Defense | 0.000 | 0.672 | 1.346 | 0.531 | 0.000 | 0.106 | 0.333 |
| Defense | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Global Filtering Value | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|
| 10 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| 25 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| 50 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| Setting | GDP 25% | GDP 50% | GDP 75% | CP no holdout | CP 25% | CP 50% | CP 75% |
|---|---|---|---|---|---|---|---|
| No Defense | 17.625 | 24.378 | 27.130 | 4.185 | 2.749 | 3.493 | 3.903 |
| Defense | 17.625 | 24.378 | 25.311 | 4.185 | 2.749 | 3.493 | 3.892 |