Inizia

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 attualmente utilizzi un ottimizzatore TensorFlow, molto probabilmente vorrai selezionare un ottimizzatore con il nome DPKeras*Optimizer , ad esempio [ 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 chiamare Model.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 norma euclidea massima (L2) di ogni singolo gradiente calcolato 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 ciascun minibatch.

In genere, minore è la deviazione standard effettiva \(σC / B\), migliori saranno le prestazioni del modello addestrato sui relativi parametri di valutazione.

I tre nuovi iperparametri DP-SGD hanno i seguenti effetti e compromessi:

  1. Il numero di microbatch \(B\): in genere, aumentandolo si migliorerà l'utilità perché si riduce la deviazione standard del rumore. Tuttavia, rallenterà l’allenamento in termini di tempo.
  2. La norma di ritaglio \(C\): poiché la deviazione standard delle scale di rumore con\(C\), probabilmente è meglio impostare \(C\) come un quantile (ad esempio mediana, 75° percentile, 90° percentile) delle norme del gradiente. Un valore troppo grande di \(C\) aggiunge quantità di rumore inutilmente elevate.
  3. Il moltiplicatore di rumore \(σ\): dei tre iperparametri, la quantità di privacy dipende solo dal moltiplicatore di 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:

compromessi

Segui questi suggerimenti per trovare gli iperparametri ottimali:

  • Imposta \(C\) su un quantile come consigliato sopra. Un valore pari a 1,00 spesso funziona bene.
  • Imposta \(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 trovato un valore adatto di \(σ\) , ridimensionare sia \(B\) che \(σ\) in base a una costante per ottenere un livello di privacy ragionevole.