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 funkcji
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 przycinania (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 jaką podzielona jest każda minipartia.
Generalnie, 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 wartości poprawi użyteczność, ponieważ zmniejsza odchylenie standardowe szumu. Spowolni to jednak trening pod względem czasu.
- Norma przycinania \(C\): Od odchylenia standardowego skali szumu z\(C\), prawdopodobnie najlepiej będzie ustawić \(C\) być jakimś kwantylem (np. medianą, 75. percentylem, 90. percentylem) norm gradientu. Posiadanie zbyt dużej wartości \(C\) dodaje niepotrzebnie dużo hałasu.
- Mnożnik szumu \(σ\): Z trzech hiperparametrów stopień 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:
- Ustawić \(C\) do kwantyla, jak zalecono powyżej. Wartość 1,00 często działa dobrze.
- Ustawić \(B\) = 1, dla maksymalnej prędkości 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.
- Gdy odpowiednia wartość \(σ\) zostanie znaleziony, skaluj oba \(B\) I \(σ\) przez stałą, aby osiągnąć rozsądny poziom prywatności.