一种快速算法,用于以任意精度最优地组合差分隐私(DP)机制的多项隐私保证。
项目描述
隐私随机变量(PRV)会计
一种快速算法,用于以任意精度最优地组合差分隐私(DP)算法的多项隐私保证。我们的方法基于隐私损失随机变量的概念,以量化DP算法的隐私损失。更多详情请参阅[1]。
安装
pip install prv-accountant
机制
目前支持以下机制
子采样高斯机制
from prv_accountant import PoissonSubsampledGaussianMechanism
prv = PoissonSubsampledGaussianMechanism(noise_multiplier, sampling_probability)
它计算隐私曲线
$$ \delta \left ( \mathcal{N}(0, \sigma^2) | (1-p) \mathcal{N}(0, \sigma^2) + p \mathcal{N}(1, \sigma^2) \right ), $$
其中 $p$ 是采样概率,$\sigma$ 是噪声乘数。第二个参数表示混合分布。
高斯机制
from prv_accountant import GaussianMechanism
prv = GaussianMechanism(noise_multiplier)
它计算隐私曲线
$$ \delta \left ( \mathcal{N}(0, \sigma^2) | \mathcal{N}(1, \sigma^2) \right ), $$
其中 $\sigma$ 是噪声乘数。
Laplace机制
from prv_accountant import LaplaceMechanism
prv = LaplaceMechanism(mu)
它计算隐私曲线
$$ \delta \left ( \textsf{Lap}(0, 1) | \textsf{Lap}(\mu, 1) \right ). $$
纯DP和近似DP
也可以直接组合DP保证
- 使用
prv_accountant.PureDPMechanism(epsilon)
纯 $\varepsilon$-DP保证 - 使用
prv_accountant.ApproximateDPMechanism(epsilon, delta)
近似 $(\varepsilon, \delta)$-DP保证
自定义机制
也可以为组合计算添加自定义机制。一个示例可以在 这个笔记本 中找到。我们只需要实现隐私损失分布的CDF。
示例
异构组合
可以组合不同的机制。以下示例将计算三个不同机制 $M^{(a)}, M^{(b)}$ 和 $M^{(c)}$ 分别与自己组合 $m, n$ 和 $o$ 次的合成。
此类合成的应用是具有递增批大小和递增采样概率的 DP-SGD 训练。在 $m+n+o$ 次训练步骤后,整个训练过程的隐私机制 $M$ 为 $M = M_1^{(a)} \circ \dots \circ M_m^{(a)} \circ M_1^{(b)} \circ \dots \circ M_n^{(b)} \circ M_1^{(c)} \circ \dots \circ M_o^{(c)}$。
使用 prv_accountant
,我们需要为每个机制创建一个隐私随机变量
from prv_accountant.privacy_random_variables import PoissonSubsampledGaussianMechanism, GaussianMechanism, LaplaceMechanism
prv_a = PoissonSubsampledGaussianMechanism(noise_multiplier=0.8, sampling_probability=5e-3)
prv_b = GaussianMechanism(noise_multiplier=8.0)
prv_c = LaplaceMechanism(mu=0.1)
m = 100
n = 200
o = 100
接下来,我们需要创建一个会计实例。会计将处理大部分数值复杂性,例如找到 PRV 的支持集和离散化。为了找到一个合适的领域,会计需要知道每个 PRV 自身将进行的最大组合次数。较大的 max_self_compositions
值会导致较大的领域,这可能引起性能降低。在 DP-SGD 的情况下,合理的 max_self_compositions
值应该是总训练步骤数。此外,还需要提供对 $\varepsilon$ 和 $\delta$ 的期望误差界限。
from prv_accountant import PRVAccountant
accountant = PRVAccountant(
prvs=[prv_a, prv_b, prv_c],
max_self_compositions=[1_000, 1_000, 1_000],
eps_error=0.1,
delta_error=1e-10
)
最后,我们可以计算组合。机制 $M$ 的最终 $\varepsilon$ 界限和估计值
eps_low, eps_est, eps_up = accountant.compute_epsilon(delta=1e-6, num_self_compositions=[m, n, o])
DP-SGD
对于同质 DP-SGD(即常量噪声乘数和常量采样概率),事情更加简单。我们提供了一个简单的命令行工具来获取 $\varepsilon$ 估计值。
compute-dp-epsilon --sampling-probability 5e-3 --noise-multiplier 0.8 --delta 1e-6 --num-compositions 1000
或者,在 Python 代码中使用它
from prv_accountant.dpsgd import DPSGDAccountant
accountant = DPSGDAccountant(
noise_multiplier=0.8,
sampling_probability=5e-3,
delta=1e-6,
eps_error=0.1,
delta_error=1e-10,
max_compositions=1000
)
eps_low, eps_estimate, eps_upper = accountant.compute_epsilon(num_compositions=1000)
有关更多示例,请参阅 notebooks
目录。
参考文献
贡献
本项目欢迎贡献和建议。大多数贡献都需要您同意贡献者许可协议(CLA),声明您有权并且实际上确实授予我们使用您的贡献的权利。有关详细信息,请访问 https://cla.opensource.microsoft.com。
当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供 CLA,并相应地装饰 PR(例如,状态检查,评论)。只需遵循机器人提供的说明即可。您只需在整个使用我们的 CLA 的所有存储库中这样做一次。
本项目采用了 Microsoft Open Source Code of Conduct。有关更多信息,请参阅 Code of Conduct FAQ 或联系 opencode@microsoft.com 以获取任何额外的问题或评论。
商标
本项目可能包含项目、产品或服务的商标或徽标。Microsoft 商标或徽标的授权使用必须遵守并遵循 Microsoft 的商标和品牌指南。在修改本项目的版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 赞助。任何使用第三方商标或徽标的行为均受那些第三方政策的规定。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。