Ce document suppose que vous êtes déjà familier avec la confidentialité différentielle et que vous avez déterminé que vous souhaitez utiliser TF Privacy pour mettre en œuvre des garanties de confidentialité différentielles dans votre(vos) modèle(s). Si vous n'êtes pas familier avec la confidentialité différentielle, veuillez consulter la page de présentation . Après avoir installé TF Privacy, commencez en suivant ces étapes :
1. Choisissez une version différentiellement privée d'un optimiseur existant
Si vous utilisez actuellement un optimiseur TensorFlow , vous souhaiterez probablement sélectionner un optimiseur portant le nom DPKeras*Optimizer
, tel que [ DPKerasAdamOptimizer
] dans [ TF Privacy
].
En option, vous pouvez essayer des optimiseurs vectorisés comme [ tf_privacy.VectorizedDPKerasAdamOptimizer
]. pour une éventuelle amélioration de la vitesse (en termes de pas globaux par seconde). Il a été constaté que l'utilisation d'optimiseurs vectoriels fournit des accélérations incohérentes dans les expériences, mais n'est pas encore bien comprise. Comme auparavant, vous souhaiterez probablement utiliser un optimiseur analogue à celui que vous utilisez actuellement. Ces optimiseurs vectorisés utilisent l'opérateur vectorized_map
de Tensorflow, qui peut ne pas fonctionner avec certains autres opérateurs Tensorflow. Si tel est votre cas, veuillez ouvrir un ticket sur le référentiel GitHub de TF Privacy .
2. Calculez la perte pour votre mini-lot d'entrée
Lorsque vous calculez la perte de votre mini-lot d'entrée, assurez-vous qu'il s'agit d'un vecteur avec une entrée par exemple, au lieu de l'agréger en un scalaire. Cela est nécessaire puisque DP-SGD doit être capable de calculer la perte pour des microlots individuels.
3. Entraînez votre modèle
Entraînez votre modèle à l'aide de DP Optimizer (étape 1) et de la perte vectorisée (étape 2). Il existe deux options pour ce faire :
- Transmettez l'optimiseur et la perte comme arguments à
Model.compile
avant d'appelerModel.fit
. - Lors de l'écriture d'une boucle d'entraînement personnalisée, utilisez
Optimizer.minimize()
sur la perte vectorisée.
Une fois cela fait, il est recommandé d’ajuster vos hyperparamètres. Pour une présentation complète, consultez le didacticiel sur la confidentialité de la classification.
4. Ajustez les hyperparamètres DP-SGD
Tous les optimiseurs tf_privacy
prennent trois hyperparamètres supplémentaires :
-
l2_norm_clip
ou \(C\) - Norme d'écrêtage (la norme euclidienne maximale (L2) de chaque gradient individuel calculée par mini-lot). -
noise_multiplier
ou \(σ\) - Rapport de l'écart type à la norme d'écrêtage. -
num_microbatches
ou \(B\) - Nombre de microlots dans lesquels chaque minilot est divisé.
Généralement, plus l'écart type effectif est faible \(σC / B\), meilleures sont les performances du modèle entraîné sur ses métriques d'évaluation.
Les trois nouveaux hyperparamètres DP-SGD ont les effets et compromis suivants :
- Le nombre de microlots \(B\): Généralement, l'augmentation de cette valeur améliorera l'utilité car elle réduit l'écart type du bruit. Cependant, cela ralentira la formation en termes de temps.
- La norme de détourage \(C\): Puisque l’écart type des échelles de bruit avec\(C\), il est probablement préférable de définir \(C\) être un quantile (par exemple médiane, 75e percentile, 90e percentile) des normes de gradient. Ayant une valeur trop grande de \(C\) ajoute inutilement de grandes quantités de bruit.
- Le multiplicateur de bruit \(σ\): Parmi les trois hyperparamètres, le degré de confidentialité dépend uniquement du multiplicateur de bruit. Plus le multiplicateur de bruit est grand, plus l’intimité est obtenue ; cependant, cela s’accompagne également d’une perte d’utilité.
Ces compromis entre utilité, confidentialité et vitesse en termes de pas/seconde sont résumés ici :
Suivez ces suggestions pour trouver les hyperparamètres optimaux :
- Ensemble \(C\) à un quantile comme recommandé ci-dessus. Une valeur de 1,00 fonctionne souvent bien.
- Ensemble \(B\) = 1, pour une vitesse d'entraînement maximale.
- Expérimentez pour trouver la plus grande valeur de σ qui donne encore une utilité acceptable. En général, les valeurs de 0,01 ou moins fonctionnent bien.
- Une fois une valeur appropriée de \(σ\) est trouvé, mettez à l'échelle les deux \(B\) et \(σ\) par une constante pour atteindre un niveau raisonnable de confidentialité.