跳转到主要内容

一种快速算法,用于以任意精度最优地组合差分隐私(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 目录。

参考文献

[1] Sivakanth Gopi, Yin Tat Lee, Lukas Wutschitz. (2021). Numerical composition of differential privacy. Advances in Neural Information Processing Systems

贡献

本项目欢迎贡献和建议。大多数贡献都需要您同意贡献者许可协议(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 赞助。任何使用第三方商标或徽标的行为均受那些第三方政策的规定。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源代码分发

prv_accountant-0.2.0.tar.gz (17.7 kB 查看哈希值)

上传于 源代码

构建分发

prv_accountant-0.2.0-py3-none-any.whl (21.8 kB 查看哈希值)

上传于 Python 3

支持者