Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))
作者 :Ilya Mironov(Google Brain)| 会议/年份 :IEEE Computer Security Foundations Symposium (CSF) 2017 | 官方链接 :arXiv:1702.07476 | 开放获取 :PDF 一句话 :把隐私损失写成随阶变化的曲线,组合时曲线相加,最后一次性转成 (ε,δ)-DP。 预计阅读:20 分钟
0. TL;DR
- RDP 是"一族"隐私定义,不是一个数 ------ 每个阶 α 给出一个 ε,你在 (α, ε) 平面上得到一条曲线,而不是一个点;这条曲线才携带完整信息。
- 组合定律是逐点相加 ------ 两个 (α, ε₁)-RDP 和 (α, ε₂)-RDP 顺序组合后仍是同阶的 (α, ε₁+ε₂)-RDP;阶不变、ε 相加,于是"隐私预算"这个概念被救回来了。
- 转换引理是唯一的出口 ------ Proposition 3:任何 (α, ε)-RDP 都满足 (ε + log(1/δ)/(α−1), δ)-DP;分母那个 (α−1) 是全部工程价值的来源。
- 先组合、后转换,比先转换、后组合紧一个数量级 ------ 本文第 5 节的实测:同样的 100 步高斯机制,朴素组合给 ε≈123,RDP 记账给 ε≈15.1,差 8.14 倍。
- RDP 不是"(ε,δ)-DP 的更强版本" ------ 它是另一种保证,必须经过转换才能与 (ε,δ) 比较;而且转换对 δ 的依赖是 log(1/δ)/(α−1),α 一旦取错,转换项会直接毁掉整个预算。
1. 为什么这篇重要
2016 年是差分隐私从理论走向训练框架的转折点。Abadi 等人在 Deep Learning with Differential Privacy 中把 DP-SGD 跑进了深度学习,其内部工具 "moments accountant" 之所以能把 ε 压到可用范围,靠的正是"记账时不按 (ε,δ) 记账,而按隐私损失的高阶矩记账"。但这套工具当时是论文内部的实现技巧,不是定义。
Mironov 这篇文章做了一件看起来很"轻"的事:把那个内部技巧升级成定义。它把 Rényi 散度(1961 年 Á. Rényi 提出的信息度量)的阶 α 当作可调参数,定义
(\\alpha,\\varepsilon)\\text{-RDP}:\\quad D_\\alpha\\big(f(D),\|,f(D')\\big)\\le \\varepsilon ,
然后证明这个新定义继承了纯 ε-DP 几乎所有的好性质,同时绕开了 (ε,δ)-DP 的长期痛点。
为什么这个痛点值得单独写一篇论文?因为 (ε,δ)-DP 最常用的两个场景------高斯机制、高级组合------都和它"错配"。一个高斯机制并不对应某个固定的 (ε,δ),而是对应一整条 (ε(δ), δ) 曲线;你在曲线上挑一个点报告,就丢掉了其余全部信息。更糟的是,多次组合后每做一次高级组合定理就产生一次参数爆炸:每一步都要重新选 δ,而不同 δ 下的 ε 不可比较、不可累加,如作者原文所说,这会导致 "a combinatorial explosion of parameters"。最后你会得到一个无法审计的数字。
RDP 的解法非常工程化:把账本从"一个 ε"换成"一组 ε"。组合就是把数组逐项相加,转换推迟到最后一步做一次。这个改动让账本可加、可缓存、可增量更新,也让 α 变成一个可以离线搜索的超参数------这正是今天所有主流 DP 训练库的记账方式。
2. 问题设定与形式化
先把坐标系统一。设机制 f:\\mathcal{D}\\to\\mathcal{R} 是随机算法,D,D'\\in\\mathcal{D} 是相邻输入(相差一个人的记录)。
定义 1(ε-DP):对所有相邻 D,D' 与所有 S\\subset\\mathcal{R},
\\Pr\[f(D)\\in S\]\\le e\^{\\varepsilon}\\Pr\[f(D')\\in S\].
定义 2((ε,δ)-DP):上式右侧再加 \\delta。
定义 3(Rényi 散度):对 \\alpha\>1,
D_\\alpha(P\|Q)\\ \\triangleq\\ \\frac{1}{\\alpha-1}\\log\\ \\mathbb{E}_{x\\sim Q}\\left(\\frac{P(x)}{Q(x)}\\right)\^{\\alpha}.
端点由连续性定义:\\alpha\\to1 时退化为 KL 散度 D_1(P\|Q)=\\mathbb{E}_{x\\sim P}\\log\\frac{P(x)}{Q(x)}(注意期望换到 P 上),\\alpha\\to\\infty 时退化为
D_\\infty(P\|Q)=\\sup_{x\\in\\mathrm{supp},Q}\\ \\log\\frac{P(x)}{Q(x)} .
定义 4((α,ε)-RDP):对所有相邻 D,D',D_\\alpha(f(D)\|f(D'))\\le\\varepsilon。
这里有一个贯穿全文的观察:把定义 4 与 \\alpha=\\infty 对照,立刻得到
f \\text{ 是 } \\varepsilon\\text{-DP}\\quad\\Longleftrightarrow\\quad D_\\infty(f(D)\|f(D'))\\le\\varepsilon .
换句话说,纯 DP 就是 RDP 在 α=∞ 处的截面。这条等价式是整篇文章的锚点,也是"取极限 α→∞ 得到纯 DP"的严格依据。
| 符号 | 含义 | 取值范围 |
|---|---|---|
| f, D, D' | 机制、相邻输入对 | --- |
| \\alpha | Rényi 阶(order),唯一的自由度 | (1,\\infty\],本文不用 \\alpha\<1 |
| \\varepsilon | 该阶下 Rényi 散度的上界 | \[0,\\infty) |
| \\delta | (ε,δ)-DP 的失败概率 | (0,1),实践中 \<1/N |
| \\Delta_1 f,\\Delta_2 f | 查询的 \\ell_1 / \\ell_2 敏感度 | \[0,\\infty) |
| \\sigma,\\lambda | 高斯噪声标准差、拉普拉斯噪声尺度 | \>0 |
| n | 组合的机制个数(步数) | \\mathbb{N}\^+ |
| q | 子采样率(本文不涉及,工程上必需) | (0,1\] |
一句话概括这套形式化:RDP 把"一个数"换成了"一条曲线 \\alpha\\mapsto\\varepsilon(\\alpha)",其余全部性质都从曲线逐点相加这一条推出来。
3. 核心思想(直觉版)
先看一个具体场景。你要用 DP-SGD 在 MNIST 上训练,批大小让子采样率 q 很小,噪声倍数 \\sigma=4,跑 n=100 步,监管要求 \\delta=10\^{-5}。
朴素做法:先算单步的高斯机制满足多少 ε-DP,再乘以 100。单步在 \\delta=10\^{-5} 下约 \\varepsilon_1=1.23,100 步就是 \\varepsilon\\approx123 ------这个数字直接宣判项目死刑。
问题出在哪?出在先转换、后组合这个顺序上。单步转换时,你把 \\log(1/\\delta) 这个"一次性费用"付了 100 遍。而实际上,组合后的分布并不是 100 个独立灾难的叠加,它的尾部远比"100 次独立失败"要薄。
RDP 的做法是:在曲线层面组合,只在最后付一次转换费。
关键观察是隐私损失(privacy loss)这个随机变量
\\mathcal{L}_{D,D'}(o)\\ \\triangleq\\ \\log\\frac{\\Pr\[f(D)=o\]}{\\Pr\[f(D')=o\]}
它的矩决定了尾部形状。\\mathbb{E}\[e\^{(\\alpha-1)\\mathcal{L}}\] 恰好就是 e\^{(\\alpha-1)D_\\alpha} 的倒数形式,所以控制第 α 阶矩就等于控制尾部。这正是文章标题之外真正的技术内核,也是原文反复强调的那句"privacy loss 的尾部"。
类比 :你在评估一条流水线的故障风险。手上有两个方案。方案 A 只给你一个数字「最坏单次故障损失 = 1.23 万」,然后让你乘以班次数------这是朴素组合。方案 B 给你一族指标:均值、方差、三阶矩、四阶矩......(\\alpha=1,2,3,4 对应的是一个矩谱)。如果故障是独立小抖动,用方案 B 你会算出 100 班的累计风险远低于 100×1.23 万,因为高阶矩告诉你尾部在衰减。RDP 就是方案 B:它不是一个更严格的审批员,它是一个信息量更大的记账格式。
而在方案 B 里,\\alpha 的选择本身就是一门手艺:\\alpha 太小,第 α 阶矩很便宜(RDP 侧 ε 小),但你从矩反推尾部时要用一个很钝的不等式,转换项 \\log(1/\\delta)/(\\alpha-1) 爆炸;\\alpha 太大,转换项便宜了,但 RDP 侧 ε 随 α 线性增长。于是存在一个 U 形的最优 α ------本文第 6 节和配图右侧面板画的就是这件事。
4. 技术展开
4.1 组合:曲线逐点相加(Proposition 1)
Proposition 1. 设 f:\\mathcal{D}\\to\\mathcal{R}_1 是 (\\alpha,\\varepsilon_1)-RDP,g:\\mathcal{R}_1\\times\\mathcal{D}\\to\\mathcal{R}_2 是 (\\alpha,\\varepsilon_2)-RDP(g 的第一个参数可以是 f 的输出,即自适应选择),则 (X,Y)(X\\sim f(D),Y\\sim g(X,D))是 (\\alpha,\\varepsilon_1+\\varepsilon_2)-RDP。
证明只有三行,但它是整篇文章的支点。原文的推导把 e\^{(\\alpha-1)D_\\alpha} 展开成积分 \\int Z(x,y)\^\\alpha Z'(x,y)\^{1-\\alpha}dx,dy,用 Hölder(对 y 先积)拆成两个因子的乘积,各自被 e\^{(\\alpha-1)\\varepsilon_{1,2}} 界定,再取对数除以 \\alpha-1。
注意最关键的一点:阶 α 不变。 这就是为什么 RDP 能承载"隐私预算":如果你的账本对所有机制都记录同一个 α 网格上的数值,那么组合就是数组逐项相加,你可以在任意时刻中断、检查、再继续,而不需要重新推导。
4.2 转换:RDP → (ε,δ)-DP 的完整推导(Proposition 3)
这是全文被传错最多的公式,所以把原文陈述抄准:
Proposition 3(From RDP to (ε,δ)-DP). 若 f 是 (\\alpha,\\varepsilon)-RDP,则对任意 0\<\\delta\<1,f 满足 \\big(\\varepsilon+\\frac{\\log(1/\\delta)}{\\alpha-1},\\ \\delta\\big)-DP。
推导。 固定相邻 D,D' 与事件 S。令 Q\\triangleq\\Pr\[f(D')\\in S\],要证
\\Pr\[f(D)\\in S\]\\le \\max\\left(e\^{\\varepsilon'},Q,\\ \\delta\\right),\\qquad \\varepsilon'=\\varepsilon+\\frac{\\log(1/\\delta)}{\\alpha-1},
(这个更强的形式蕴含 \\le e\^{\\varepsilon'}Q+\\delta)。
第一步是概率保持不等式(原文 Proposition 10,由 Hölder 不等式得到):对任意事件 S,
\\Pr\[f(D)\\in S\]\\ \\le\\ \\Big(e\^{D_\\alpha(f(D)\|f(D'))}\\cdot Q\\Big)\^{(\\alpha-1)/\\alpha} \\ \\le\\ \\big(e\^{\\varepsilon}Q\\big)\^{1-1/\\alpha}.
把它写成 Q\^{1-1/\\alpha}\\cdot e\^{\\varepsilon(1-1/\\alpha)},然后分两种情况。
Case I:e\^{\\varepsilon}Q\>\\delta\^{\\alpha/(\\alpha-1)}。 此时 Q\>\\delta\^{\\alpha/(\\alpha-1)}e\^{-\\varepsilon},于是
\\big(e\^{\\varepsilon}Q\\big)\^{-1/\\alpha}\\ \\le\\ \\Big(\\delta\^{\\alpha/(\\alpha-1)}\\Big)\^{-1/\\alpha}=\\delta\^{-1/(\\alpha-1)} .
代回第一步:
\\Pr\[f(D)\\in S\]\\ \\le\\ e\^{\\varepsilon}Q\\cdot\\big(e\^{\\varepsilon}Q\\big)\^{-1/\\alpha} \\ \\le\\ e\^{\\varepsilon}Q\\cdot\\delta\^{-1/(\\alpha-1)} \\ =\\ \\exp!\\left(\\varepsilon+\\frac{\\log(1/\\delta)}{\\alpha-1}\\right)Q=e\^{\\varepsilon'}Q .
Case II:e\^{\\varepsilon}Q\\le\\delta\^{\\alpha/(\\alpha-1)}。 此时直接代回第一步:
\\Pr\[f(D)\\in S\]\\ \\le\\ \\big(e\^{\\varepsilon}Q\\big)\^{1-1/\\alpha}\\ \\le\\ \\Big(\\delta\^{\\alpha/(\\alpha-1)}\\Big)\^{1-1/\\alpha}=\\delta .
两种情况合起来就是 \\Pr\[f(D)\\in S\]\\le\\max(e\^{\\varepsilon'}Q,\\delta)。证毕。
常数核对(最容易出错的地方) :转换项是 \\dfrac{\\log(1/\\delta)}{\\alpha-1},不是 \\dfrac{\\log(1/\\delta)}{\\alpha},也不是 \\dfrac{2\\log(1/\\delta)}{\\alpha-1}。\\delta\\to0 时它以 1/(\\alpha-1) 发散,这就是为什么 α 不能取到 1 附近。反过来,\\alpha\\to\\infty 时转换项 \\to0,回到纯 DP,与 §2 的等价式自洽。
4.3 从 (ε,δ) 回到 RDP:Lemma 1 与高级组合
反方向的桥由 Lemma 1 搭:
Lemma 1. 若 D_\\infty(P\|Q)\\le\\varepsilon 且 D_\\infty(Q\|P)\\le\\varepsilon,则对 \\alpha\\ge1 有 D_\\alpha(P\|Q)\\le2\\alpha\\varepsilon\^{2}。(原文注明,常数可由 Bun--Steinke 的一个更复杂的论证改进到 0.5。)
有了它,n 个 ε-DP 机制的组合满足 D_\\alpha\\le2\\alpha n\\varepsilon\^{2},再用一次概率保持不等式并优化 α,就得到本文版本的组合定理:
Proposition 4. f 是 n 个 ε-DP 机制的自适应组合,则对任意 S,
\\Pr\[f(D)\\in S\]\\le\\exp!\\Big(2\\varepsilon\\sqrt{n\\log\\tfrac{1}{\\Pr\[f(D')\\in S\]}}\\Big)\\cdot\\Pr\[f(D')\\in S\].
Corollary 1. 若 \\log(1/\\delta)\\ge\\varepsilon\^{2}n,则 f 满足 (\\varepsilon',\\delta)-DP,其中 \\varepsilon'=4\\varepsilon\\sqrt{2n\\log(1/\\delta)}。
\\varepsilon'=4\\varepsilon\\sqrt{2n\\log(1/\\delta)} 这个常数可以自己验一遍:Corollary 1 的证明路径里出现 \\exp(2\\varepsilon\\sqrt{8n\\log(1/\\delta)}),而 2\\sqrt8=4\\sqrt2,正好对上。这条链子说明 RDP 不是"另起炉灶",它把经典高级组合定理重新推导了一遍,而且推导全程只用 RDP 的语言,不碰概率论证------原文特意强调了这一点。
4.4 三种基本机制的 RDP 曲线(Table II)
| 机制 | (ε,δ)-DP 参数 | (α,ε)-RDP 参数(α>1) |
|---|---|---|
| 随机化应答 RR(p) | \\log\\frac{p}{1-p} | \\frac{1}{\\alpha-1}\\log!\\big(p\^{\\alpha}(1-p)\^{1-\\alpha}+(1-p)\^{\\alpha}p\^{1-\\alpha}\\big) |
| 拉普拉斯 L_\\lambda | 1/\\lambda | \\frac{1}{\\alpha-1}\\log!\\big(\\frac{\\alpha}{2\\alpha-1}e\^{(\\alpha-1)/\\lambda}+\\frac{\\alpha-1}{2\\alpha-1}e\^{-\\alpha/\\lambda}\\big) |
| 高斯 G_\\sigma | 无(\\infty) | \\dfrac{\\alpha}{2\\sigma\^{2}}(敏感度 1 时) |
高斯那一行是整个故事的高潮:它的 RDP 曲线是一条过原点的直线 ,D_\\alpha=\\alpha\\Delta\^2/(2\\sigma\^2)。直线意味着两件事。其一,n 步组合就是 \\alpha n\\Delta\^{2}/(2\\sigma\^{2}),等价于"噪声缩小 \\sqrt n 倍的单次高斯机制"(原文明确写出这一点)。其二,正因为是直线、且 α=1 处值为 0,它在 (ε,δ) 语言下永远无法被任何有限的 ε 刻画------这正是 (ε,δ)-DP 与高斯机制错配的根源,也是 Mironov 主张换账本格式的最强论据。
拉普拉斯那一行则给出了两个端点作为自检:
\\lim_{\\alpha\\to\\infty}D_\\alpha(\\Lambda(0,\\lambda)\|\\Lambda(1,\\lambda))=\\frac{1}{\\lambda}, \\qquad \\lim_{\\alpha\\to1}D_\\alpha=\\frac{1}{\\lambda}+e\^{-1/\\lambda}-1\\approx\\frac{1}{2\\lambda\^{2}} .
\\alpha\\to\\infty 时回到 1/\\lambda,与"拉普拉斯机制满足 1/\\lambda-DP"完全一致;\\alpha\\to1 时退化到 KL 散度,量级是 1/(2\\lambda\^2),这正是 zCDP 那类"方差型"参数会出现的地方。第 5 节的代码把这两条极限都数值验了一遍。
5. 可运行代码
下面这段纯 Python + numpy 做三件事:(1) 用数值积分验证 Corollary 3 的闭式解;(2) 生成 (α, ε_RDP → ε_DP) 转换表并做 α 网格搜索;(3) 把"先转换后组合"(朴素)与"先组合后转换"(RDP 记账)放在同一把尺子下比较。
"""Paper 09 numeric checks: RDP -> (eps,delta) conversion + composition accounting.
Cor.3 : Gaussian mechanism is (alpha, alpha*Delta^2/(2*sigma^2))-RDP
Prop.3: (alpha,eps)-RDP => (eps + log(1/delta)/(alpha-1), delta)-DP
Prop.1: RDP eps values add under adaptive sequential composition
"""
import numpy as np
def logsumexp2(l1, l2):
m = max(l1, l2)
return m + np.log(np.exp(l1 - m) + np.exp(l2 - m))
# ---------- 1. validate Cor.3 by direct quadrature ----------
def renyi_gauss_quad(alpha, sigma, mu, grid=200001, half=12.0):
# integrand p^a q^(1-a) is Gaussian with mode at (1-alpha)*mu: centre grid there
mode = (1.0 - alpha) * mu
x = np.linspace(mode - half * sigma, mode + half * sigma, grid)
norm = np.log(sigma * np.sqrt(2 * np.pi))
logp = -x ** 2 / (2 * sigma ** 2) - norm
logq = -(x - mu) ** 2 / (2 * sigma ** 2) - norm
lp = alpha * logp + (1 - alpha) * logq
m = lp.max()
integ = np.exp(lp - m).sum() * (x[1] - x[0])
return (m + np.log(integ)) / (alpha - 1.0)
print("== check Cor.3: D_alpha(N(0,s^2) || N(mu,s^2)) should equal alpha*mu^2/(2s^2), s=2, mu=1 ==")
print(" alpha | quadrature | closed form | abs err")
for a in [1.25, 1.5, 2.0, 5.0, 20.0, 60.0]:
q = renyi_gauss_quad(a, 2.0, 1.0)
c = a * 1.0 ** 2 / (2 * 2.0 ** 2)
print(f" {a:6.2f} | {q:12.6f} | {c:12.6f} | {abs(q - c):.2e}")
# ---------- 2. RDP accountant for a composed Gaussian mechanism ----------
def rdp_gauss(n, sigma, alpha, d=1.0):
return n * alpha * d ** 2 / (2.0 * sigma ** 2)
def to_dp(eps_rdp, alpha, delta):
return eps_rdp + np.log(1.0 / delta) / (alpha - 1.0)
n, sigma, d, delta = 100, 4.0, 1.0, 1e-5
alphas = np.round(np.arange(1.05, 64.0001, 0.05), 4)
def best(dp_delta):
pairs = [(to_dp(rdp_gauss(n, sigma, a, d), a, dp_delta), a) for a in alphas]
return min(pairs, key=lambda t: t[0])
print(f"\n== composed Gaussian mechanism: n={n} steps, sigma={sigma}, Delta={d}, delta={delta:g} ==")
print("\n alpha | eps_RDP(n-fold) | conversion term | eps after Prop.3")
print("-------+-----------------+-----------------+------------------")
for a in [1.5, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0]:
er, term = rdp_gauss(n, sigma, a, d), np.log(1 / delta) / (a - 1)
print(f" {a:5.1f} | {er:15.4f} | {term:15.4f} | {er + term:16.4f}")
eb, ab = best(delta)
print(f"\n alpha-grid optimum: alpha* = {ab:.2f}, eps* = {eb:.4f} (delta = {delta:g})")
# ---------- 3. compose-then-convert vs convert-then-compose ----------
e1 = min(to_dp(rdp_gauss(1, sigma, a, d), a, delta) for a in alphas)
print(f"\n one-step eps (delta={delta:g}) = {e1:.4f}")
print(f" (A) naive basic composition n * eps1 = {n * e1:.4f}")
print(f" (B) RDP accountant: compose in RDP, convert once = {eb:.4f}")
print(f" speedup (A)/(B) = {n * e1 / eb:.2f}x")
print("\n delta | (A) naive n*eps1 | (B) RDP accountant | speedup | alpha*")
print("----------+------------------+--------------------+---------+-------")
for dl in [1e-2, 1e-3, 1e-4, 1e-5, 1e-6]:
e1d = min(to_dp(rdp_gauss(1, sigma, a, d), a, dl) for a in alphas)
b, astar = best(dl)
print(f" {dl:8.0e} | {n * e1d:16.3f} | {b:18.4f} | {n * e1d / b:6.2f}x | {astar:6.2f}")
# ---------- 4. alpha -> infinity limit recovers pure eps-DP (Laplace, Cor.2) ----------
def rdp_laplace_log(a, lam):
l1 = np.log(a / (2 * a - 1)) + (a - 1) / lam
l2 = np.log((a - 1) / (2 * a - 1)) - a / lam
return logsumexp2(l1, l2) / (a - 1.0)
print("\n== check Cor.2 limit: D_alpha(Laplace(0,lam)||Laplace(1,lam)) -> 1/lam as alpha->inf, lam=4 ==")
print(" alpha | D_alpha | 1/lambda | gap")
for a in [2.0, 10.0, 100.0, 1000.0, 100000.0, 10000000.0]:
v = rdp_laplace_log(a, 4.0)
print(f" {a:10.0f} | {v:11.6f} | {0.25:.6f} | {0.25 - v:.2e}")
真实输出(python3 /tmp/chk-09.py,本机实测):
== check Cor.3: D_alpha(N(0,s^2) || N(mu,s^2)) should equal alpha*mu^2/(2s^2), s=2, mu=1 ==
alpha | quadrature | closed form | abs err
1.25 | 0.156250 | 0.156250 | 2.62e-11
1.50 | 0.187500 | 0.187500 | 1.31e-11
2.00 | 0.250000 | 0.250000 | 6.55e-12
5.00 | 0.625000 | 0.625000 | 1.64e-12
20.00 | 2.500000 | 2.500000 | 4.35e-13
60.00 | 7.500000 | 7.500000 | 3.62e-13
== composed Gaussian mechanism: n=100 steps, sigma=4.0, Delta=1.0, delta=1e-05 ==
alpha | eps_RDP(n-fold) | conversion term | eps after Prop.3
-------+-----------------+-----------------+------------------
1.5 | 4.6875 | 23.0259 | 27.7134
2.0 | 6.2500 | 11.5129 | 17.7629
4.0 | 12.5000 | 3.8376 | 16.3376
8.0 | 25.0000 | 1.6447 | 26.6447
16.0 | 50.0000 | 0.7675 | 50.7675
32.0 | 100.0000 | 0.3714 | 100.3714
64.0 | 200.0000 | 0.1827 | 200.1827
alpha-grid optimum: alpha* = 2.90, eps* = 15.1219 (delta = 1e-05)
one-step eps (delta=1e-05) = 1.2309
(A) naive basic composition n * eps1 = 123.0882
(B) RDP accountant: compose in RDP, convert once = 15.1219
speedup (A)/(B) = 8.14x
delta | (A) naive n*eps1 | (B) RDP accountant | speedup | alpha*
----------+------------------+--------------------+---------+-------
1e-02 | 78.996 | 10.7126 | 7.37x | 2.20
1e-03 | 96.048 | 12.4177 | 7.73x | 2.50
1e-04 | 110.423 | 13.8553 | 7.97x | 2.70
1e-05 | 123.088 | 15.1219 | 8.14x | 2.90
1e-06 | 134.538 | 16.2663 | 8.27x | 3.10
== check Cor.2 limit: D_alpha(Laplace(0,lam)||Laplace(1,lam)) -> 1/lam as alpha->inf, lam=4 ==
alpha | D_alpha | 1/lambda | gap
2 | 0.056564 | 0.250000 | 1.93e-01
10 | 0.179545 | 0.250000 | 7.05e-02
100 | 0.243049 | 0.250000 | 6.95e-03
1000 | 0.249307 | 0.250000 | 6.93e-04
100000 | 0.249993 | 0.250000 | 6.93e-06
10000000 | 0.250000 | 0.250000 | 6.93e-08
三个可以直接拿去用的读数:
- 转换表是 U 形的,不是单调的。\\alpha=1.5 时 \\varepsilon=27.7,\\alpha=4 时降到 16.3,\\alpha=64 时又涨回 200.2。最优在 \\alpha\^\*=2.90。任何"α 越大越紧"或"α 越小越紧"的直觉都是错的。
- 增益随 δ 变小而变大:δ 从 10\^{-2} 收到 10\^{-6},朴素组合从 79.0 涨到 134.5,RDP 只从 10.7 涨到 16.3,倍率从 7.37 倍升到 8.27 倍。原因就在转换项 \\log(1/\\delta)/(\\alpha-1) 只吃一次。
- α→∞ 的极限确实回到 1/\\lambda:\\alpha=10\^7 时 D_\\alpha=0.250000,与 \\lambda=4 对应的纯 DP 参数完全吻合,gap 到 6.93\\times10\^{-8}。

左:高斯机制 100 步组合(σ=4、Δ=1)在 7 个不同阶 α 下的 ε(δ) 曲线,青色粗线是对所有 α 取 min 的最优包络;右:固定 δ=1e-5 时转换后 ε 关于 α 呈 U 形,最优 α≈2.9,两侧分别被转换项与 αΔ²/(2σ²) 主导。*
6. 复杂度与参数选择
| 维度 | 时间复杂度 | 空间 | 实用建议 |
|---|---|---|---|
| 单机制求 D_\\alpha(高斯闭式) | O(1) | O(1) | 直接用 \\alpha\\Delta\^2/(2\\sigma\^2),别积分 |
| 单机制求 D_\\alpha(拉普拉斯闭式) | O(1) | O(1) | 用 log-sum-exp,否则 \\alpha\>100 溢出 |
| 数值积分兜底(无闭式时) | O(G),G 为网格点数 | O(G) | 网格中心放在积分函数众数 (1-\\alpha)\\mu 上,否则大 α 误差爆掉 |
| 组合 n 个同阶机制 | O(n\\cdot\\lvert\\mathcal{A}\\rvert) | O(\\lvert\\mathcal{A}\\rvert) | 逐项相加,可增量更新、可断点续算 |
| α 网格搜索 | O(\\lvert\\mathcal{A}\\rvert) | O(1) | 一维搜索,\\varepsilon(\\alpha) 单峰,三分法或直接网格 |
| 转换到 (ε,δ)-DP | O(\\lvert\\mathcal{A}\\rvert) | O(1) | 取 min,保留 argmin 的 α 以便写进报告 |
α 怎么选(这是本节的重点):
- 别用连续优化,用固定网格。 原文 Figure 3 给了一个非常实用的结论:把 α 限制在 13 个值 {1.5,1.75,2,2.5,3,4,5,6,8,16,32,64,+\\infty} 上做的最优选择,与从 (1,+\\infty\] 里取连续最优的曲线几乎重合。也就是说有限网格不损失紧致性,只损失一点优雅。这条结论对工程极其友好:网格可以硬编码,账本可以跨团队对齐。
- 一定要包含 +\\infty。 它是唯一能让你同时报告"纯 DP 参数"的口子,也是审计方最认的那个数。
- 最小值取在哪取决于 δ 和噪声。 上面的实测里,δ 从 10\^{-2} 收到 10\^{-6},最优 α 从 2.20 单调爬到 3.10。所以 α 网格下界别取 3 以上,否则小 δ 场景会系统性高估。
- α 下界别低于 1.05。 \\alpha\\to1 时转换项以 1/(\\alpha-1) 发散,\\alpha=1.05 已经是 20\\log(1/\\delta) 的量级,纯属浪费算力还引入浮点噪声。
- 别跨 α 比较 ε。 不同阶的 ε 是两个不同定义的参数,谁大谁小没有意义,只有转换到同一个 (ε,δ) 后才有可比性。
7. 与前作/后续工作的关系
| 工作 | 时间 | 与本文关系 |
|---|---|---|
| Dwork, McSherry, Nissim, Smith, Calibrating Noise to Sensitivity (TCC) | 2006 | 定义 ε-DP 与拉普拉斯机制,本文的出发点 |
| Dwork, Kenthapadi, McSherry, Mironov, Naor, Our Data, Ourselves (EUROCRYPT) | 2006 | 提出 (ε,δ)-DP 以容纳高斯机制,本文要替代的对象 |
| Dwork, Rothblum, Vadhan, Boosting and Differential Privacy (FOCS) | 2010 | 经典高级组合定理,本文 §4.3 用 RDP 语言重推一遍 |
| Dwork, Rothblum, Concentrated Differential Privacy | 2016 | 用"所有正阶矩线性增长"定义 CDP;本文只约束单阶,更灵活 |
| Bun, Steinke, Concentrated DP: Simplifications, Extensions, and Lower Bounds (TCC) | 2016 | zCDP;本文 Lemma 1 的常数 0.5 改进即引自其 Proposition 3.3 |
| Abadi et al., Deep Learning with Differential Privacy (CCS) | 2016 | moments accountant:本文定义的直接前身与最强应用场景 |
| Kairouz, Oh, Viswanath, The Composition Theorem for DP (ICML) | 2015 | 同质机制的最优组合界;本文 §7 用它作对照 |
| Murtagh, Vadhan, The Complexity of Computing the Optimal Composition of DP (TCC) | 2016 | 异质 (ε,δ) 组合是 #P-hard,只给 PTAS。这是"别用 (ε,δ) 记账"的硬证据 |
| 本文 Mironov, RDP (CSF) | 2017 | 把上述线索统一成一个定义 + 一条组合律 + 一条转换引理 |
| 后续:子采样 RDP 会计(Wang--Balle--Kasiviswanathan 等) | 2019 前后 | 补上本文未处理的子采样放大,DP-SGD 实际部署必需 |
| 后续:PRV / 数值会计、f-DP、高斯 DP | 2020 前后 | 用更精确的分布刻画继续压紧 ε,RDP 仍是兼容的上层接口 |
一个值得记住的对照:本文 Proposition 4 给出的界,被作者自己承认不如 最优选择 δ 的标准 (ε,δ) 高级组合定理紧(原文 §7 明说 "consistently outperformed")。这不是缺陷,而是要点------本文的贡献不是"每条界都更紧",而是把曲线层面的可加性做成了定义,从而让"混合异构机制 + 任意时刻中断 + 事后选 δ" 这三种真实需求同时成立。作者甚至在 §7 里论证:Proposition 4 的概率形式比它的 (ε,δ) 推论更好用,因为后者多了一个需要被优化的自由参数 δ。
8. 工程落地注意
RDP accountant 的工程形态(这是本文真正的落地遗产):
- 账本结构 :一个字典
{alpha: eps},加上一个"已消耗步数"计数。每跑一步rdp += rdp_step(alpha),对所有 α 同时更新。 - 典型接口 :在 TF Privacy、Opacus 这类库里,你会看到成对的两个函数------一个算
compute_rdp(q, noise_multiplier, steps, orders),一个做get_privacy_spent(orders, rdp, target_delta)。前者对应本文 Proposition 1 + Table II,后者对应 Proposition 3 + 网格取 min。这两个函数必须成对使用 :单独报告compute_rdp的输出(一堆 ε_RDP)对监管毫无意义。 - 子采样放大必须单独处理 。本文只处理"每一步都是完整高斯机制",而 DP-SGD 每一步作用在随机子集上。把子采样率 q 的放大量硬塞进 \\sigma 里、或者直接忽略,是最常见的两个错误方向。正确做法是使用专门推导的子采样 RDP 曲线(工程上以
q作为显式参数进入compute_rdp)。 - δ 固定后才有 ε。把 (ε, δ) 两个数一起报、让读者自己挑,等于没报。论文的立场是:报告曲线或报告"固定 δ 下的 ε + 该 δ 的选择依据"。
审计容易被打回的点(按被退回频率排序):
-
报告的 ε 用了哪个 α 没说。 别人无法复算,直接打回。正确写法:
(ε=15.12, δ=1e-5) achieved at α=2.90, orders grid = {1.5,...,64}。 -
δ 没有论证。 文献惯例是 \\delta=o(1/N) 或 \\delta\<\\text{negl}(1/N);原文 §2 明确推荐 \\delta\\ll1/N。取 \\delta=10\^{-3} 而 N=10\^6,等于承认"以千分之一的概率彻底泄露某个人"。
-
把 RDP 的 ε 当成 DP 的 ε 直接用。 这是最致命的。(\\alpha,\\varepsilon)-RDP 的 ε 在 \\alpha=2 时与 (ε,δ) 的 ε 完全不是一个量纲,少一次转换就可能少报一个数量级。
-
声称"纯 DP"却只在有限 α 上计算。 (2, 3)-RDP 推出的是 (\\varepsilon',\\delta)-DP,不是 3-DP。要报纯 DP,必须走 \\alpha=\\infty 那一列,或者老实承认是近似 DP。
-
组合时混用了不同的 α 网格。 不同团队各自用不同网格,相加时无法对齐,最终只能取并集重算------这就是为什么网格要跨团队硬编码统一。
-
只算了训练步、漏了超参搜索/早停/多次重跑。 每次重跑都是一次新的机制,隐私预算要乘以重跑次数(或用并行的 DP 选择机制另算)。
9. 常见误解 5 问
Q1:RDP 是不是比 (ε,δ)-DP"更强"的隐私保证? 不是,两者是不同形状 的保证,不能直接比较大小。RDP 在每一条固定的 α 截面上约束隐私损失的矩,而 (ε,δ)-DP 约束的是尾部概率;Mironov 本人在 §7 明确指出,即使很弱的 RDP 参数也永远不会允许"以概率 δ 完全泄露"这种灾难,这是 RDP 相对 (ε,δ) 的定性优势。但要让两者可比,你必须经过 Proposition 3 转换------转换后的 (ε,δ) 才是同一个坐标系里的数。
Q2:α 取越大越好,因为 α=∞ 就是纯 DP,纯 DP 最强? α=∞ 确实回到纯 DP,但那条曲线在高斯机制上根本不可用(D_\\infty=\\infty)。有限 α 下,ε_RDP 随 α 线性增长(高斯是 \\alpha\\Delta\^2/(2\\sigma\^2)),而转换项 \\log(1/\\delta)/(\\alpha-1) 随 α 衰减,两者拉出一个 U 形。上面的实测里 \\alpha=64 给出的 ε 是 200.2,而 \\alpha=2.9 给出 15.1,差了 13 倍。α 是超参数,必须搜索。
Q3:既然先组合后转换更紧,那是不是所有场景都该用 RDP? 不是。RDP 的紧致性来自"机制是高斯的"这一结构;对拉普拉斯或随机化应答,RDP 曲线也能算,但当机制本身已经是纯 ε-DP 且 ε 很小时,直接相加可能就够了(本文 Proposition 4 被标准 (ε,δ) 高级组合定理压过的情形确实存在)。此外,异构机制(不同 εᵢ 的混合)在当前 RDP 记账里仍需要近似处理。选型标准是:机制同质且能写出闭式 RDP 曲线 → 用 RDP;机制异构且只有 (εᵢ,δᵢ) → 老老实实用组合定理。
Q4:RDP 能不能直接给出"概率意义上"的保证,不用转换? 可以,这就是原文 Proposition 10(概率保持):\\Pr\[f(D)\\in S\]\\le(e\^{\\varepsilon}\\Pr\[f(D')\\in S\])\^{(\\alpha-1)/\\alpha}。它的好处是不需要选 δ,坏处是依赖基线风险:(\\alpha,\\varepsilon)=(10,0.1) 时,若 f(D) 下事件概率是 0.5,则 f(D') 下可能是 0.419 也可能是 0.586;概率降到 10\^{-6} 时区间拉宽到 \[0.195\\times10\^{-6}, 4.36\\times10\^{-6}\]。所以这条保证在"小概率事件"上反而更弱------要判断风险是否可接受,你得先知道基线风险。
Q5:本文说 RDP 组合时"α 不变",那是不是意味着 α 一旦定了就不能改? 组合律确实保持阶不变(Proposition 1),但这不等于你不能改。你可以用一套网格、记录每条机制在每个 α 上的值,事后在任意一个 α 上求和。真正不能做的是把不同 α 的值混加------那不是组合,那是算术错误。工程上要做的就是用统一网格,把"选 α"这件事推迟到出报告时。
10. 延伸阅读
- 原文最值得读的三节:§III 的性质表(Table I)------它把 DP 与 RDP 的性质并排对照,是理解"哪些性质被继承了、哪些被削弱了"的最快路径;§IV 的 Proposition 3 证明;§VII 对 (ε,δ) 与 RDP 的哲学式对比,尤其是"报告 (ε,δ) 等于把问题推给聚合步骤"那段。
- 配套必读:Bun & Steinke 的 zCDP 论文。zCDP 用"所有正阶矩都有线性上界"来定义,比 RDP 严格;理解两者的差别(zCDP 约束整条矩曲线的斜率,RDP 只约束单点)能避免把 RDP 误当成 zCDP 使用。
- 工程实现读源码 :TF Privacy 的
rdp_accountant与 Opacus 的privacy_engine。重点看compute_rdp如何把子采样率 q 作为一等公民传入,以及get_privacy_spent如何做网格搜索。 - 想理解"为什么 α 网格够用":原文 Figure 3 及其说明------13 个固定 α 与连续最优几乎重合。
- 下一站:论文 10(Vadhan 的复杂性综述)讨论的是另一条轴------把 adversary 的计算能力也纳入模型。读完本文你已经有"放松定义"的经验,正好对照。
11. 参考资料
-
I. Mironov. Rényi Differential Privacy . IEEE 30th Computer Security Foundations Symposium (CSF), 2017. arXiv: 1702.07476.(本文所有公式、命题编号、Table I/II、Figure 1--3 均出自此版本 v3, 2017-08-25)
-
C. Dwork, F. McSherry, K. Nissim, A. Smith. Calibrating Noise to Sensitivity in Private Data Analysis . TCC 2006, pp. 265--284. DOI: 10.1007/11681878_14.
-
C. Dwork, K. Kenthapadi, F. McSherry, I. Mironov, M. Naor. Our Data, Ourselves: Privacy via Distributed Noise Generation . EUROCRYPT 2006, pp. 486--503. DOI: 10.1007/11761679_29.
-
C. Dwork, G. N. Rothblum, S. Vadhan. Boosting and Differential Privacy . FOCS 2010, pp. 51--60. DOI: 10.1109/FOCS.2010.12.
-
C. Dwork, G. N. Rothblum. Concentrated Differential Privacy . CoRR abs/1603.01887, 2016. arXiv: 1603.01887.
-
M. Bun, T. Steinke. Concentrated Differential Privacy: Simplifications, Extensions, and Lower Bounds . TCC 2016-B, pp. 635--658. DOI: 10.1007/978-3-662-53641-4_24.
-
M. Abadi, A. Chu, I. Goodfellow, H. B. McMahan, I. Mironov, K. Talwar, L. Zhang. Deep Learning with Differential Privacy . CCS 2016, pp. 308--318. arXiv: 1607.00133.
-
P. Kairouz, S. Oh, P. Viswanath. The Composition Theorem for Differential Privacy . ICML 2015, pp. 1376--1385. arXiv: 1311.0776.
-
J. Murtagh, S. Vadhan. The Complexity of Computing the Optimal Composition of Differential Privacy . TCC 2016-A, pp. 157--175. DOI: 10.1007/978-3-662-49096-9_7.
-
A. Rényi. On Measures of Entropy and Information. Proc. 4th Berkeley Symposium on Mathematical Statistics and Probability, vol. 1, 1961, pp. 547--561.
-
T. van Erven, P. Harremoës. Rényi Divergence and Kullback-Leibler Divergence . IEEE Trans. Information Theory 60(7), 2014, pp. 3797--3820. arXiv: 1206.2459.