スタートガイド

このドキュメントは、読者が差分プライバシーについてすでに理解しており、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 ハイパーパラメータには、次の効果とトレードオフがあります。

  1. マイクロバッチの数 \(B\): 一般に、これを増やすとノイズの標準偏差が下がるため、実用性が向上します。ただし、時間の点でトレーニングが遅くなります。
  2. クリッピング ノルム \(C\): ノイズの標準偏差は\(C\)でスケールされるため、 \(C\) 勾配ノルムの分位値 (中央値、75 パーセンタイル、90 パーセンタイルなど) に設定するのがおそらく最善です。 \(C\) の値が大きすぎると、不必要に大量のノイズが追加されます。
  3. ノイズ乗数 \(σ\): 3 つのハイパーパラメータのうち、プライバシーの量はノイズ乗数のみに依存します。ノイズ乗数が大きいほど、より多くのプライバシーが得られます。ただし、これには実用性の喪失も伴います。

実用性、プライバシー、速度の間のトレードオフを、ステップ/秒の観点から以下にまとめます。

トレードオフ

最適なハイパーパラメータを見つけるには、次の提案に従ってください。

  • 上記で推奨されているように、 \(C\) 分位数に設定します。多くの場合、値 1.00 が適切に機能します。
  • トレーニング速度を最大にするには、 \(B\) = 1 を設定します。
  • 実験を行って、許容可能な有用性を与える σ の最大値を見つけます。一般に、0.01 以下の値が良好に機能することが観察されています。
  • \(σ\) の適切な値が見つかったら、 \(B\) と \(σ\) の両方を定数でスケールして、適切なレベルのプライバシーを実現します。