本文件假設您已熟悉差分隱私,並已確定您想要使用 TF Privacy 在模型中實作差分隱私保證。如果您不熟悉差分隱私,請參閱總覽頁面。安裝 TF Privacy 後,請按照下列步驟開始使用
1. 選擇現有最佳化工具的差分隱私版本
如果您目前使用 TensorFlow optimizer,您很可能想要選取名稱為 DPKeras*Optimizer
的 Optimizer,例如 [DPKerasAdamOptimizer
](在 [TF Privacy
] 中)。
或者,您可以嘗試向量化最佳化工具,例如 [tf_privacy.VectorizedDPKerasAdamOptimizer
],以提升速度(以每秒全域步驟為單位)。實驗發現,使用向量化最佳化工具提供的加速效果不一致,但目前尚未完全了解。如同先前所述,您可能仍會想使用與您目前使用的最佳化工具類似的工具。這些向量化最佳化工具使用 Tensorflow 的 vectorized_map
運算子,可能無法與其他 Tensorflow 運算子搭配使用。如果您遇到這種情況,請在 TF Privacy GitHub 存放庫上建立問題單。
2. 計算輸入小批次的損失
計算輸入小批次的損失時,請務必使其成為每個範例一個條目的向量,而不是將其匯總為純量。這是必要的,因為 DP-SGD 必須能夠計算個別微批次的損失。
3. 訓練您的模型
使用 DP 最佳化工具(步驟 1)和向量化損失(步驟 2)訓練您的模型。有兩種方法可以執行此操作
- 在呼叫
Model.fit
之前,將最佳化工具和損失作為引數傳遞至Model.compile
。 - 撰寫自訂訓練迴圈時,請在向量化損失上使用
Optimizer.minimize()
。
完成此操作後,建議您調整超參數。如需完整逐步解說,請參閱分類隱私教學課程
4. 調整 DP-SGD 超參數
所有 tf_privacy
最佳化工具都採用三個額外超參數
l2_norm_clip
或 \(C\) - 裁剪範數(每個小批次計算的每個個別梯度的最大歐幾里得 (L2) 範數)。noise_multiplier
或 \(σ\) - 標準差與裁剪範數的比率。num_microbatches
或 \(B\) - 每個小批次分割成的微批次數量。
一般而言,有效標準差 \(σC / B\) 越低,訓練模型在其評估指標上的效能就越好。
三個新的 DP-SGD 超參數具有以下效果和取捨
- 微批次數量 \(B\):一般而言,增加此值會提高實用性,因為它可以降低雜訊的標準差。但是,這會減慢訓練時間。
- 裁剪範數 \(C\):由於雜訊的標準差會隨著 \(C\) 縮放,因此最好將 \(C\) 設定為梯度範數的某些分位數(例如中位數、第 75 個百分位數、第 90 個百分位數)。\(C\) 值過大會不必要地增加大量雜訊。
- 雜訊乘數 \(σ\):在三個超參數中,隱私量僅取決於雜訊乘數。雜訊乘數越大,獲得的隱私就越多;但是,這也會導致實用性降低。
此處摘要說明了實用性、隱私權和速度(以每秒步驟為單位)之間的取捨
遵循這些建議以找出最佳超參數
- 將 \(C\) 設定為上述建議的分位數。1.00 的值通常效果良好。
- 將 \(B\) 設定為 1,以獲得最快的訓練速度。
- 實驗找出仍能提供可接受實用性的最大 σ 值。一般而言,已觀察到 0.01 或更低的值效果良好。
- 找到合適的 \(σ\) 值後,將 \(B\) 和 \(σ\) 都按常數縮放,以達到合理的隱私權等級。