4. 高斯机制与近似差分隐私

纯 ε-差分隐私要求机制对任意相邻数据集输出分布的比值都被 ε 一致约束,这在数值查询上往往需要拉普拉斯噪声。但当查询是实值函数、且允许一个极小的失败概率 δ 时,高斯机制可以用更小的噪声方差达到同等隐私强度,这就是 (ε, δ)-近似差分隐私的工程价值。本节围绕高斯机制的实现、噪声校准公式以及 ε、δ、敏感度、噪声尺度之间的权衡展开。

从纯 ε 到 (ε, δ):为什么需要 δ

纯 ε-差分隐私要求对任意相邻数据集 D、D′ 和任意输出集合 S,满足 Pr[M(D)∈S] ≤ e^ε · Pr[M(D′)∈S]。这个条件对分布的整个支撑集都成立,包括概率极小的尾部区域。高斯分布的尾部无限延伸,两个均值相差 Δ 的高斯分布在极远处仍会出现比值超过 e^ε 的情况,因此高斯机制无法满足纯 ε-差分隐私,只能保证“除了概率不超过 δ 的坏事件之外”满足 ε 约束。形式化地,若对任意相邻数据集,存在一个概率至少为 1−δ 的事件使得在该事件上比值约束成立,则称机制满足 (ε, δ)-差分隐私。δ 通常取远小于 1/N 的量级(N 为数据集规模),例如 10⁻⁵ 或 10⁻⁶,表示“隐私保证被破坏的概率上限”。

高斯机制的定义与噪声校准

给定查询函数 f: D → ℝ^d,其 L2 敏感度为 Δ₂f = max_{D∼D′} ‖f(D) − f(D′)‖₂。高斯机制输出 M(D) = f(D) + 𝒩(0, σ²I),即在每个维度上独立加入均值为 0、标准差为 σ 的高斯噪声。要使该机制满足 (ε, δ)-差分隐私,噪声尺度 σ 必须满足:

σ ≥ (Δ₂f / ε) · sqrt(2 · ln(1.25 / δ))

这个公式是高斯机制的核心校准关系。它表明:噪声标准差与敏感度成正比、与 ε 成反比,同时随 δ 减小而增大(因为 ln(1.25/δ) 随 δ 减小而增大)。例如,当 Δ₂f = 1、ε = 1、δ = 10⁻⁵ 时,sqrt(2·ln(1.25×10⁵)) ≈ sqrt(2×11.74) ≈ 4.85,因此 σ ≈ 4.85。若把 δ 收紧到 10⁻⁷,则 sqrt(2·ln(1.25×10⁷)) ≈ sqrt(2×16.34) ≈ 5.72,σ 增大约 18%。这说明 δ 的收紧会直接抬高噪声成本。

工程上常把 δ 设为 1/N² 或 1/N^1.5(N 为数据集记录数),以保证“单个个体被泄露的概率”足够低。δ 不应设为 0,否则退化为纯 ε-差分隐私,高斯机制不再适用。

敏感度:噪声校准的输入

敏感度是高斯机制中唯一由数据与查询决定的量,必须在加噪前计算或上界估计。对于计数查询 f(D) = |{x ∈ D : x 满足条件}|,改变一条记录最多使计数变化 1,故 Δ₂f = 1。对于求和查询 f(D) = Σ_{x∈D} x,若每条记录的取值被裁剪到 [−B, B],则 Δ₂f = 2B(一条记录替换最多带来 2B 的 L2 变化)。对于均值查询,通常先求裁剪后的和再除以 n,敏感度为 2B/n。工程实现中,裁剪边界 B 的选择直接决定敏感度,进而决定噪声量:B 越大,偏差越小但噪声越大;B 越小,噪声越小但截断偏差越大。

实现高斯机制

下面给出一个可直接运行的高斯机制实现,包含敏感度计算、σ 校准和加噪输出。示例参数为教学假设,用于说明计算过程。

import math
import numpy as np

def gaussian_sigma(delta2f, epsilon, delta):
    """根据 (ε, δ) 校准高斯噪声标准差"""
    if delta <= 0 or delta >= 1:
        raise ValueError("delta 必须在 (0, 1) 内")
    return (delta2f / epsilon) * math.sqrt(2 * math.log(1.25 / delta))

def gaussian_mechanism(true_value, delta2f, epsilon, delta, rng=None):
    """对实值查询结果加高斯噪声"""
    rng = rng or np.random.default_rng()
    sigma = gaussian_sigma(delta2f, epsilon, delta)
    noise = rng.normal(0.0, sigma, size=np.shape(true_value))
    return true_value + noise, sigma

# 示例:计数查询,Δ₂f = 1,ε = 1,δ = 1e-5
true_count = 1200
noisy, sigma = gaussian_mechanism(true_count, 1.0, 1.0, 1e-5, np.random.default_rng(42))
print(f"sigma = {sigma:.3f}, noisy = {noisy:.2f}")

运行上述代码(示例参数)会得到 σ ≈ 4.85,输出值在真实计数附近波动。注意:单次输出并不能验证隐私,隐私保证来自机制定义本身;工程上应通过多次重复实验观察噪声分布的标准差是否与 σ 一致,以确认实现正确。

ε、δ、σ 的工程权衡

三者关系可以归纳为:固定敏感度时,σ 由 ε 和 δ 共同决定。ε 越小,σ 越大,查询结果可用性越低;δ 越小,σ 也越大,但影响是对数级的,相对温和。实际部署中常见的策略是:先根据业务可接受的误差确定 σ 上限,再反推可达到的 (ε, δ) 组合,而不是先固定 ε 再被动接受噪声。下表给出敏感度为 1 时不同 (ε, δ) 组合下的 σ 示例值,用于直观比较。

εδσ(Δ₂f = 1)相对噪声水平
0.11e-548.5很高
0.51e-59.70高
1.01e-54.85中
2.01e-52.42较低
1.01e-75.72中偏高

从表中可见,ε 从 1 降到 0.5,σ 翻倍;δ 从 1e-5 收紧到 1e-7,σ 仅增加约 18%。因此在可用性紧张时,优先调整 ε 往往比调整 δ 更有效;而 δ 主要用于控制极端泄露风险,不宜频繁变动。

组合与后处理

高斯机制同样满足差分隐私的两个基本性质。后处理不变性:对高斯机制的输出再做任意确定性或随机化处理,不会增加隐私损失。组合性:若对同一数据集执行 k 次高斯机制查询,每次满足 (ε_i, δ_i),则整体满足 (Σε_i, Σδ_i)。这意味着多次查询会线性累积 ε 和 δ,工程上应尽量合并查询、减少查询次数,或使用更紧的组合定理(如 Rényi 差分隐私)来降低累积。对于高斯机制,Rényi 差分隐私给出的组合界通常比朴素线性组合更紧,适合迭代训练等场景。

不要把 δ 当作“可以随意放大的松弛量”。δ 表示隐私保证失效的概率,若 δ 接近 1/N,则攻击者以不可忽略的概率获得个体信息。工程上应记录每次查询的 (ε, δ) 并做累积核算,避免总 δ 超过预算。

结果判读与验证

实现高斯机制后,可通过以下方式判断是否正确:其一,检查 σ 是否与公式一致,尤其是敏感度是否被正确裁剪;其二,重复运行机制多次,统计输出标准差,应接近 σ;其三,检查 δ 是否在合理范围(远小于 1/N);其四,核对累积隐私预算是否超限。若输出噪声明显小于 σ,通常意味着敏感度被低估或噪声生成有误;若输出偏差过大,则可能是裁剪边界 B 设置过小导致截断偏差主导。

高斯机制 (ε, δ)-差分隐私校准链路 查询函数 f(D) 计数 / 求和 / 均值 实值向量输出 裁剪边界 B 限制单条记录贡献 控制敏感度上界 隐私预算 ε:隐私强度 δ:失败概率上限 L2 敏感度 Δ₂f 计数:1 求和:2B 均值:2B/n σ 校准公式 σ = (Δ₂f/ε)· sqrt(2·ln(1.25/δ)) σ ∝ Δ₂f,∝ 1/ε M(D) = f(D) + 𝒩(0, σ²) 每维独立高斯噪声 输出满足 (ε, δ)-DP 结果判读 σ 与公式一致 重复实验标准差 ≈ σ 工程权衡:ε↓ → σ↑(可用性↓);δ↓ → σ↑(对数级,较温和) 优先调 ε 控制噪声,δ 用于控制极端泄露风险 k 次查询组合 (Σεᵢ, Σδᵢ) 线性累积

综上,高斯机制的实现要点是:先确定查询的 L2 敏感度(必要时通过裁剪控制),再根据目标 (ε, δ) 用公式校准 σ,最后加噪输出并核算累积预算。δ 的引入让高斯机制在实值查询上比拉普拉斯机制更高效,但代价是必须接受一个极小的隐私失败概率,工程上应把 δ 纳入隐私预算管理,而不是当作可忽略的常数。