2. 数学基础与隐私预算

差分隐私的工程落地,本质上是在“数据可用性”和“个体可识别性保护”之间做可量化的权衡。这个权衡不是靠直觉,而是由四个数学对象共同决定:随机化机制决定噪声怎么加,概率分布决定噪声长什么样,敏感度决定噪声要加多大,隐私预算 ε 和 δ决定整个系统能承受多少次查询。理解这四者的关系,才能把“加噪声”从一句口号变成可配置、可审计、可复现的工程参数。

随机化机制:把确定性查询变成概率输出

差分隐私要求机制 M 对相邻数据集 D 和 D′(仅相差一条记录)的输出分布“几乎不可区分”。形式化地,对任意输出集合 S:

Pr[M(D) ∈ S] ≤ e^ε · Pr[M(D′) ∈ S] + δ

当 δ=0 时称为纯差分隐私(ε-DP),δ>0 时称为近似差分隐私((ε,δ)-DP)。工程上最常用的机制有三类:拉普拉斯机制适用于数值型查询,噪声服从 Lap(Δf/ε),尺度参数 b=Δf/ε;高斯机制适用于需要更集中噪声尾部或与机器学习训练结合的场景,噪声标准差 σ=Δf·√(2ln(1.25/δ))/ε;指数机制适用于从离散候选中选一个“最优”结果,如直方图发布或推荐 Top-K。

选择机制时,先看查询输出类型:连续数值优先拉普拉斯或高斯,离散选择用指数机制。再看是否需要组合多次查询:高斯机制在 δ 上更灵活,但需要显式声明 δ;拉普拉斯机制在纯 ε-DP 下更干净,但尾部更重。

概率分布:噪声不是“随便加”,而是有形状的

拉普拉斯分布的概率密度为 f(x)=1/(2b)·exp(−|x|/b),均值 0、方差 2b²。它的尖峰和重尾意味着:大多数噪声很小,但偶尔会出现较大偏移。高斯分布密度为 f(x)=1/(σ√(2π))·exp(−x²/(2σ²)),方差 σ²,尾部衰减更快,但为了满足 (ε,δ)-DP,需要把 σ 放大到覆盖 δ 对应的尾部概率。

工程上要关注两个量:噪声尺度和截断风险。噪声尺度直接决定结果误差;截断风险指为了不让结果“离谱”而人为截断噪声时,会破坏 DP 保证。正确做法是:要么接受完整噪声分布,要么在机制设计阶段就选择有界输出(如指数机制),而不是事后裁剪。

敏感度:噪声大小的“标尺”

敏感度衡量“一条记录变化最多能让查询结果变多少”。全局敏感度定义为:

Δf = max_{D,D′相邻} ||f(D) − f(D′)||₁

计数查询的 Δf=1;求和查询若单条记录取值上界为 C,则 Δf=C;均值查询的敏感度取决于分母是否公开,若分母固定为 n,则 Δf=C/n。敏感度是机制参数计算的分母或分子,直接决定噪声量级。工程上常见的错误是“先加噪声再归一化”,这会把敏感度放大 n 倍,导致隐私保证失效。

敏感度必须在机制设计阶段确定,不能事后根据数据分布“估计”。如果查询本身依赖数据(如中位数),应改用指数机制或平滑敏感度等更合适的方法。

ε 和 δ 的工程含义

ε 是隐私损失的上界,越小越私密,但噪声越大。工程上可把 ε 理解为“攻击者看到输出后,对某条记录是否在数据集中的信念变化倍率上界”:ε=0.1 时,信念变化最多约 e^0.1≈1.105 倍;ε=1 时约 2.718 倍;ε=10 时约 22026 倍,几乎等于不保护。δ 是“纯 DP 被破坏的概率上界”,通常取远小于 1/n 的值,例如 n=10⁶ 时取 δ=10⁻⁹ 或更小。δ 不能为 0 时,必须显式记录,因为它允许极小概率下的隐私泄露。

实际项目中,ε 的取值往往由合规要求或数据敏感度决定:公开统计发布常用 ε=1~3;内部风控特征常用 ε=0.5~2;医疗、金融等高敏感场景常要求 ε≤0.1~0.5。δ 一般取 1/n² 或 1/(10n),并写入隐私审计日志。

预算分配策略:把 ε 当成“总预算”来花

组合定理告诉我们:多次查询会累积隐私损失。顺序组合下,k 次 ε_i-DP 查询总损失为 Σε_i;并行组合下,若查询作用于不相交的数据子集,总损失为 max ε_i。因此预算分配的核心是:先确定总预算 ε_total,再按查询重要性和数据分区方式切分。

常见策略有三种:均匀分配,适合查询重要性相近的场景,每次 ε_i=ε_total/k;加权分配,对关键查询给更大 ε,对探索性查询给更小 ε,但需保证 Σε_i≤ε_total;自适应分配,根据前序查询结果动态调整后续预算,常用于交互式分析,但实现复杂且需要额外隐私会计。

工程上建议把预算分配写成配置表,明确每次查询的 ε_i、δ_i、机制类型和敏感度,并用隐私会计模块累计。下面这张图展示了从原始查询到隐私预算消耗的完整链路,以及顺序组合与并行组合的差异。

差分隐私查询链路与预算消耗 敏感度 → 机制 → 噪声 → 输出;顺序组合累加 ε,并行组合取 max ε 原始查询 f 计数 / 求和 / 均值 敏感度 Δf 计数=1,求和=C 随机化机制 拉普拉斯 / 高斯 指数机制 噪声尺度 b=Δf/ε σ=Δf√(2ln1.25/δ)/ε 隐私预算 ε_total 总预算 = 各次查询之和 查询 Q1:ε₁ 机制:拉普拉斯 查询 Q2:ε₂ 机制:高斯 查询 Q3:ε₃ 机制:指数 查询 Q4:ε₄ 机制:拉普拉斯 Σεᵢ ≤ ε_total δ 单独累计,取 max 或求和 顺序组合(Sequential) 查询作用于同一数据集,隐私损失累加 Q1 Q2 Q3 Q4 ε_total = ε₁ + ε₂ + ε₃ + ε₄ δ_total = δ₁ + δ₂ + δ₃ + δ₄(近似) 并行组合(Parallel) 查询作用于不相交数据子集,隐私损失取最大值 D₁ D₂ D₃ D₄ ε_total = max(ε₁, ε₂, ε₃, ε₄) δ_total = max(δ₁, δ₂, δ₃, δ₄) 工程要点:先定 ε_total 与 δ,再按查询重要性分配;每次查询记录机制、敏感度、εᵢ、δᵢ,由隐私会计模块累计校验

一个可执行的预算分配示例

假设某内部风控特征发布任务,总预算 ε_total=2.0,δ=10⁻⁶,共 4 次查询:Q1 计数(Δf=1,拉普拉斯),Q2 求和(单条上界 C=100,拉普拉斯),Q3 均值(分母固定 n=10000,拉普拉斯),Q4 Top-5 推荐(指数机制)。按重要性加权分配:Q1 给 ε=0.4,Q2 给 ε=0.6,Q3 给 ε=0.5,Q4 给 ε=0.5,合计 2.0。对应噪声尺度:Q1 b=1/0.4=2.5;Q2 b=100/0.6≈166.7;Q3 b=(100/10000)/0.5=0.02;Q4 按指数机制效用函数敏感度计算。若实际执行时发现 Q2 噪声过大导致结果不可用,不能直接调小 ε,而应回到预算表重新分配,或改用并行组合把数据分区。

常见误区:把 ε 当成“每次查询的固定值”而不是“总预算”。一旦总预算耗尽,继续查询要么拒绝,要么需要重新申请预算并记录。δ 也不能随意设为 0 或 1,必须与数据规模 n 匹配。

最后,把上述参数固化为配置表,是工程上最稳妥的做法。每次查询执行前,隐私会计模块读取配置、校验累计 ε 和 δ 是否超限,执行后写回累计值。这样,差分隐私才从数学定义变成可运维的系统能力。