门派里的年轻弟子小武,拳脚利落,可每次和陪练阿攻切磋,总会在同一个地方栽跟头——阿攻只是把拳头角度偏了两厘米,小武就认不出这是直拳,硬生生把它当成摆拳来防,被一招放倒。并非小武反应慢,而是他对“细微走样”毫无防备。深度学习模型也一样:给它看一张熊猫照片,像素被悄悄改动一点点,人眼完全无感,它却斩钉截铁地说是“长臂猿”。这种被精心打扮过、专门用来骗倒模型的输入,就叫对抗样本。 如何让模型像小武一样练就“任你微变招、我心如明镜”的本事?答案就是标准对抗训练(Adversarial Training,AT)。它像门派的日常对练:一个扮演进攻者的陪练不断寻找模型最薄弱的角落,模型则在这种“被针对”的训练下,把防守一步步练扎实。从对抗样本的定义、FGSM 与 PGD 两种攻击招式,到 min-max 博弈的训练公式、工程落地与评估,本文会跟着小武的练功日记,把 AT 的原理、算法、调配和落地讲得明明白白。
掌握标准对抗训练,是 AI 工程师走向安全防御方向的必修课。学会它,你就能主动找出模型的软肋并低成本补强,在自动驾驶、金融风控等安全敏感领域成为团队中不可替代的“防守大师”。
可视化演示
展示归并排序的分治合并过程,观察子数组逐步合并为有序序列,理解时间复杂度的构成。
本节配有交互动效(进入视口后自动加载,约 3KB)。
归并排序分治合并 红色为当前合并区间 绿色为已排序部分 T(n)=O(n log n) 自底向上逐层合并有序子数组。
AT基本概念
小武是门派里最认真的弟子,但每次与陪练阿攻切磋,总会被对方用“看似一样的招数”骗倒——阿攻只是把出拳角度歪了一点点,小武就判断成踢腿。不是小武笨,而是他对“细微变化”太敏感。机器学习模型也是这样:把一张熊猫照片的像素稍稍扰动几个数值,人类完全看不出区别,模型却会信心满满地说是“长臂猿”。
这些被精心改动过、专门让模型出错的输入,就叫对抗样本。它和随机噪声完全不同:随机噪声像路上尘土,谁都可能蹭到但杀伤不大;对抗样本像阿攻观察了你三个月后,专门朝你旧伤处打的那一下——有方向、有目的、专挑最痛的点。
为了严格刻画“怎么算抗揍”,我们需要一个数学约定:给定样本 \(x_0\) 和预算 \(\varepsilon\),只要与 \(x_0\) 距离不超过 \(\varepsilon\) 的扰动 \(\delta\) 都不能改变模型的判断,就说模型在这个点上是 \(\varepsilon\)-鲁棒的。这个定义是标准对抗训练一切讨论的出发点。
就像小武给自己定的目标不是“打赢阿攻”,而是“阿攻在限定力度内无论怎么变招都骗不到我”——鲁棒性定义锁定了这个标准,后面所有的攻击和训练都围着它转。
- 全称量词 \(\forall\)表示“对任意一个”,这里指对球内所有可能的扰动都要成立,一个都不能漏。
- 扰动 \(\delta\)对抗样本相对原始输入的改动量,可以理解为阿攻那一拳偏移的角度。
- 球邻域 \(B_\varepsilon(x_0)\)以 \(x_0\) 为球心、\(\varepsilon\) 为半径的球,是所有被允许的扰动范围的集合,相当于比武前约定的“出手力度上限”。
- 模型输出 \(f_\theta(x_0+\delta)\)模型在被扰动后的输入上的预测结果,\(\theta\) 是模型的全部参数(小武的招式和习惯)。
- 标签相等 \(=y_0\)要求预测结果仍然等于原始的正确标签,即不管怎么扰动都骗不到我。
对抗攻击方法
阿攻怎么快速发现小武的弱点?他不需要试遍所有招式——只要观察小武的“应激反应”,看清哪个方向他最不设防,就全力往那个方向打。对模型而言,这个“应激反应”就是损失函数对输入求梯度:梯度指向“最能让模型犯错”的方向。取它的符号得到方向,再乘以力度 \(\varepsilon\),就得到了对抗样本。这就是 FGSM(快速梯度符号法),一步到位,像一记又快又狠的直拳。
FGSM 只打一步,像快拳;如果小武调整了防守呢?更老练的做法是 PGD——打完一步,观察新破绽,再打一步,重复多次,每一步都限制在“出脚范围”内。PGD 生成的对抗样本质量通常更高,但代价是计算量成倍增加。攻击强度由 \(\varepsilon\) 控制:\(\varepsilon\) 太小,模型感受不到压力;太大,样本明显变形,不再是“看起来没变”的隐蔽攻击了。
- 原始输入 \(x\)一张正常的熊猫照片,或者小武还没被攻击时的标准防守姿势。
- 扰动预算 \(\varepsilon\)允许改动的最大幅度,相当于陪练的出拳力度上限,值越大攻击越狂暴。
- 梯度 \(\nabla_x\,\mathcal{L}\)损失对输入的变化率,指明“往哪个方向改最容易让模型出错”,是阿攻眼中的破绽。
- 符号函数 \(\operatorname{sign}\)只保留梯度的方向、去掉大小,让每一步的扰动都是均匀的 \(\varepsilon\),不会某方向用力过猛。
- 相加 \(x+\cdots\)把原始输入沿最坏方向移动,得到最终对抗样本 \(x_{\rm adv}\)。
极小极大原理
门派训练的本质是双人博弈:阿攻负责出最狠的招,让小武失分最多;小武负责把这些狠招都学会防住,让自己失分最少。两者反复对抗,小武的水平螺旋上升。标准对抗训练的数学形式正是这场博弈的精确刻画。
给定一个样本和当前模型,内层先找一个在 \(\varepsilon\) 球内让损失最大的扰动——这是阿攻全力进攻;外层调整模型参数,让这个“最坏情况下的损失”尽量小——这是小武针对性地练功。两者交替进行,就是著名的 min-max 优化。
注意内层攻击用的是“当前”模型——训练初期模型弱,阿攻一招就倒;训练后期模型变强,阿攻要多步试探才找得到破绽。这正是 PGD 在训练中派上用场的场景。
- 外层最小化 \(\min_{\theta}\)以小武(模型)为主语,调整参数让整体失分最小,是日常练功的方向。
- 内层最大化 \(\max_{\|\delta\|_{\infty}\le\varepsilon}\)以阿攻(攻击)为主语,在力度上限内找到让小武最难受的扰动。
- 无穷范数约束 \(\|\delta\|_{\infty}\le\varepsilon\)规定扰动每个维度的最大幅度都不能超过 \(\varepsilon\),防止阿攻打出桌外。
- 最坏情况损失 \(\mathcal{L}(f_\theta(x+\delta),y)\)把“被重点针对”时的损失作为训练标准,不是平均情况,而是最坏情况。
算法实现
把 min-max 公式翻译成训练代码,流程像小武的日常训练清单。一个批次的数据到了之后,先让“当前”模型对它们执行内层攻击,生成一批对抗样本;然后把干净样本和对抗样本混在一起喂给模型更新参数,如此循环。内层攻击最常用的是 PGD 迭代更新公式,每一步都往梯度方向走一小步,再投影回 \(\varepsilon\) 球内,防止出界。
外层更新则用普通的 SGD 或 Adam,把对抗样本当成训练数据,“生成→混合→更新”循环往复直到验证集鲁棒性饱和。训练时 \(T\) 通常取 1-3 步,因为训练追求速度;评估时取 20-50 步甚至更多,因为评估追求狠。
- 当前候选 \(x^{t}\)第 \(t\) 步的对抗候选样本,训练时从原始 \(x\) 出发,也可以加一点随机起点。
- 步长 \(\alpha\)每一步移动的幅度,通常取 \(\alpha=\varepsilon / T\),\(T\) 是总步数,保证多步加起来不超预算。
- 梯度方向 \(\operatorname{sign}(\nabla_{x}\mathcal{L})\)沿着让损失增加最快的方向前进,即阿攻每招都朝新暴露的破绽打。
- 投影 \(\operatorname{Clip}_{B_\varepsilon(x)}\)把越界的候选样本拉回 \(\varepsilon\) 球内,相当于比武规则实时生效。
- 迭代更新重复 \(T\) 次后得到最终对抗样本 \(x_{\rm adv}=x^{T}\),它比 FGSM 更接近真正的“最痛点”。
性能特性
训练一段时间后,小武发现:面对阿攻熟悉的刁钻角度,他几乎不失分了(鲁棒性提升),但面对普通路人的常规出拳,他有时反而反应慢半拍(干净准确率下降)。这不是他变笨,而是他把一部分注意力分给了“防备歪招”。这就是对抗训练著名的“鲁棒-准确权衡”。
模型容量有限,决策边界向外扩张保护对抗样本的同时,一些原本站在边界附近的正常样本可能被牺牲。如何衡量鲁棒性?不能只看训练时的表现,要用固定的攻击流程在测试集上重新攻击一遍,统计模型在这些对抗样本上的正确率,即对抗准确率。
标准 AT 的另一个特征是收敛慢:每次迭代都要先生成对抗样本再做参数更新,相当于一份数据练了两遍,训练时间通常是普通训练的 2-3 倍。练武之人防守变强,但全面进攻未必更强——要分清“抗揍”和“能打”。
- 样本总数 \(N\)测试集里用来评估的样本个数,样本越多评估越可靠。
- 指示函数 \(\mathbb{1}[\cdot]\)中括号里的条件成立记 1,不成立记 0,简单说就是“这一局守住没有”。
- 预测类别 \(\arg\max_{c}\,f_\theta(x_i')_{c}\)模型对对抗样本输出各类别得分,取最高分对应的类别作为预测。
- 攻击生成 \(x_i'=\mathrm{Attack}(x_i)\)用评估用的攻击方法(如 PGD)对每个测试样本生成对抗版本。
优化策略
想让小武既抗揍又不丢基本功,得调“练功配方”。最常见的做法是把干净样本的损失和对抗样本的损失按比例混合,用系数 \(\lambda\) 控制两者的权重,让模型既照顾正常样本,又重点防御坏样本。
其他常用策略:训练时用 1-2 步 FGSM 加快速度;为 \(\varepsilon\) 设合理值(图像任务常用 8/255 量级);配合标签平滑防止模型过度自信。还有一个容易被忽视的细节:攻击步长 \(\alpha\) 要和 \(\varepsilon\) 匹配,一般取 \(\alpha=\varepsilon / T\)。步长太大容易“走过头”,找不到最痛点;太小又要在更多迭代中消耗算力。陪练的力度、步法都要精确设计,否则练不出真功夫。
- 批次 \(\mathcal{B}\)当前这次更新用的一小撮数据,标准做法是一个 mini-batch。
- 干净损失项 \(\mathcal{L}(f_\theta(x),y)\)在原始数据上的常规损失,保证模型“基本功”不丢。
- 对抗损失项 \(\mathcal{L}(f_\theta(x_{\rm adv}),y)\)在对抗样本上的损失,让模型学会在歪招面前不失守。
- 权衡系数 \(\lambda\)控制两项目标的比重,\(\lambda\) 太大模型过于保守,太小防御形同虚设。
工程实践
小武学成后要去守镖局大门。真实世界的威胁不止一种:有人用贴纸篡改路牌,有人用装饰物干扰人脸识别,有人在验证码里嵌入隐形纹理。用标准对抗训练练过的模型,遇到这些场景时明显更稳。不过在部署前,必须严格评估——不能只用训练时的攻击自评,那相当于“和自己熟络的陪练对打来证明武功高强”。
评估时要用更强的攻击(如多步 PGD、多种随机起点重试)来检验,还可以计算“离最近的对抗样本有多远”。这个距离越大,说明要付出的攻击成本越高,模型越难被击倒。它被称为最小对抗扰动距离,是衡量防守强度的标尺。
工程上还要注意:图像分类(如车牌识别)可直接采用 AT 加基本的图像变换;支付人脸、自动驾驶等安全敏感场景必须把鲁棒性当作和准确率并列的 KPI;上线后持续监控对抗样本攻击率,定期用新攻击重测。守门不是比谁招数漂亮,而是比谁在歪招面前不失守。
- 条件集合 \(\delta\,f_\theta(x+\delta)\ne y\):所有能让模型预测错误的扰动构成的集合,即所有“能骗到人”的招数。
- 最小化 \(\min\)在所有“能骗到人”的招数里找代价最小的那一个,也就是攻击者的最省力选择。
- 范数 \(\|\delta\|_{p}\)度量扰动的大小,\(p\) 常用 2(欧氏距离)或无穷范数(最大像素变化),相当于丈量出招偏移量的尺子。
AI 应用场景
自动驾驶视觉感知防御
阶段:模型训练与部署
解决的问题:自动驾驶的交通标志识别模型,可能被路旁的恶意贴纸攻击——在“停”字标志上贴几块小胶带,模型就把它识别成“限速 40”。传统方法只关注正常天气下的准确率,对这类刻意攻击毫无防备。用标准对抗训练在训练阶段就生成大量被扰动的路牌样本,让模型提前“见过”这些歪招。
具体案例:某无人配送车团队在感知模型训练中引入 AT,对停车标志、人行横道标志加入 \(\varepsilon=8/255\) 的对抗样本,攻击成功率从 61% 降到 7%,同时正常场景准确率仅下降 1.2 个百分点。
人脸识别门禁防攻击
阶段:安全评测与模型加固
解决的问题:人脸识别门禁可能被“对抗眼镜框”绕过——攻击者戴上一副印有特殊纹理的镜框,系统就把他识别成注册用户。标准对抗训练可以模拟这类“局部扰动”攻击,让人脸模型在训练时见过被补丁遮挡的对抗样本,从而在真实攻击面前保持警惕。
具体案例:某写字楼门禁系统对注册人脸数据集做 PGD 对抗训练,并用 30 步攻击重新评估,绕过率从 28% 降至 3%,员工正常刷脸通过率维持在 99% 以上。
内容安全与文本对抗防御
阶段:数据增强与模型迭代
解决的问题:垃圾评论和有害内容检测模型,可能被“同音字替换”“添加不可见字符”等文本对抗手段绕过。虽然经典 AT 多用于图像,但其“先攻击再防御”的思想同样适用于文本——在嵌入空间对词向量做扰动训练,提升模型对恶意改写文本的鲁棒性。
具体案例:某社区平台对违规评论检测模型引入词向量扰动训练,针对“赌 场”替换为“堵 场”这类变形攻击,召回率从 54% 提升到 86%,误伤正常评论的比例仅小幅上升。
Python 演示
import numpy as np def sigmoid(z): return 1.0 / (1.0 + np.exp(-z)) def make_data(n=200, seed=0): rng = np.random.default_rng(seed) x1 = rng.normal(0.7, 0.5, (n, 2)) x2 = rng.normal(-0.7, 0.5, (n, 2)) X = np.vstack([x1, x2]) y = np.concatenate([np.ones(n), -np.ones(n)]) return X, y def forward(X, w1, b1, w2, b2): H = np.maximum(0.0, X.dot(w1) + b1) return H, H.dot(w2) + b2 def predict(X, w1, b1, w2, b2): _, z = forward(X, w1, b1, w2, b2) return np.sign(z) def grad_input(X, y, w1, b1, w2, b2): H, z = forward(X, w1, b1, w2, b2) rho = sigmoid(-y * z) dh = (-y * rho)[:, None] * w2[None, :] dh = dh * (H > 0) return dh.dot(w1.T) def attack(X, y, w1, b1, w2, b2, eps): gx = grad_input(X, y, w1, b1, w2, b2) return X + eps * np.sign(gx) def batch_step(Xb, yb, w1, b1, w2, b2, eps, lr): Xa = attack(Xb, yb, w1, b1, w2, b2, eps) gw1 = np.zeros_like(w1) gb1 = np.zeros_like(b1) gw2 = np.zeros_like(w2) gb2 = np.zeros_like(b2) for Xv, coef in ((Xb, 0.5), (Xa, 0.5)): H, z = forward(Xv, w1, b1, w2, b2) rho = sigmoid(-yb * z) dz = -yb * rho gw2 += coef * H.T.dot(dz) / len(Xb) gb2 += coef * dz.mean() dh = dz[:, None] * w2[None, :] dh = dh * (H > 0) gw1 += coef * Xv.T.dot(dh) / len(Xb) gb1 += coef * dh.mean(axis=0) w1 -= lr * gw1 b1 -= lr * gb1 w2 -= lr * gw2 b2 -= lr * gb2 def accuracy(X, y, w1, b1, w2, b2, eps=0.0): Xv = attack(X, y, w1, b1, w2, b2, eps) if eps > 0 else X return float((predict(Xv, w1, b1, w2, b2) == y).mean()) def main(): X, y = make_data() eps = 0.4 rng = np.random.default_rng(1) w1 = rng.normal(0, 0.2, (2, 16)) b1 = np.zeros(16) w2 = rng.normal(0, 0.2, (16,)) b2 = 0.0 print("初始 干净=%.3f 对抗=%.3f" % ( accuracy(X, y, w1, b1, w2, b2), accuracy(X, y, w1, b1, w2, b2, eps=eps))) for epoch in range(60): order = np.random.permutation(len(X)) for s in range(0, len(X), 64): ids = order[s:s + 64] batch_step(X[ids], y[ids], w1, b1, w2, b2, eps, lr=0.5) if (epoch + 1) % 20 == 0: print("epoch %2d 干净=%.3f 对抗=%.3f" % ( epoch + 1, accuracy(X, y, w1, b1, w2, b2), accuracy(X, y, w1, b1, w2, b2, eps=eps))) if __name__ == "__main__": main()
grad_input` 中 `dh = dh * (H > 0)用 ReLU 的开关关闭未激活神经元的梯度通道,保证反向传播正确。gx = grad_input(X, y, w1, b1, w2, b2)计算损失对输入的梯度,这是 FGSM 攻击要找的“最坏方向”。Xa = attack(Xb, yb, w1, b1, w2, b2, eps)内层最大化:生成对抗样本。for Xv, coef in ((Xb, 0.5), (Xa, 0.5))干净样本与对抗样本各占一半,实现混合批次更新。w1 -= lr * gw1外层最小化:用混合梯度更新模型参数。accuracy(X, y, w1, b1, w2, b2, eps=eps)用 FGSM 对抗样本评估模型的对抗准确率。
常见误区
误区给训练数据加上高斯噪声就算对抗训练了,模型应该能抵御对抗攻击。但实际测试发现模型还是被一招放倒。
正解随机噪声的方向是各向同性的,平均下来互相抵消,很难让模型真正失分。对抗扰动是沿着“最坏方向”精心设计的——就像阿攻不是乱挥拳头,而是盯着你旧伤处打。对抗训练的核心是“找最痛的点再练防守”,随机加噪少了“找点”这一步,效果天差地别。
为何常见:往数据里加噪声实现成本极低,而且“噪声能提高鲁棒性”的说法流传很广,容易让人误以为两者等价。
误区评估时 PGD 步数多攻击效果好,那训练时也应该用 50 步甚至更多的 PGD,这样练出来的模型一定更抗揍。
正解训练关注的是“学得会”,不是“攻得狠”。多步攻击计算开销巨大,还会让模型过拟合到特定攻击路径,反而降低泛化性。标准做法是训练用 1-3 步 FGSM/PGD 快速逼近最坏方向,评估再用 20-50 步的强攻击检验真实水平。就像陪练日常训练用固定套路帮弟子练功,考核时才换最狠的招数。
为何常见:评估任务中多步攻击表现更好,容易让人把评估策略直接照搬到训练环节。
误区用了对抗训练,模型就变得相当保守,正常样本准确率会崩掉,所以不敢用。
正解鲁棒性确实会与干净准确率存在权衡,但幅度取决于具体设置。通过调整混合比例 \(\lambda\)、合理设置 \(\varepsilon\)、使用更宽的模型结构,可以在两者之间取得良好平衡。多数实际案例中,对抗准确率大幅提升的同时,干净准确率只下降 1-3 个百分点。
为何常见:论文里展示的权衡曲线往往来自极端设置,读者容易忽略具体的超参数背景,把最坏情况当成普遍规律。
误区训练时用 FGSM,评估时也报 FGSM 的准确率,模型鲁棒性高达 95%,直接上线。
正解训练用的攻击强度较弱,模型可能只是“背熟了”这一种攻击,换一种更强的 PGD 或换个随机起点就露馅。严谨的评估要用多种强度、多种初始化方式的攻击交叉验证,甚至用 AutoAttack 等集成工具。这就好比考核不能只让熟悉的陪练出招,得让陌生高手车轮战才算数。
为何常见:强攻击评估计算量大,团队为了省时间偷懒只用同一种攻击自评,结果上线后被真实攻击打穿。
面试题
Q1. 关于“对抗样本”,下列理解最准确的是?
- A.随机添加噪声的图像样本
- B.针对模型弱点精心构造的扰动← 正确答案
- C.数据增强产生的新样本
- D.分辨率更高的清晰样本
答案:B。对抗样本不是随机噪声,而是沿梯度最坏方向精心构造的扰动,目标是在人眼无感的前提下让模型犯错。就像陪练专挑旧伤处打,而不是乱挥拳。数据增强和分辨率提升都不具备“针对性”。
Q2. FGSM 中 sign 函数的主要作用是什么?
- A.让扰动方向取整
- B.只保留梯度的方向← 正确答案
- C.放大梯度的大小
- D.消除梯度的噪声
答案:B。sign 把梯度变成 +1 或 -1,只保留方向、抹掉大小,从而让每个维度的扰动幅度统一为 \(\varepsilon\)。它的作用不是取整、放大或降噪,而是固定攻击步长,使扰动均匀且有方向性。
Q3. 对抗训练目标 \(\min_{\theta}\max_{\delta}\mathcal{L}(f_\theta(x+\delta),y)\) 理解正确的是?
- A.先找最坏扰动再优化模型← 正确答案
- B.先优化模型再找扰动
- C.同时优化模型和扰动
- D.随机生成扰动后训练
答案:A。min-max 中内层 max 先行动:用当前模型找最坏扰动(阿攻出招),外层 min 再用这个扰动优化模型(小武练功),两者交替而非同时。D 选项的随机扰动缺少“最坏”的意义。
Q4. 训练时常用单步 FGSM、评估时用多步 PGD 的原因是?
- A.FGSM 攻击效果比 PGD 更强
- B.训练求效率评估求强度← 正确答案
- C.PGD 无法生成对抗样本
- D.两者在训练中完全等价
答案:B。训练要跑很多轮,每轮都要生成对抗样本,单步攻击能显著节约算力且已能提供有效梯度信号;评估只跑一次,追求的是找出模型真实漏洞,所以用更强的多步 PGD。A、C、D 都与事实相反。
Q5. 标准对抗训练的训练流程包含以下哪些环节?
- A.用当前模型生成对抗样本← 正确答案
- B.混合干净与对抗样本← 正确答案
- C.只修改对抗样本的标签
- D.对混合批次更新模型← 正确答案
答案:ABD。标准 AT 的流程是:用当前模型对每批数据做内层攻击生成对抗样本,把干净样本和对抗样本混合成一个批次,最后计算混合损失并更新参数。对抗样本的标签保持不变,依然是原始正确标签,所以 C 错误。
Q6. 扰动预算 \(\varepsilon\) 设置过大会出现哪些问题?
- A.生成的样本明显失真← 正确答案
- B.模型很难有效学习← 正确答案
- C.鲁棒性未必提升← 正确答案
- D.只需依赖数据增强
答案:ABC。\(\varepsilon\) 过大会让对抗样本超出“人眼难察”的范畴,变得明显失真,而且样本与原始类别差异过大,模型难以从中学到有效防守,鲁棒性未必提升。D 是错误结论,数据增强不能替代对抗训练。
Q7. 下列哪些属于内层最大化(攻击)的关键设置?
- A.攻击迭代的步数← 正确答案
- B.扰动预算 \(\varepsilon\) 大小← 正确答案
- C.投影到球邻域方式← 正确答案
- D.损失曲线可视化
答案:ABC。内层攻击的质量由迭代步数、扰动预算 \(\varepsilon\)、以及每步后如何投影回 \(\varepsilon\) 球约束共同决定。损失曲线可视化只是调试工具,不影响攻击本身,因此 D 不正确。
Q8. 为什么对抗训练可能导致干净准确率下降?
- A.模型参数数量变少
- B.边界外移牺牲部分样本← 正确答案
- C.梯度计算变得更加复杂
- D.训练损失函数失效
答案:B。对抗训练会把决策边界外移,让界内样本对 \(\varepsilon\) 扰动保持鲁棒。原本靠近边界的正常样本可能因此被划到另一侧,导致干净准确率微降。这是“鲁棒-准确权衡”的本质,与参数数量、梯度复杂度无关。
Q9. 对抗训练目标中“内层最大化”由谁执行?
- A.训练时的攻击算法← 正确答案
- B.训练时的优化器
- C.推理阶段的模型
- D.数据标注人员
答案:A。内层最大化是在训练过程中由攻击算法(FGSM、PGD 等)执行的——它们求出使损失最大的扰动。优化器负责外层最小化更新模型参数,推理阶段模型只做预测不生成攻击。
Q10. 关于白盒攻击和黑盒攻击,下列正确的是?
- A.白盒攻击能利用模型梯度← 正确答案
- B.白盒攻击速度一定更慢
- C.黑盒攻击无需任何信息
- D.两者攻击效果完全相同
答案:A。白盒攻击能拿到模型结构和梯度,直接沿梯度方向构造扰动,效率高;黑盒攻击只能靠查询输出或迁移攻击,并非“无需任何信息”,且效果通常弱于白盒。因此 A 正确,其余说法均不成立。