Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))

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

三个可以直接拿去用的读数:

  1. 转换表是 U 形的,不是单调的。\\alpha=1.5 时 \\varepsilon=27.7,\\alpha=4 时降到 16.3,\\alpha=64 时又涨回 200.2。最优在 \\alpha\^\*=2.90。任何"α 越大越紧"或"α 越小越紧"的直觉都是错的。
  2. 增益随 δ 变小而变大:δ 从 10\^{-2} 收到 10\^{-6},朴素组合从 79.0 涨到 134.5,RDP 只从 10.7 涨到 16.3,倍率从 7.37 倍升到 8.27 倍。原因就在转换项 \\log(1/\\delta)/(\\alpha-1) 只吃一次。
  3. α→∞ 的极限确实回到 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 的工程形态(这是本文真正的落地遗产):

  1. 账本结构 :一个字典 {alpha: eps},加上一个"已消耗步数"计数。每跑一步 rdp += rdp_step(alpha),对所有 α 同时更新。
  2. 典型接口 :在 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)对监管毫无意义。
  3. 子采样放大必须单独处理 。本文只处理"每一步都是完整高斯机制",而 DP-SGD 每一步作用在随机子集上。把子采样率 q 的放大量硬塞进 \\sigma 里、或者直接忽略,是最常见的两个错误方向。正确做法是使用专门推导的子采样 RDP 曲线(工程上以 q 作为显式参数进入 compute_rdp)。
  4. δ 固定后才有 ε。把 (ε, δ) 两个数一起报、让读者自己挑,等于没报。论文的立场是:报告曲线或报告"固定 δ 下的 ε + 该 δ 的选择依据"。

审计容易被打回的点(按被退回频率排序):

  • 报告的 ε 用了哪个 α 没说。 别人无法复算,直接打回。正确写法:(ε=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. 参考资料

  1. 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)

  2. 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.

  3. 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.

  4. C. Dwork, G. N. Rothblum, S. Vadhan. Boosting and Differential Privacy . FOCS 2010, pp. 51--60. DOI: 10.1109/FOCS.2010.12.

  5. C. Dwork, G. N. Rothblum. Concentrated Differential Privacy . CoRR abs/1603.01887, 2016. arXiv: 1603.01887.

  6. 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.

  7. 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.

  8. P. Kairouz, S. Oh, P. Viswanath. The Composition Theorem for Differential Privacy . ICML 2015, pp. 1376--1385. arXiv: 1311.0776.

  9. 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.

  10. A. Rényi. On Measures of Entropy and Information. Proc. 4th Berkeley Symposium on Mathematical Statistics and Probability, vol. 1, 1961, pp. 547--561.

  11. 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.

相关推荐
Hvitur1 小时前
Java - Lambda
java·开发语言·python
xiaoye-duck1 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
Evand J1 小时前
【MATLAB例程,PMSM19】永磁同步电机(PMSM)基于多速率无迹卡尔曼滤波(UKF)的转速与转子位置估计。测量缺失、状态预测与恢复性能分析
开发语言·matlab·电机·ekf·卡尔曼·电机滤波
喵了几个咪2 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
开发语言·人工智能·后端·golang
꧁细听勿语情꧂2 小时前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫2 小时前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++
apcipot_rain6 小时前
C++转Java日记(06)
java·开发语言
SomeOtherTime13 小时前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood13 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose