このドキュメントは、読者が差分プライバシーについてすでに理解しており、TF プライバシーを使用してモデルに差分プライバシー保証を実装したいと判断していることを前提としています。差分プライバシーについてよく知らない場合は、概要ページを参照してください。 TF Privacy をインストールしたら、次の手順に従って開始します。
1. 既存のオプティマイザーの差分プライベート バージョンを選択します
現在 TensorFlowオプティマイザーを使用している場合は、[ TF Privacy
] の [ DPKerasAdamOptimizer
] など、 DPKeras*Optimizer
という名前のオプティマイザーを選択することになるでしょう。
必要に応じて、[ tf_privacy.VectorizedDPKerasAdamOptimizer
] などのベクトル化されたオプティマイザーを試してみることもできます。速度が向上する可能性があります (1 秒あたりのグローバル ステップ数に関して)。ベクトル化されたオプティマイザーを使用すると、実験で一貫性のない速度向上が得られることがわかっていますが、まだ十分に理解されていません。前と同様、現在使用しているオプティマイザと同様のオプティマイザを使用することになるでしょう。これらのベクトル化オプティマイザーは Tensorflow のvectorized_map
演算子を使用しますが、他の Tensorflow 演算子では機能しない可能性があります。これに該当する場合は、 TF Privacy GitHub リポジトリで問題を開いてください。
2. 入力ミニバッチの損失を計算する
入力ミニバッチの損失を計算するときは、スカラーに集約するのではなく、例ごとに 1 つのエントリを持つベクトルであることを確認してください。 DP-SGD は個々のマイクロバッチの損失を計算できなければならないため、これが必要です。
3. モデルをトレーニングする
DP オプティマイザー (ステップ 1) とベクトル化された損失 (ステップ 2) を使用してモデルをトレーニングします。これを行うには 2 つのオプションがあります。
-
Model.fit
呼び出す前に、オプティマイザと損失を引数としてModel.compile
に渡します。 - カスタム トレーニング ループを作成する場合は、ベクトル化された損失に対して
Optimizer.minimize()
を使用します。
これが完了したら、ハイパーパラメータを調整することをお勧めします。完全なチュートリアルについては、分類プライバシーのチュートリアルを参照してください。
4. DP-SGD ハイパーパラメータを調整する
すべてのtf_privacy
オプティマイザーは、次の 3 つの追加ハイパーパラメーターを受け取ります。
-
l2_norm_clip
または \(C\) - クリッピング ノルム (ミニバッチごとに計算された個々の勾配の最大ユークリッド (L2) ノルム)。 -
noise_multiplier
または \(σ\) - クリッピングノルムに対する標準偏差の比率。 -
num_microbatches
または \(B\) - 各ミニバッチが分割されるマイクロバッチの数。
一般に、有効標準偏差が低いほど、 \(σC / B\)、評価メトリクスにおけるトレーニング済みモデルのパフォーマンスが向上します。
3 つの新しい DP-SGD ハイパーパラメータには、次の効果とトレードオフがあります。
- マイクロバッチの数 \(B\): 一般に、これを増やすとノイズの標準偏差が下がるため、実用性が向上します。ただし、時間の点でトレーニングが遅くなります。
- クリッピングノルム \(C\): ノイズスケールの標準偏差は\(C\)、おそらく設定するのが最善です \(C\) 勾配ノルムの分位値(中央値、75 パーセンタイル、90 パーセンタイルなど)になるようにします。の値が大きすぎると、 \(C\) 不必要に大量のノイズが追加されます。
- ノイズ乗数 \(σ\): 3 つのハイパーパラメータのうち、プライバシーの量はノイズ乗数のみに依存します。ノイズ乗数が大きいほど、より多くのプライバシーが得られます。ただし、これには実用性の喪失も伴います。
ユーティリティ、プライバシー、速度の間のトレードオフを、ステップ/秒の観点から以下にまとめます。
最適なハイパーパラメータを見つけるには、次の提案に従ってください。
- セット \(C\) 上記で推奨されているように分位数に変換します。多くの場合、値 1.00 が適切に機能します。
- セット \(B\) = 1、トレーニング速度を最大にします。
- 実験を行って、許容可能な有用性を与える σ の最大値を見つけます。一般に、0.01 以下の値が良好に機能することが観察されています。
- 適切な値が得られると、 \(σ\) が見つかった場合、両方をスケールします \(B\) そして \(σ\) 適度なレベルのプライバシーを達成するために一定の割合で調整します。