想象你是街角「老王汤馆」的大厨老王。每位客人喝完招牌汤,都会在留言本上写下自己的口味偏好——有人嗜辣,有人口重,有人滴香菜不沾。你想收集成千上万条口味反馈,总结出大众规律来改良汤谱(训练一个能预测大众口味的模型),但绝不能把任何一位客人的独特喜好暴露出去。直接拿留言本训练模型是危险的:模型可能“背下”某条独特的留言,就像汤里浮着一整根辣椒,谁都能看出是哪位客人放的。 DP-SGD(差分隐私随机梯度下降)就是一套“匿名烹饪流程”。它分四步走:先单独品尝每个食材的贡献(逐样本梯度);再用力控制单个食材不许喧宾夺主(梯度裁剪);随后撒一把“随机盐”搅浑味道(噪声注入);最后才下锅熬煮(聚合更新)。整套流程还配了一把“信任标尺”(隐私预算 ε),用来向外界证明:这锅汤泄露个人口味的风险到底有多小。本文会带你从原理一路走到 Opacus 框架下的实战代码,学完你也能给自己训练的模型戴上这顶“隐私口罩”。

岗位关联

职业价值:掌握 DP-SGD,你就能在满足隐私合规的前提下训练 AI 模型,这是医疗、金融、推荐系统等场景中数据科学家与隐私工程师的核心竞争力。

目录
  1. 可视化演示
  2. 隐私风险与差分隐私
  3. 逐样本梯度计算
  4. 梯度裁剪机制
  5. 噪声注入机制
  6. 批量采样策略
  7. 隐私预算分析
  8. Opacus实践流程
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示DP-SGD三个核心步骤:逐样本梯度裁剪到阈值C、向裁剪梯度注入高斯噪声、Poisson采样策略及其隐私放大效应,帮助理解差分隐私训练的工程实现。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+captions.clip+'

隐私风险与差分隐私

老王店里的留言本越攒越厚,他发现自己有了个“超能力”——闭着眼都能背出常客的口味签名。这既是本事,也是雷:一旦有客人要求保密,老王随口背出他的偏好,就是泄露隐私。机器学习模型同样有这种“记忆力”,训练数据里的个体特征可能被模型原样“背”出来,这就是成员推理攻击——攻击者只要比较模型对“有某人数据”和“没某人数据”时的输出差异,就能确认某人是否在训练集里。

差分隐私就是数学家给“保密承诺”下的精确定义:不管改掉数据集里的任意一条记录,算法输出结果的分布几乎不变。用老王的话说——无论哪一位客人来不来喝汤,出锅的汤都差不多,外人就别想通过汤的味道反推某位客人来过没有。

正式定义:一个随机算法 M 满足 (ε, δ)-差分隐私,是指对任意只相差一条记录的邻居数据集 D 与 D′,以及任意输出集合 S:

差分隐私只是给出了“承诺”的数学语言,真正让老王兑现承诺的,是接下来四步烹饪功夫:逐样本称重、限辣、撒盐、下锅。

Pr⁡[M(D)∈S]≤eε⋅Pr⁡[M(D′)∈S]+δ\Pr[\mathcal{M}(D) \in S] \le e^{\varepsilon} \cdot \Pr[\mathcal{M}(D') \in S] + \delta
通俗理解:把某一条数据改掉,模型输出分布最多被放大 e^ε 倍。ε 是“隐私泄露的信任积分”,越小越安全。
  1. 邻居数据集 D 与 D′两个数据集只相差一条记录,就像留言本上少了一条口味留言。
    D 与 D′ 只相差一条样本\text{D 与 D}^{\prime} \text{ 只相差一条样本}
  2. 随机算法 M模型训练过程,输出是一个带随机性的结果分布。
    M:数据集→输出分布\mathcal{M}: \text{数据集} \to \text{输出分布}
  3. 概率比值上限少了谁都不影响大局,输出落在同一区域 S 的概率最多放大 e^ε 倍。
    eε 是输出分布变化的放大上界e^{\varepsilon} \text{ 是输出分布变化的放大上界}
  4. δ 松弛项允许极小概率“破功”的缓冲,工程上通常取小于 1/N 的数。
    δ≈1/N\delta \approx 1 / N

逐样本梯度计算

老王想分析“每个食材贡献了什么味道”,就必须单独品尝每份原料。标准深度学习的训练只看整锅汤的平均味道:把一批样本的梯度求平均后更新一次模型。但 DP-SGD 必须知道每一位客人的口味贡献——因为后面的“限辣令”要逐个称重,谁超了辣度就削谁。

梯度是模型学习的“改进方向”。对每个样本 (x_i, y_i),它的梯度就是损失函数对模型参数 θ 的偏导:

实现上,朴素的逐样本做法是让每个样本单独走一遍前向和反向传播,简单但慢、占显存;Opacus 则用向量化技巧在批处理中高效提取每个样本的梯度。逐样本梯度就像把汤料每样单独尝一口——辛苦,但等下要“限辣”时,才知道是哪根辣椒最冲。

gi=∇θL(xi,yi;θ)\boldsymbol{g}_i = \nabla_{\boldsymbol{\theta}} \mathcal{L}(\boldsymbol{x}_i, y_i; \boldsymbol{\theta})
通俗理解:每个样本独立告诉你“模型往哪个方向调,才能更好地预测这个样本”。这一条“个人意见”就是逐样本梯度。
  1. 损失函数 L衡量模型对样本 i 的预测和真实标签差距有多大。
    L(xi,yi;θ)\mathcal{L}(\boldsymbol{x}_i, y_i; \boldsymbol{\theta})
  2. 梯度算子 ∇θ对参数 θ 求偏导,给出“损失下降最快的方向”。
    ∇θ(⋅)\nabla_{\boldsymbol{\theta}}(\cdot)
  3. 逐样本下标 i每个样本各自算一条梯度,互不平均。
    gi=∇θLi(θ)\boldsymbol{g}_i = \nabla_{\boldsymbol{\theta}} \mathcal{L}_i(\boldsymbol{\theta})

梯度裁剪机制

尝完所有食材,老王发现有位客人偷偷放了半瓶辣椒酱。如果照单全收,这锅汤就被一个人的口味主导了,而且攻击者也能顺着这个“大脚印”反推出那位客人的身份。梯度裁剪就是“限辣令”:任何单个样本的梯度贡献,范数不得超过阈值 C。做法是用一个缩放因子把超长的梯度压回 C 以内:

C 怎么选是一门手艺:C 太大,单样本影响大,后面要撒更多盐补偿;C 太小,梯度被削得面目全非,模型难收敛。实践上常取无隐私训练时梯度范数分布的中位数或某个分位数,初始值常用 1.0。限辣令既保证任何一位客人不能盖过整锅汤,也给了随机盐一个明确的剂量基准。

g~i=gi⋅min⁡(1,C∥gi∥2)\tilde{\boldsymbol{g}}_i = \boldsymbol{g}_i \cdot \min\left(1, \frac{C}{\|\boldsymbol{g}_i\|_2}\right)
通俗理解:超长的梯度按比例缩短到半径 C 的圆内,没超长的原样保留。C 就是“辣度上限”。
  1. L2 范数 ||g_i||₂梯度的总长度,各分量平方和再开根号。
    ∥gi∥2=∑jgij2\|\boldsymbol{g}_i\|_2 = \sqrt{\sum_{j} g_{ij}^2}
  2. 裁剪阈值 C单个样本允许的最大范数,相当于限辣令的额度。
    C>0C > 0
  3. 缩放因子长度超过 C 时取 C/||g_i||₂ 缩短它,没超过时取 1 保持不变。
    min⁡(1,C/∥gi∥2)\min(1, C / \|\boldsymbol{g}_i\|_2)
  4. 裁剪结果每个样本梯度范数都不超过 C,敏感度由此有界。
    ∥g~i∥2≤C\|\tilde{\boldsymbol{g}}_i\|_2 \le C

噪声注入机制

有了限辣令,老王还要防一个更阴的手段:即使每个食材都限量,攻击者仍可能通过对比“有某位客人和没这位客人时汤的差别”来反推他的口味。要根治,必须让汤的味道本身带点随机抖动——这就是撒“随机盐”。DP-SGD 采用高斯机制:把裁剪后的梯度求和,再叠加高斯噪声,最后取平均:

注意噪声标准差是 σ×C,而不是随便一个数:C 是裁剪后的敏感度上界——单个样本最多能改变聚合结果多少。敏感度有多大,盐就得按比例撒多少,才能把任何个人的痕迹淹没在随机抖动里。这就像“既然每人最多贡献 C 克辣,我就撒 σ×C 克随机盐,谁也分不清哪口辣味是谁的”。

G~=1B(∑i=1Bg~i+N(0,σ2C2I))\tilde{\boldsymbol{G}} = \frac{1}{B}\left(\sum_{i=1}^{B} \tilde{\boldsymbol{g}}_i + \mathcal{N}(0, \sigma^2 C^2 \boldsymbol{I})\right)
通俗理解:把限过量的贡献加总,再按“标准差 σ×C”的高斯分布撒盐,最后除以批大小得到安全梯度。
  1. 裁剪后梯度求和把每个样本限过量后的贡献累加。
    ∑i=1Bg~i\sum_{i=1}^{B} \tilde{\boldsymbol{g}}_i
  2. 高斯噪声项每个维度独立加一个服从 N(0, σ²C²) 的随机数。
    N(0,σ2C2I)\mathcal{N}(0, \sigma^2 C^2 \boldsymbol{I})
  3. 噪声倍率 σ控制“盐量”,σ 越大隐私越强,但模型精度损失也越大。
    σ>0\sigma > 0
  4. 取平均除以批大小 B,得到本轮可公开的更新方向。
    1B(⋅)\frac{1}{B}(\cdot)

批量采样策略

老王还有个节省信任积分的小窍门:熬汤时不必把全店客人的口味一次全倒进锅里,而是随机挑一小撮当“今日样本”。随机挑人本身就加了层保护——攻击者连某人这轮来没来都不确定,反推口味自然难上加难。DP-SGD 用的是泊松采样:对训练集每个样本独立地以概率 q 决定是否入选本批。

隐私放大是差分隐私的“物理外挂”:同样的噪声水平下,采样率越低隐私越好;但批次太小会引入更多梯度噪声,收敛变慢。实践中批大小常取几千到几万,q 大约在 0.01~0.1 之间。随机抽样就像“今天没请这位客人”——他没到场,关于他的任何推理都失去了依据。

q=BN,Pr⁡(i∈B)=q,i=1,…,Nq = \frac{B}{N}, \quad \Pr(i \in \mathcal{B}) = q, \quad i = 1, \ldots, N
通俗理解:N 是全部客人,B 是期望入锅人数,q 就是每个人这轮被请进厨房的概率。
  1. 样本总量 N 与期望批大小 BN 是训练集总样本数,B 是每轮期望选中的样本数。
    N,B  (B≪N)N, B \;(B \ll N)
  2. 采样率 q每个样本进入当前批次的概率。
    q=B/Nq = B / N
  3. 隐私放大效应由于“没被选中就谈不上泄露”,随机采样使单轮隐私花费约缩小为原来的 q 倍。
    εround≈q×εfull-batch\varepsilon_{\text{round}} \approx q \times \varepsilon_{\text{full-batch}}

隐私预算分析

老王心里有本“信任账本”:每熬一锅汤,就记一笔信任消耗。锅数越多,账本上累计的风险越大。差分隐私用 ε 记这笔账,称为隐私预算。简单组合定理把每轮 ε 直接相加,过于保守;Abadi 等人提出的矩会计(Moments Accountant)利用高斯机制和泊松采样的矩生成函数,把每一轮的隐私花费卡得更紧,最终把总预算表示为:

在 Opacus 中,训练结束后调用隐私会计函数,就能在给定 δ 下算出累计 ε。信任账本用完了就不能再试新汤——所以开工前要先用账本倒推:给定 ε 上限,最多能训多少轮、撒多少盐。

ε=O(q T log⁡(1/δ)σ)\varepsilon = O\left(\frac{q\,\sqrt{T\,\log(1/\delta)}}{\sigma}\right)
通俗理解:总隐私预算由四个旋钮决定——采样率 q、迭代轮数 T、松弛项 δ、噪声倍率 σ。q 和 T 越大越“费预算”,σ 越大越“省预算”。
  1. 采样率 q 在分子每轮选的人越多,单轮花费越大。
    q=B/Nq = B / N
  2. √T 增长隐私花费随迭代轮数亚线性增长,不是直接翻倍。
    T log⁡(1/δ)\sqrt{T\,\log(1/\delta)}
  3. 噪声倍率 σ 在分母盐撒得越多,每轮隐私损失越小。
    σ 越大,ε 越小\sigma \text{ 越大,} \varepsilon \text{ 越小}
  4. 总体含义调参就是在 ε、σ、T、q 之间找平衡,四者加上精度共同决定最终效果。
    ε=O(qTlog⁡(1/δ)/σ)\varepsilon = O(q \sqrt{T \log(1/\delta)} / \sigma)

Opacus实践流程

把整套匿名烹饪流程打包成自动料理机,就是 Opacus——PyTorch 官方的差分隐私训练库。你不需要手写逐样本梯度、裁剪和加噪,只要把数据加载器、模型和优化器交给它的 PrivacyEngine,机器会自动执行“逐样本梯度 → 裁剪 → 加噪 → 更新”的完整循环。最终完整更新规则长这样:

实际使用 Opacus 的流程只有四步:准备数据 → make_private 把模型、优化器、数据加载器“接上”隐私引擎 → 正常训练 → 调用隐私会计获取 ε。调参经验是先不加隐私训到精度基线,再逐步加大 σ,观察精度-隐私曲线;常用初始值 σ=1.0~1.5、C=1.0、q≈0.01~0.1。有了这台“隐私料理机”,老王再也不用徒手称辣度、数盐粒——只要告诉机器“每人最多 C 克辣、盐量 σ 档、信任账本上限 ε”,机器就会守住承诺。

θt+1=θt−η⋅1B(∑i∈Bclip⁡C(gi)+N(0,σ2C2I))\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \cdot \frac{1}{B}\left( \sum_{i \in \mathcal{B}} \operatorname{clip}_{C}(\boldsymbol{g}_i) + \mathcal{N}(0, \sigma^2 C^2 \boldsymbol{I}) \right)
通俗理解:这是整篇文章的“总菜谱”——限辣(裁剪)、撒盐(噪声)、搅匀(平均)、下料(更新),一步到位。
  1. clip_C 逐样本裁剪把每个样本梯度限制在半径 C 内。
    clip⁡C(gi)\operatorname{clip}_{C}(\boldsymbol{g}_i)
  2. 加噪聚合求和后叠加标准差 σ·C 的高斯噪声。
    N(0,σ2C2I)\mathcal{N}(0, \sigma^2 C^2 \boldsymbol{I})
  3. 学习率 η 更新沿安全梯度方向迈一小步,更新模型参数。
    θt−η⋅G~\boldsymbol{\theta}_t - \eta \cdot \tilde{\boldsymbol{G}}
  4. 端到端结算训练 T 轮后,用矩会计输出 (ε, δ),模型即可对外发布。
    (ε,δ)=Account(q,σ,T)(\varepsilon, \delta) = \text{Account}(q, \sigma, T)

AI 应用场景

医疗影像模型的隐私训练

阶段:数据治理与模型训练

解决的问题:医院 CT、X 光影像包含大量患者敏感信息。传统做法把数据拷贝到训练环境,模型可能“背下”个别患者的影像特征,一旦模型权重泄露就构成医疗隐私事故。DP-SGD 在训练源头加噪,让模型只能学到群体规律。就像老王汤馆的汤,谁都尝得出大众口味,但尝不出任何一位客人的偏好。

具体案例:某医学影像公司用 Opacus 训练肺结节检测模型。数据不出医院数据湖,训练时设置 noise_multiplier=1.1、max_grad_norm=1.0,以 ε=3 的预算完成训练;训练后通过差分隐私审计,模型权重才被允许发布给合作医院。

推荐系统的隐私合规改造

阶段:用户行为建模与精排

解决的问题:推荐系统直接学习用户点击、浏览序列,极易记住单个用户的“怪癖”(比如深夜反复搜某种商品),GDPR 等法规明确要求模型不得泄露个体行为。DP-SGD 让模型只保留群体统计规律,牺牲少量精度换取合规。

具体案例:某电商平台在商品推荐精排阶段启用 DP-SGD,设置 σ=0.8、C=1.0、批大小 4096,训练结束后用矩会计算出用户维度隐私预算 ε=4.2。上线后业务指标仅下降 1.3%,却顺利通过了隐私合规审查。

大语言模型的隐私微调

阶段:模型微调与部署

解决的问题:大语言模型会逐字记忆训练语料中的隐私片段(如邮箱、地址、身份证号)。用 DP-SGD 微调可以显著降低模型的“逐字记忆率”,避免用户在对话中被模型“背出”别人的隐私信息。

具体案例:某团队在客服对话数据上用 Opacus 微调 1.3B 参数的模型,设置 noise_multiplier=3.2、max_grad_norm=1.0,训练后模型对测试集中隐私语句的逐字记忆率从 12% 下降到 1% 以下,同时保持了可用的对话质量。

Python 演示

python47 行
import torchimport torch.nn as nn torch.manual_seed(42) N, D, K = 300, 20, 3X = torch.randn(N, D)W_true = torch.randn(D, K)y = torch.argmax(X @ W_true, dim=1) model = nn.Linear(D, K)loss_fn = nn.CrossEntropyLoss()optimizer = torch.optim.SGD(model.parameters(), lr=0.5) BATCH, C, sigma, EPOCHS = 32, 1.0, 1.2, 10  def flat_grads(gen_list):    return torch.cat([g.reshape(-1) for g in gen_list])  for epoch in range(EPOCHS):    perm = torch.randperm(N)    correct, total = 0, 0    for i in range(0, N, BATCH):        idx = perm[i:i + BATCH]        per_grads = []        for j in idx:            loss = loss_fn(model(X[j:j + 1]), y[j:j + 1])            grads = torch.autograd.grad(loss, model.parameters())            per_grads.append(flat_grads(grads))        G = torch.stack(per_grads)        norm = G.norm(2, dim=1)        scale = torch.clamp(C / norm, max=1.0).view(-1, 1)        G = G * scale        G_avg = G.mean(0) + torch.randn(G.shape[1]) * C * sigma / len(idx)        optimizer.zero_grad()        start = 0        for p in model.parameters():            numel = p.numel()            p.grad = G_avg[start:start + numel].view(p.shape)            start += numel        optimizer.step()        pred = model(X[idx]).argmax(1)        correct += (pred == y[idx]).sum().item()        total += len(idx)    print(f"epoch {epoch + 1}, acc {correct / total:.3f}")
目的:不依赖任何隐私库,从零手写 DP-SGD 的四个核心步骤——逐样本梯度、L2 裁剪、高斯加噪、聚合更新,让你看清“匿名烹饪”的每个动作。
  1. grads = torch.autograd.grad(loss, model.parameters())对单个样本求梯度,这就是“逐个品尝每份食材”。
  2. G = torch.stack(per_grads)把批次里所有样本的梯度拼成矩阵,方便批量处理。
  3. norm = G.norm(2, dim=1)逐行计算 L2 范数,判断每个样本的“辣度”。
  4. scale = torch.clamp(C / norm, max=1.0).view(-1, 1)超限的按比例缩短,没超限的保持 1。
  5. G = G * scale完成裁剪,所有样本梯度范数都不再超过 C。
  6. G_avg = G.mean(0) + torch.randn(G.shape[1]) * C * sigma / len(idx)聚合后撒高斯随机盐,标准差为 σ×C。
  7. for p in model.parameters():把加噪后的梯度按参数顺序写回,再交给优化器走一步。

常见误区

误区“我在梯度里随便加了一点随机数,就算是做了差分隐私保护了。随机数加得越大越安全。”

正解差分隐私对噪声量有硬性要求:噪声的标准差必须按敏感度(裁剪阈值 C)来标定,并且要用隐私会计(矩会计/RDP)计算出真实的 ε。随便加噪声只能叫“随机扰动”,没有任何数学保证。就像老王撒盐得按汤量和辣度配比,随手抓一把不能说成“按配方保密”。

为何常见:大家凭直觉以为“随机 = 隐私”,忽略了差分隐私最核心的性质——可证明性。没有会计结算的噪声,只是心理安慰。

误区“C 是限制梯度大小的,设大一点模型学得更充分,隐私反正有噪声兜底,所以 C 越大越好。”

正解C 决定单个样本对聚合结果的最大影响,也就是敏感度。C 越大,同样 σ 下注入的噪声标准差 σ×C 也越大,模型反而学不动;即使在相同噪声水平下,C 增大也会让隐私会计给出的 ε 变大。实际操作中 C 常取 1.0 或梯度范数分布的中位数。

为何常见:把裁剪误当成普通的“梯度正则化”,没意识到它同时是隐私敏感度的上限,隐私与精度是一体两面。

误区“每一轮我都加了噪声,每一轮的保护强度一样,所以不存在隐私越滚越大的问题。”

正解差分隐私满足组合定理:多轮训练会使总 ε 持续累加,大致按 q√T / σ 的规律增长。这就是为什么必须有隐私会计来结算总预算——否则每轮看似安全,跑完几千轮后早就“破功”了。信任账本的每一笔都会记着,不会自动清零。

为何常见:把“单轮安全”等同于“全程安全”,忽略了组合定理这个差分隐私的底层公理。

误区“噪声和裁剪会把梯度毁掉,凡是做差分隐私训练的模型基本都不能用。”

正解只要 σ、C、q、T 配合得当,DP-SGD 在不少任务上能把精度损失控制在 1~3 个百分点。关键是先不加隐私训到基线,再逐步加大 σ,画出精度-隐私的权衡曲线,在曲线上选一个可接受的切点。噪声是可控的调料,不是毒药。

为何常见:见过 σ 调太大导致不收敛的失败案例,就把整个 DP-SGD 一棍子打死,忽略了调参得当的成功案例。

面试题

Q1. DP-SGD 对每个样本梯度所做的核心操作,按正确顺序是?

单选题 · easy

  • A.裁剪梯度再添加噪声← 正确答案
  • B.添加噪声再裁剪梯度
  • C.直接归一化所有梯度
  • D.只保留正向梯度值

答案:A。顺序必须“先限辣、再撒盐”:先按 L2 范数把单样本梯度裁剪到阈值 C 内,确保敏感度有界;再向聚合结果注入高斯噪声。反过来先加噪再裁剪,噪声会被裁剪破坏,敏感度也无法标定,隐私保证就失效了。

Q2. 梯度裁剪中,裁剪阈值 C 衡量的是什么?

单选题 · easy

  • A.单个样本梯度的 L2 范数上限← 正确答案
  • B.所有样本梯度的平均值上限
  • C.噪声注入的随机种子数量
  • D.模型参数的绝对值总和

答案:A。C 是“辣度上限”,限制的是单样本梯度的 L2 范数,让任何一个人的贡献都不超过 C。它跟噪声种子、参数绝对值无关;如果限制的是平均值上限,就无法逐样本保护隐私了。

Q3. DP-SGD 注入的噪声服从哪种分布?

单选题 · mid

  • A.均匀分布,范围缩小到 [0,C]
  • B.高斯分布,均值零方差 σ²C²← 正确答案
  • C.伯努利分布,按概率 q 取 0 或 1
  • D.拉普拉斯分布,尺度参数等于 C

答案:B。DP-SGD 标准框架用高斯机制,噪声服从 N(0, σ²C²),这样才能和矩会计(RDP)配合给出紧凑的 ε 界。均匀分布尾部衰减不足,拉普拉斯对应另一套 L1 敏感度框架,伯努利是采样用的,不是加噪用的。

Q4. 差分隐私中 ε 越小,说明什么?

单选题 · easy

  • A.隐私保护越强,但噪声通常越大← 正确答案
  • B.模型训练速度越快,精度更高
  • C.数据集质量越高,模型越可靠
  • D.模型的参数量越小,占用越少

答案:A。ε 是“信任账本”的积分:ε 越小,输出分布对单条记录的改动越不敏感,隐私越强;但代价是需要注入更大噪声,通常导致精度下降。它和训练速度、数据质量、参数量没有直接关系。

Q5. 泊松采样下,采样率 q 的定义是?

单选题 · mid

  • A.q = B/N,批大小除以样本总数← 正确答案
  • B.q = N/B,样本总数除以批大小
  • C.q = B×N,批大小乘样本总数
  • D.q = C/σ,裁剪阈值除以噪声倍率

答案:A。q 是每个样本本轮被选中的概率,等于期望批大小 B 除以样本总数 N。N/B 会大于 1 不合理;B×N 是乘积不是概率;C/σ 是敏感度与噪声的关系式,与采样无关。

Q6. 裁剪阈值 C 设置得过小会导致什么?

单选题 · mid

  • A.梯度偏差变大,模型难以收敛← 正确答案
  • B.隐私预算翻倍,保护反而变弱
  • C.噪声标准差变小,精度提升
  • D.训练批次变大,速度显著变快

答案:A。C 太小等于“限辣令”过于严苛,把大量真实梯度信息削掉,聚合梯度产生较大偏差,模型难收敛。C 小本身会让敏感度降低(隐私变好、噪声也可更小),但它不会翻倍预算、不会自动改噪声标准差或批次大小。

Q7. Opacus 中实际注入噪声的标准差是多少?

单选题 · hard

  • A.噪声倍率乘以裁剪阈值 σ×C← 正确答案
  • B.噪声倍率除以裁剪阈值 σ/C
  • C.裁剪阈值除以噪声倍率 C/σ
  • D.噪声倍率加上裁剪阈值 σ+C

答案:A。Opacus 的 noise_multiplier 对应 σ,max_grad_norm 对应裁剪阈值 C,实际注入的高斯噪声标准差是 σ×C。这正体现了“盐量按辣度上限配比”的原则:敏感度 C 越大,需要的保护性噪声就越大。除法和加法都无法保证覆盖单样本的最大影响。

Q8. 关于隐私预算 ε 的累计,下列说法正确的有哪些?

多选题 · mid

  • A.多轮训练会使隐私预算持续累加← 正确答案
  • B.随机批量采样带来隐私放大效应← 正确答案
  • C.隐私预算与总迭代轮数完全无关
  • D.矩会计方法可精确计算累计隐私← 正确答案

答案:ABD。组合定理决定了多轮训练 ε 会累加,且大致随 √T 增长,所以 C 错。随机采样让攻击者不确定样本是否参与,带来隐私放大,B 对。矩会计(Moments Accountant)正是精确结算累计 ε 的标准工具,D 对。

Q9. 以下哪些属于 DP-SGD 的标准流程步骤?

多选题 · mid

  • A.逐样本计算每个样本的梯度← 正确答案
  • B.按 L2 范数逐样本裁剪梯度← 正确答案
  • C.向聚合梯度注入高斯噪声← 正确答案
  • D.对训练标签做随机翻转增强

答案:ABC。DP-SGD 三件套是逐样本梯度、裁剪、加噪,缺一不可。标签翻转是数据增强手段,与差分隐私无关,做了反而会破坏标签与特征的真实对应关系,不属于标准流程。

Q10. 想降低总隐私预算 ε,可以采取哪些措施?

多选题 · hard

  • A.增大高斯噪声的倍率 σ← 正确答案
  • B.减少训练的迭代轮数 T← 正确答案
  • C.减小批次采样率 q 值← 正确答案
  • D.增大梯度裁剪阈值 C

答案:ABC。ε ≈ O(q√T / σ):σ 在分母,增大它直接降低 ε;T 和 q 在分子,减小它们也降低 ε。而增大 C 会提高敏感度,通常使 ε 上升(或需要更大噪声补偿),所以 D 是反效果。