W tym dokumencie założono, że znasz już zasadę różnicowej prywatności i zdecydowałeś, że chcesz używać TF Privacy w celu wdrożenia gwarancji różnicowej prywatności w swoich modelach. Jeśli nie jesteś zaznajomiony z prywatnością różnicową, przejrzyj stronę przeglądu . Po zainstalowaniu TF Privacy zacznij od wykonania następujących kroków:
1. Wybierz różnicowo prywatną wersję istniejącego Optymalizatora
Jeśli obecnie używasz optymalizatora TensorFlow, najprawdopodobniej będziesz chciał wybrać optymalizator o nazwie DPKeras*Optimizer
, na przykład [ DPKerasAdamOptimizer
] w [ TF Privacy
].
Opcjonalnie możesz wypróbować wektoryzowane optymalizatory, takie jak [ tf_privacy.VectorizedDPKerasAdamOptimizer
]. dla możliwej poprawy prędkości (w kategoriach globalnych kroków na sekundę). Stwierdzono, że zastosowanie optymalizatorów wektorowych zapewnia niespójne przyspieszenie w eksperymentach, ale nie zostało to jeszcze dobrze poznane. Tak jak poprzednio, najprawdopodobniej będziesz chciał użyć optymalizatora analogicznego do tego, którego używasz teraz. Te wektoryzowane optymalizatory używają operatora vectorized_map
Tensorflow, który może nie działać z niektórymi innymi operatorami Tensorflow. Jeśli tak jest w Twoim przypadku, otwórz problem w repozytorium TF Privacy GitHub .
2. Oblicz straty dla minipartii wejściowej
Obliczając stratę dla minipartii wejściowej, upewnij się, że jest to wektor z jednym wpisem na przykład, zamiast agregować je w skalar. Jest to konieczne, ponieważ DP-SGD musi być w stanie obliczyć stratę dla poszczególnych mikropartii.
3. Wytrenuj swój model
Trenuj swój model za pomocą Optymalizatora DP (krok 1) i strat wektorowych (krok 2). Można to zrobić na dwa sposoby:
- Przekaż optymalizator i stratę jako argumenty do
Model.compile
przed wywołaniemModel.fit
. - Pisząc niestandardową pętlę treningową, użyj
Optimizer.minimize()
na wektoryzowanej stracie.
Po wykonaniu tej czynności zaleca się dostrojenie hiperparametrów. Pełny opis znajdziesz w samouczku dotyczącym prywatności klasyfikacji
4. Dostosuj hiperparametry DP-SGD
Wszystkie optymalizatory tf_privacy
przyjmują trzy dodatkowe hiperparametry:
-
l2_norm_clip
lub \(C\) - Norma obcinania (maksymalna norma euklidesowa (L2) dla każdego indywidualnego gradientu obliczona na minipartię). -
noise_multiplier
lub \(σ\) — Stosunek odchylenia standardowego do normy obcinania. -
num_microbatches
lub \(B\) — Liczba mikropartii, na które podzielona jest każda minipartia.
Ogólnie rzecz biorąc, im niższe efektywne odchylenie standardowe \(σC / B\), tym lepsza wydajność wytrenowanego modelu w zakresie jego metryk oceny.
Trzy nowe hiperparametry DP-SGD mają następujące skutki i kompromisy:
- Liczba mikropartii \(B\): Ogólnie rzecz biorąc, zwiększenie tej liczby poprawi użyteczność, ponieważ zmniejsza odchylenie standardowe szumu. Spowolni to jednak trening pod względem czasu.
- Norma obcinania \(C\): Ponieważ odchylenie standardowe skal szumu z\(C\)prawdopodobnie najlepiej jest ustawić \(C\) na jakiś kwantyl (np. mediana, 75. percentyl, 90. percentyl) norm gradientu. Posiadanie zbyt dużej wartości \(C\) powoduje niepotrzebne zwiększenie ilości szumu.
- Mnożnik szumu \(σ\): Spośród trzech hiperparametrów poziom prywatności zależy tylko od mnożnika szumu. Im większy mnożnik szumu, tym większa prywatność; wiąże się to jednak również z utratą użyteczności.
Te kompromisy między użytecznością, prywatnością i szybkością w krokach/sekundę podsumowano tutaj:
Postępuj zgodnie z poniższymi sugestiami, aby znaleźć optymalne hiperparametry:
- Ustaw \(C\) na kwantyl zgodnie z zaleceniami powyżej. Wartość 1,00 często działa dobrze.
- Ustaw \(B\) = 1, aby uzyskać maksymalną prędkość treningu.
- Poeksperymentuj, aby znaleźć największą wartość σ, która nadal zapewnia akceptowalną użyteczność. Ogólnie zaobserwowano, że wartości 0,01 lub niższe działają dobrze.
- Po znalezieniu odpowiedniej wartości \(σ\) przeskaluj \(B\) i \(σ\) o stałą, aby osiągnąć rozsądny poziom prywatności.