入门

本文档假定您已经熟悉差分隐私,并且已经确定您希望使用 TF Privacy 在您的模型中实施差分隐私保证。如果您不熟悉差分隐私,请查看 概述页面。安装 TF Privacy 后,请按照以下步骤开始使用

1. 选择现有优化器的差分隐私版本

如果您当前正在使用 TensorFlow 优化器,您很可能希望选择一个名称为 DPKeras*Optimizer 的优化器,例如 [DPKerasAdamOptimizer] 在 [TF Privacy] 中。

或者,您可以尝试使用矢量化优化器,例如 [tf_privacy.VectorizedDPKerasAdamOptimizer],以实现可能的加速(以每秒全局步骤衡量)。实验表明,使用矢量化优化器可以提供不一致的加速,但尚未完全了解。与以前一样,您很可能希望使用与您现在使用的优化器类似的优化器。这些矢量化优化器使用 Tensorflow 的 vectorized_map 运算符,该运算符可能无法与其他一些 Tensorflow 运算符一起使用。如果您的情况如此,请 在 TF Privacy GitHub 存储库中打开一个问题

2. 计算输入小批量的损失

计算输入小批量的损失时,请确保它是一个向量,每个示例包含一个条目,而不是将其聚合为一个标量。这是必要的,因为 DP-SGD 必须能够计算单个微批量的损失。

3. 训练您的模型

使用 DP 优化器(步骤 1)和矢量化损失(步骤 2)训练您的模型。有两种方法可以做到这一点

完成此操作后,建议您调整超参数。有关完整演练,请参阅 分类隐私教程

4. 调整 DP-SGD 超参数

所有 tf_privacy 优化器都接受三个额外的超参数

  • l2_norm_clip 或 \(C\) - 剪切范数(每个小批量计算的每个单个梯度的最大欧几里得 (L2) 范数)。
  • noise_multiplier 或 \(σ\) - 标准差与剪切范数的比率。
  • num_microbatches 或 \(B\) - 将每个小批量拆分的微批数量。

通常,有效标准差 \(σC / B\) 越低,训练后的模型在其评估指标上的性能就越好。

三个新的 DP-SGD 超参数具有以下影响和权衡

  1. 微批数量 \(B\):通常,增加此值会提高效用,因为它会降低噪声的标准差。但是,它会减慢训练速度(以时间衡量)。
  2. 剪切范数 \(C\):由于噪声的标准差随 \(C\) 缩放,因此最好将 \(C\) 设置为梯度范数的某个分位数(例如,中位数、第 75 个百分位数、第 90 个百分位数)。\(C\) 的值过大,会不必要地增加大量噪声。
  3. 噪声乘数 \(σ\):在三个超参数中,隐私量仅取决于噪声乘数。噪声乘数越大,获得的隐私就越多;但是,这也伴随着效用的损失。

这些关于效用、隐私和速度(以每秒步骤衡量)的权衡总结如下

tradeoffs

按照以下建议找到最佳超参数

  • 如上所述,将 \(C\) 设置为分位数。值 1.00 通常效果很好。
  • 将 \(B\) 设置为 1,以实现最大训练速度。
  • 进行实验以找到仍然可以提供可接受效用的 σ 的最大值。通常,观察到 0.01 或更低的值效果很好。
  • 找到合适的 \(σ\) 值后,将 \(B\) 和 \(σ\) 同时按一个常数缩放,以实现合理的隐私级别。