高斯噪声的魔力
之前,我们用高斯噪声来解释 \((\varepsilon,\delta)\)-差分隐私中 \(\delta\) 到底意味着什么。但有个问题还没回答:为什么一开始要用高斯噪声?它提供的保证并不那么强——给出的是 \(\delta>0\) 的 \((\varepsilon,\delta)\)-DP,而拉普拉斯噪声能给纯 \(\varepsilon\)-DP。这篇文章就来回答这个问题,同时介绍高斯噪声表现出色的场景。
高斯噪声很好
高斯噪声的第一个好处在于,分布本身就很好用。它被称为正态分布是有道理的:性质方便,在自然科学和社会科学中广泛使用。人们经常用它来建模那些真实分布未知的随机变量。把许多独立随机变量加在一起,你最终会得到正态分布。这不过是这个基本分布众多特性中的一条罢了。所以,大多数数据分析师和科学家对高斯噪声已经很熟悉了。发布匿名统计数据时,这一点很方便:分析师不需要学太多新概念,就能理解你在用什么方法保护数据。
第二个好处是高斯分布的尾部细而漂亮。绝大部分概率质量集中在均值附近。取一个均值为 0、标准差为 \(\sigma\) 的正态分布,按 68–95–99.7 规则,从中采样的随机变量:
- 有 68% 的概率落在 \([-\sigma,\sigma]\) 内;
- 有 95% 的概率落在 \([-2\sigma,2\sigma]\) 内;
- 有 99.7% 的概率落在 \([-3\sigma,3\sigma]\) 内。
离均值越远,情况更好。随机变量落在 \([-k\sigma,k\sigma]\) 之外的概率,下降得比 \(e^{-k^2/2}\) 还快。实际应用中,你几乎不会被高斯分布采出的值惊到。就算采样 \(1,000,000\) 个值,它们很可能全都落在 \([-5\sigma,5\sigma]\) 内。
相比之下,拉普拉斯分布就没这么好了。它的尾部虽然也呈指数下降,但比高斯尾部慢得多。假设你从标准差为 \(\sigma\) 的拉普拉斯分布中采样 \(1,000,000\) 个值,平均有 849 个会落在 \([-5\sigma,5\sigma]\) 之外。
好了,高斯噪声确实不错。但这改变不了一个简单的事实:要达到同等隐私级别,拉普拉斯分布要好得多。假设我们对一个简单的计数(灵敏度为 \(1\))加噪声。下面这张图对比了获得 \(\varepsilon=1\) 所需的拉普拉斯噪声,和获得 \(\varepsilon=1\)、\(\delta=10^{-5}\) 所需的高斯噪声。
尽管隐私保证较弱,高斯分布却平坦得多——标准差约 3.7,而拉普拉斯分布只有 1.4 左右。也就是说,要加更多噪声,分析师可是很在意噪声大小的。那为什么高斯噪声反而是好选择?答案很简单:因为当你发布很多统计数据时,它会变得更好。
从一个到多个统计数据
在之前的例子中,我们假设每个人只出现在单个统计数据中。按人口统计信息对人分组时,这种情况很常见。但很多应用场景下,这个假设并不成立。比如,你想知道:"过去 10 年里,人们都看过哪些专科医生?"
假设我们在中央模型下工作。数据集是〈患者 ID,专科类型〉对,每条记录对应一次就诊(心脏病专家、皮肤科医生、放射科医生等等)。我们要统计每个专科的不同患者 ID 数量。
注意,每个患者对单个计数最多只影响一次。我们数的是不同患者 ID:就算你看了 10 次皮肤科,"皮肤科医生"的计数也只加 1。但一个患者可能看过很多种专科。专科种类繁多,一个患者可能影响所有计数——假设有 50 种。
怎么让这些计数满足差分隐私?第一个方案是在所有计数之间分割隐私预算。这里我们可以把预算分成 50 份。要实现 \(\varepsilon=1\),算出 \(\varepsilon'=1/50=0.02\),然后给所有计数加上尺度为 \(1/\varepsilon'=50\) 的拉普拉斯噪声。
不幸的是,噪声太大了。
幸运的是,这正是高斯噪声大放异彩的场景。当一个患者能影响 \(k\) 个不同统计数据时,拉普拉斯噪声需要放大 \(k\) 倍,而高斯噪声只需放大 \(\sqrt{k}\) 倍。两者一对比,高斯噪声的优势就一目了然了。
好,大致思路就是这样。但为什么会这样?为什么组合定理对拉普拉斯和高斯的表现似乎不同?为了更好地理解这一点,我们先来介绍灵敏度的概念。
不同类型的灵敏度
还是看上面的例子。对每种专科医生,我们统计就诊人数。但我们不把这个直方图看成 50 个独立的计数查询,而是看成一个函数,取值在 \(\mathbb{N}^{50}\) 中。它输出一个向量:一个含 50 个坐标的列表,每个坐标对应一种专科。怎么让这样的函数 \(f\) 满足差分隐私?我们要加噪声,按函数的灵敏度来缩放。
函数的灵敏度衡量的是:数据库中多一条或少一条记录时,输出会变化多少。如果函数返回单个数字,我们测的是差值的绝对值:\(f\) 的灵敏度就是 \(\left|f\left(D_1\right)-f\left(D_2\right)\right|\) 的最大值。之前我们已经碰过灵敏度了:计算时,如果一个患者可能让统计数据变化超过 \(1\),就需要相应放大噪声。求和时也是同样的道理。
这里,函数 \(f\) 返回的是一个向量。怎么衡量两个向量之间的距离?选择有好几种:可以用曼哈顿距离、欧几里得距离,甚至更奇怪的度量。关键在于,该用哪种距离,取决于我们加的是哪种噪声。拉普拉斯噪声按 \(L^1\) 灵敏度缩放,而 \(L^1\) 灵敏度基于曼哈顿距离。定义如下,用 \(f_i(D)\) 表示 \(f(D)\) 的第 \(i\) 个坐标:
其中 \(\max\) 取遍仅相差一条记录的 \(D_1\) 和 \(D_2\)。很好理解:把每个坐标上的灵敏度加起来就行。对我们的函数 \(f\),\(\Delta_1(f)=50\):拉普拉斯噪声需要按 50 缩放。你可能已经注意到,这等价于用简单组合定理:拉普拉斯噪声的尺度是 \(\Delta_1/\varepsilon\),所以把 \(\varepsilon\) 除以 \(50\),跟把所有坐标一起算是同一回事。
而高斯噪声按 \(L^2\) 灵敏度缩放。\(L^2\) 灵敏度基于欧几里得距离,定义为:
同样在仅相差一条记录的 \(D_1\) 和 \(D_2\) 上取 \(\max\)。这个公式看着复杂,但欧几里得距离其实是个简单的概念:就是两点之间直线的长度。如果你只有两个维度,这个公式可能会让你想起勾股定理!
高斯噪声的标准差 \(\sigma\) 正比于 \(\Delta_2(f)\)。我们来算一下。每个患者最多能把单个计数改变 1,而且能改变所有计数,所以:
噪声随计数数量的平方根缩放。这正是高斯噪声在此场景下更优的关键:\(L^2\) 灵敏度比 \(L^1\) 灵敏度增长慢得多。因此,按灵敏度缩放噪声时,对准确性的损害要小得多。当然,高斯噪声给你的是 \((\varepsilon,\delta)\)-DP,不是纯 DP,所以仍然存在取舍。不过正如上一篇文章所述,这个 \(\delta\) 并没有那么吓人,通常值得。
这篇论文(定理 8)给出了根据 \(\Delta_2(f)\)、\(\varepsilon\) 和 \(\delta\) 校准高斯噪声的精确公式。你需要选择合适的 \(\sigma\),使下式成立:
其中 \(g\) 是一个复杂的函数。可以看出,同时增大 \(\Delta_2(f)\) 和 \(\sigma\) 没有效果:\(\sigma\) 与 \(\Delta_2(f)\) 成正比。\(\sigma\) 没有解析形式,但 \(g\) 是单调的,所以可以用二分搜索之类的方法来近似。如果你想知道具体公式,点这里:
好了。你需要满足不等式:
其中 \(\Phi\) 是均值为 \(0\)、方差为 \(1\) 的高斯分布的累积分布函数。这是个不等式,但实际中你希望尽可能接近等式,这样加的噪声最少。在浮点机器上正确实现这一点,跟往常一样,相当棘手,这里是一个示例实现。
这个公式叫做解析高斯机制,有别于这篇论文(附录 A)中介绍的更经典的高斯机制。解析版本更紧凑,更重要的是,它对任意 \(\varepsilon\) 值都适用。而原始高斯机制的公式只在 \(\varepsilon<1\) 时有效。
那么,为什么这两种噪声分布的表现差异这么大?与其给出形式化证明,不如直观地看一下。我们来观察高斯和拉普拉斯噪声在二维空间中的密度函数。第一个是高斯,第二个是拉普拉斯。
可以看到,高斯噪声呈圆形,拉普拉斯噪声呈方形。向两个点加噪声后,两个点有多不可区分?用高斯噪声的话,取决于两点之间的直线距离。用拉普拉斯的话,取决于曼哈顿距离。
总之,选拉普拉斯还是高斯噪声,取决于两件事:
- 能否接受非零的 \(\delta\);
- 单个个体能影响多少个统计数据。
第一点很明确:如果要 \(\delta=0\),就不能用高斯噪声。我们来量化第二点。如果一个人最多只影响一个统计数据,拉普拉斯更好;如果能影响很多个,高斯更好。边界在哪?下面的图表回答了这个问题,比较了两种机制的标准差。我们取 \(\varepsilon=1\)、\(\delta=10^{-5}\),并假设每个人最多影响每个统计数据一次。
对这组 \(\varepsilon\) 和 \(\delta\),当每个个体能影响 8 个或更多统计数据时,高斯噪声就更优了。当然,换一组隐私参数,结果可能不同。但随着单个个体影响范围增大,高斯噪声最终总是噪声最小的选择。
进一步的用途
如果每个人对每个统计数据的影响各不相同呢?比如,我们统计的是每种医生的就诊次数。一个患者可能为某个计数贡献很多次就诊。更麻烦的是,每个患者的最大就诊次数可能因科室而异。还能用高斯噪声吗?答案是(感谢 Mark)可以:你可以先对每个统计数据做归一化,使灵敏度变为 \(1\),给它们加噪声,再缩放回来。这让高斯噪声更加强大:即使你在同一份数据上计算多个完全不相干的统计数据,也可以用高斯机制来降低噪声幅度。
最后,高斯噪声在差分隐私机器学习中被大量使用。根本原因是一样的。想想随机梯度下降这类机器学习常用算法。每次迭代中,每个数据点都会影响参数向量的多个坐标。要让它满足差分隐私,就得给所有坐标加噪声。所以高斯噪声是更好的选择,原因完全一样。机器学习中还有更多跟高斯相关的好处,不过这篇文章已经够长了。

浙公网安备 33010602011771号