解析高斯机制(Analytic Gaussian Mechanism)

解析高斯机制(Analytic Gaussian Mechanism)

本文不保证正确性,任何错误都是有可能的


前言

需要注意,Analytic Gaussian Mechanism在文献[1](没看过原文)中被提出,但本文对Analytic Gaussian Mechanism定义和理解来自于文献[2]。
[1] Borja Balle and Yu-Xiang Wang. 2018. Improving the Gaussian Mechanism for Diferential Privacy: Analytical Calibration and Optimal Denoising. In ICML. 403–412.
[2] Ergute Bao, Yin Yang, Xiaokui Xiao, and Bolin Ding. 2021. CGM: an enhanced mechanism for streaming data collection with local differential privacy. Proc. VLDB Endow. 14, 11 (July 2021), 2258–2270.

Github上有关于Analytic Gaussian Mechanism的实现代码(https://github.com/BorjaBalle/analytic-gaussian-mechanism/blob/master/agm-example.py),但是和文献[2]的定义对不上,所以这里就没用上,读者可自行参考。


一、定义

Analytic Gaussian Mechanism是对Gaussian Mechanism的一种改进,其本质依旧是向数据中注入满足 ( ϵ , δ ) (\epsilon,\delta) (ϵ,δ)-差分隐私的高斯噪声,其噪声是从高斯分布 N ( 0 , σ 2 ) \mathcal{N}(0, \sigma^2) N(0,σ2)中的取样。高斯机制的更多解释可参考文章【我们为什么用高斯机制?】。

Analytic Gaussian Mechanism的定义如下(文献[2]第三页Lemma2.4)

文献[2]第三页Lemma2.4
上述定义中的 S ( F ) S(F) S(F)表示 L 2 L_2 L2灵敏度,对于单个数据而言,灵敏度计算方式为(最大值-最小值)。 I \mathbf{I} I表示单位矩阵,因为文中假设需要扰动的数据是 d d d-维向量,所以每个数据需要 d d d个取样。本文谈论的是单个数据的扰动,即给定参数 ϵ \epsilon ϵ δ \delta δ,计算出注入数据 x x x的噪声 N ( 0 , σ 2 ) \mathcal{N}(0,\sigma^2) N(0,σ2)

二、实现

高斯噪声的计算过程如下:
1.根据给定参数 ϵ \epsilon ϵ δ \delta δ,计算 X \mathcal{X} X
2.根据参数 X \mathcal{X} X,计算 σ \sigma σ
3.根据参数 σ \sigma σ,取样

1.计算 X \mathcal{X} X

定义误差函数(Eerror Function, ERF)
e r f ( x ) = 2 π ∫ 0 ∞ e − t 2 d t . erf(x)=\frac{2}{\sqrt{\pi}}\int_0^\infty e^{-t^2}dt. erf(x)=π 20et2dt.
则互补误差函数(Error Function Complement, erfc)写为
e r f c ( x ) = 1 − e r f ( x ) . erfc(x)=1-erf(x). erfc(x)=1erf(x).

根据定义公式, X \mathcal{X} X的计算方式为(注意, e x p ( x ) = e x exp(x)=e^x exp(x)=ex
e r f c ( X ) − e ϵ ⋅ e r f c ( X 2 + ϵ ) = 2 δ 1 − e r f ( X ) − e ϵ ⋅ ( 1 − e r f ( X 2 + ϵ ) ) = 2 δ 1 − e ϵ + e ϵ ⋅ e r f ( X 2 + ϵ ) − e r f ( X ) = 2 δ e ϵ ⋅ e r f ( X 2 + ϵ ) − e r f ( X ) = 2 δ − 1 + e ϵ \begin{aligned} erfc(\mathcal{X})-e^\epsilon\cdot erfc(\sqrt{\mathcal{X}^2+\epsilon})&=2\delta\\ 1-erf(\mathcal{X})-e^\epsilon\cdot (1-erf(\sqrt{\mathcal{X}^2+\epsilon}))&=2\delta\\ 1-e^\epsilon+e^\epsilon\cdot erf(\sqrt{\mathcal{X}^2+\epsilon})-erf(\mathcal{X})&=2\delta\\ e^\epsilon\cdot erf(\sqrt{\mathcal{X}^2+\epsilon})-erf(\mathcal{X})&=2\delta-1+e^\epsilon \end{aligned} erfc(X)eϵerfc(X2+ϵ )1erf(X)eϵ(1erf(X2+ϵ ))1eϵ+eϵerf(X2+ϵ )erf(X)eϵerf(X2+ϵ )erf(X)=2δ=2δ=2δ=2δ1+eϵ

将误差函数代入得到
e ϵ ⋅ 2 π ∫ 0 X 2 + ϵ e − t 2 d t − 2 π ∫ 0 X e − t 2 d t = 2 δ − 1 + e ϵ e ϵ ⋅ ∫ 0 X 2 + ϵ e − t 2 d t − ∫ 0 X e − t 2 d t = π 2 ⋅ ( 2 δ − 1 + e ϵ ) \begin{aligned} e^\epsilon\cdot \frac{2}{\sqrt{\pi}}\int_0^{\sqrt{\mathcal{X}^2+\epsilon}} e^{-t^2}dt-\frac{2}{\sqrt{\pi}}\int_0^\mathcal{X} e^{-t^2}dt&=2\delta-1+e^\epsilon\\ e^\epsilon\cdot \int_0^{\sqrt{\mathcal{X}^2+\epsilon}} e^{-t^2}dt-\int_0^\mathcal{X} e^{-t^2}dt&=\frac{\sqrt{\pi}}{2}\cdot(2\delta-1+e^\epsilon) \end{aligned} eϵπ 20X2+ϵ et2dtπ 20Xet2dteϵ0X2+ϵ et2dt0Xet2dt=2δ1+eϵ=2π (2δ1+eϵ)

因为 ∫ 0 x e − t 2 d t \int_0^x e^{-t^2}dt 0xet2dt 没有初等函数的解析表达式,我们没有办法直接解出 X \mathcal{X} X,转而使用数值方法来解。在 ϵ \epsilon ϵ δ \delta δ已知的情况下,等式右边可以视为一个常数 C C C,定义函数 F ( x ) = ∫ 0 x e − t 2 d t F(x)=\int_0^x e^{-t^2}dt F(x)=0xet2dt,则上述式子可以写为
e ϵ ⋅ F ( x 2 + ϵ ) − F ( x ) = C e^\epsilon\cdot F(\sqrt{x^2+\epsilon})-F(x)=C eϵF(x2+ϵ )F(x)=C

然后,定义函数 G ( x ) = e ϵ ⋅ F ( x 2 + ϵ ) − F ( x ) G(x)=e^\epsilon\cdot F(\sqrt{x^2+\epsilon})-F(x) G(x)=eϵF(x2+ϵ )F(x),我们需要计算 G ( x ) = C G(x)=C G(x)=C。根据 链式法则 和 积分函数的导数等于被积函数 的原则,我们求出 G ′ ( x ) G^\prime(x) G(x)
G ′ ( x ) = e ϵ ⋅ F ′ ( x 2 + ϵ ) − F ′ ( x ) = e ϵ ⋅ e − x 2 − 1 ⋅ x x 2 + 1 − e 2 x 2 \begin{aligned} G^\prime(x)&=e^\epsilon\cdot F^\prime(\sqrt{x^2+\epsilon})-F^\prime(x)\\ &=e^\epsilon\cdot e^{-x^2-1}\cdot\frac{x}{\sqrt{x^2+1}}-e^{2x^2} \end{aligned} G(x)=eϵF(x2+ϵ )F(x)=eϵex21x2+1 xe2x2

之后,可以使用牛顿迭代法来计算:
1.选取初始值 x 0 x_0 x0
2.计算 G ( x n ) G(x_n) G(xn) G ′ ( x n ) G^\prime(x_n) G(xn)
3.更新 x n + 1 = x n − G ( x n ) − C G ′ ( x n ) x_{n+1}=x_n-\frac{G(x_n)-C}{G^\prime(x_n)} xn+1=xnG(xn)G(xn)C
4.检查 ∣ G ( x n + 1 ) − C ∣ |G(x_{n+1})-C| G(xn+1)C是否收敛(小于选定的阈值),不收敛则返回步骤2

或者直接使用Python中的fsolve函数求解。此外,在计算 G ( x ) G(x) G(x)时还是不可避免的需要计算 ∫ 0 x e − t 2 d t \int_0^x e^{-t^2}dt 0xet2dt,详细的解法可以参考【高斯误差函数erf的数值计算方法】。简单的做法是直接使用Python中的quad函数,最后得到的结果 x x x可视为 X \mathcal{X} X

2.计算 σ \sigma σ和噪声

有了 X \mathcal{X} X,接下来便是计算标准差 σ \sigma σ,定义中给出的条件公式为不等式小于等于,我们直接考虑等于的情况,即
σ = S ( F ) 2 ( X 2 + ϵ − X ) \sigma=\frac{S(F)}{\sqrt{2}(\sqrt{\mathcal{X}^2+\epsilon}-\mathcal{X})} σ=2 (X2+ϵ X)S(F)
然后便可从 X ( 0 , σ 2 ) \mathcal{X}(0,\sigma^2) X(0,σ2)中取样得到噪声。

代码如下(示例):

import math

import numpy as np
import numpy.random
from scipy.integrate import quad
from scipy.optimize import fsolve

epsilon = 1
delta = 10 ** -5
sensitivity = math.sqrt(2)


# 定义 F(x)
def F(x):
    return quad(lambda t: np.exp(-t**2), 0, x)[0]


# 定义 G(x)
def G(x, C):
    return (math.e ** epsilon) * F(np.sqrt(x**2 + 1)) - F(x) - C


# 设定 C 的值
C = (2 * delta + math.e ** epsilon - 1) * math.sqrt(math.pi) / 2

# 使用 fsolve 求解
X = fsolve(lambda x: G(x, C), np.array([2.0]))[0]

sigma = sensitivity / (math.sqrt(2) * (math.sqrt(X ** 2 + epsilon) - X))

noise = numpy.random.normal(0, sigma ** 2)
print(X, sigma, noise)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值