Commencer

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'appeler Model.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 \(σC / B\)est faible, 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 :

  1. Le nombre de microbatches \(B\): Généralement, l'augmenter améliorera l'utilité car cela réduira l'écart type du bruit. Cependant, cela ralentira la formation en termes de temps.
  2. La norme d'écrêtage \(C\): Étant donné l'écart type des échelles de bruit avec\(C\), il est probablement préférable de définir \(C\) comme étant un quantile (par exemple médiane, 75e centile, 90e centile) des normes de gradient. Une valeur trop élevée de \(C\) ajoute des quantités de bruit inutilement importantes.
  3. 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 :

compromis

Suivez ces suggestions pour trouver les hyperparamètres optimaux :

  • Définissez \(C\) sur un quantile comme recommandé ci-dessus. Une valeur de 1,00 fonctionne souvent bien.
  • Réglez \(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 qu'une valeur appropriée de \(σ\) est trouvée, mettez à l'échelle \(B\) et \(σ\) selon une constante pour obtenir un niveau de confidentialité raisonnable.