Questo documento presuppone che tu abbia già familiarità con la privacy differenziale e abbia stabilito che desideri utilizzare TF Privacy per implementare garanzie di privacy differenziali nei tuoi modelli. Se non hai familiarità con la privacy differenziale, consulta la pagina di panoramica . Dopo aver installato TF Privacy, inizia seguendo questi passaggi:
1. Scegli una versione privata differenziale di un ottimizzatore esistente
Se al momento stai utilizzando un ottimizzatore TensorFlow , molto probabilmente vorrai selezionare un ottimizzatore con il nome DPKeras*Optimizer
, come [ DPKerasAdamOptimizer
] in [ TF Privacy
].
Facoltativamente, puoi provare ottimizzatori vettoriali come [ tf_privacy.VectorizedDPKerasAdamOptimizer
]. per un eventuale miglioramento della velocità (in termini di passi globali al secondo). È stato riscontrato che l'uso di ottimizzatori vettorizzati fornisce accelerazioni incoerenti negli esperimenti, ma non è ancora ben compreso. Come prima, molto probabilmente vorrai utilizzare un ottimizzatore analogo a quello che stai utilizzando adesso. Questi ottimizzatori vettorizzati utilizzano l'operatore vectorized_map
di Tensorflow, che potrebbe non funzionare con alcuni altri operatori Tensorflow. Se questo è il tuo caso, apri un problema sul repository GitHub di TF Privacy .
2. Calcola la perdita per il tuo minibatch di input
Quando calcoli la perdita per il tuo minibatch di input, assicurati che sia un vettore con una voce per esempio, invece di aggregarlo in uno scalare. Ciò è necessario poiché DP-SGD deve essere in grado di calcolare la perdita per i singoli microbatch.
3. Addestra il tuo modello
Addestra il tuo modello utilizzando l'ottimizzatore DP (passaggio 1) e la perdita vettorizzata (passaggio 2). Ci sono due opzioni per farlo:
- Passa l'ottimizzatore e la perdita come argomenti a
Model.compile
prima di chiamareModel.fit
. - Quando scrivi un ciclo di addestramento personalizzato, utilizza
Optimizer.minimize()
sulla perdita vettorizzata.
Una volta eseguita questa operazione, è consigliabile ottimizzare gli iperparametri. Per una guida completa consultare il tutorial sulla classificazione della privacy
4. Ottimizzare gli iperparametri DP-SGD
Tutti gli ottimizzatori tf_privacy
accettano tre iperparametri aggiuntivi:
-
l2_norm_clip
o \(C\) - Norma di ritaglio (la massima norma euclidea (L2) di ogni singolo gradiente calcolata per minibatch). -
noise_multiplier
o \(σ\) - Rapporto tra la deviazione standard e la norma di ritaglio. -
num_microbatches
o \(B\) - Numero di microbatch in cui è suddiviso ogni minibatch.
In generale, minore è la deviazione standard effettiva \(σC / B\), migliori saranno le prestazioni del modello addestrato sui suoi parametri di valutazione.
I tre nuovi iperparametri DP-SGD hanno i seguenti effetti e compromessi:
- Il numero di microbatch \(B\): In generale, aumentando questo valore si migliorerà l'utilità perché si riduce la deviazione standard del rumore. Tuttavia, rallenterà l’allenamento in termini di tempo.
- La norma del ritaglio \(C\): Poiché la deviazione standard del rumore scala con\(C\), probabilmente è meglio impostare \(C\) essere un quantile (ad esempio mediana, 75° percentile, 90° percentile) delle norme del gradiente. Avere un valore troppo grande di \(C\) aggiunge inutilmente grandi quantità di rumore.
- Il moltiplicatore del rumore \(σ\): Dei tre iperparametri, la quantità di privacy dipende solo dal moltiplicatore del rumore. Maggiore è il moltiplicatore del rumore, maggiore è la privacy; tuttavia, ciò comporta anche una perdita di utilità.
Questi compromessi tra utilità, privacy e velocità in termini di passi/secondo sono riepilogati qui:
Segui questi suggerimenti per trovare gli iperparametri ottimali:
- Impostato \(C\) a un quantile come raccomandato sopra. Un valore pari a 1,00 spesso funziona bene.
- Impostato \(B\) = 1, per la massima velocità di allenamento.
- Sperimenta per trovare il valore più grande di σ che dia ancora un'utilità accettabile. In genere, è stato osservato che valori pari o inferiori a 0,01 funzionano bene.
- Una volta raggiunto un valore adeguato di \(σ\) viene trovato, ridimensionarli entrambi \(B\) E \(σ\) da una costante per raggiungere un livello ragionevole di privacy.