Rozpocznij

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:

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:

  1. 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.
  2. 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.
  3. 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:

kompromisy

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.