想象一间神秘的考场:阅卷老师是一台不知疲倦的神经网络,批改“猫咪照片识别卷”又快又准。班里有个学生悄悄发现了一个天大的秘密——只要在答卷上轻轻擦掉一小块淡墨,肉眼完全察觉不到,老师居然会把“熊猫”自信地判成“长臂猿”,还给了满分。更邪门的是,这套“涂改手法”换个阅卷老师照样奏效。 这个秘密就是“对抗样本”(adversarial example),那一笔“涂改”叫扰动(perturbation)。怎么知道该往哪儿涂?答案藏在阅卷老师的“批注”里——损失函数的梯度。FGSM(Fast Gradient Sign Method,快速梯度符号法)正是把“批注”读出来、只取方向、轻轻一涂的作弊利器。它简单到只需一行公式,却是整个对抗攻防领域的基石:自动驾驶路牌被“贴纸”骗过、人脸识别被“眼镜框”绕开,背后都有它的影子。 接下来,我们会从数学公式到梯度计算,从定向攻击到模型迁移性,一步步拆解 FGSM,最后学会用它给自己的模型做一次“鲁棒性体检”。

岗位关联

对 AI 从业者而言,FGSM 是理解模型鲁棒性的第一把钥匙——用它能快速生成对抗样本、评估模型防御水平,这是 AI 安全工程师的日常工作,也让算法工程师在设计系统时多一根“攻击者视角”的弦。

目录
  1. 可视化演示
  2. 对抗样本概念
  3. FGSM数学原理
  4. 梯度计算流程
  5. 攻击类型变体
  6. 模型迁移性
  7. 防御策略
  8. 鲁棒性测试实战
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示FGSM梯度符号法扰动原理、epsilon超参数权衡、targeted/non-targeted攻击变体、迁移性与迭代攻击演进,交互式理解对抗样本生成核心技术。

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

FGSM梯度符号法扰动原理 沿损失函数梯度方向添加扰动,使模型损失最大化 取梯度符号乘以epsilon,单步反向传播完成 x_adv = x + ε · sign(∇_x L(θ,x,y)) FGSM是对抗攻击最基础快速的方法。

对抗样本概念

说回那间考场。作弊学生发现,自己只是把“熊猫”照片里某一小格像素的亮度调暗了一丝丝——就像在答卷上擦掉一点墨迹——阅卷老师就尖叫着宣布这是“长臂猿”。更气人的是,老师不是蒙对的,它信心十足地给出了 99.7% 的正确概率。学生恍然大悟:原来机器的“眼睛”和人眼完全不一样。

在深度学习里,这种“人眼看不出区别,模型却认错且自信爆棚”的输入,就叫对抗样本。它有三个标志性特征:第一,扰动小到人眼不可察觉;第二,模型以高置信度输出错误答案;第三,同一个样本常常能骗过多个不同模型,这种性质叫迁移性。

为什么模型这么好骗?因为深度模型学到的决策边界在高维空间中紧贴着训练数据——边界外一点点就是另一个类别的地盘。只要让输入朝“损失增大”的方向挪动一小步,就可能翻越边界。对抗样本不是玄学,而是一个可以精确计算出来的产物:沿着梯度方向移动输入,模型就会一步步滑向错误的深渊。

所以,作弊学生从不瞎涂——他每次都研究阅卷老师的评分标准(损失函数),顺着“扣分最狠”的方向涂改。FGSM 就是那本把“评分标准”翻译成“涂改方向”的作弊手册。

FGSM数学原理

作弊学生要涂改成功,第一步是搞清楚“往哪个方向涂”。他发现阅卷老师批改时会留下淡淡的批注痕迹——这张卷子往右下角改一点点,分数就会暴跌。这个“批注”就是损失函数对输入的梯度:它精确指出了能让模型犯错最快的那条路。

FGSM 的全称是 Fast Gradient Sign Method(快速梯度符号法),它把“批注”浓缩成一个简洁公式:对抗样本等于原始输入加上一小段“顺着批注方向”的涂改。式子里的每一项都对应着作弊流程中的一个动作。

有了这个公式,作弊学生只需两件事:读批注(算一次梯度),擦一笔(叠加 $\epsilon \cdot \mathrm{sign}$)。FGSM 之所以叫“快速”,正是因为从读懂批注到下笔,只需要一次前向和一次反向传播——快到老师都没反应过来。

xadv=x+ϵ⋅sign(∇xJ(θ,x,y))\displaystyle x_{\text{adv}} = x + \epsilon \cdot \mathrm{sign}\left(\nabla_x J(\theta, x, y)\right)
通俗说明:对抗样本 = 原图 + 橡皮擦幅度 ε × 梯度符号方向。"sign"保证我们只照着批注的箭头方向涂,绝不乱用力。
  1. 对抗样本(涂改后的答卷)$x_{\text{adv}}$ 是最终产物,它和原始输入 $x$ 看起来几乎一样,但模型的预测已经被彻底改写。
    xadvx_{\text{adv}}
  2. 原始输入(干净的答卷)$x$ 是模型原本能正确识别的样本,比如一张真实的熊猫照片。
    xx
  3. 扰动预算(橡皮擦的力度上限)$\epsilon$ 是超参数,控制涂改幅度——太大容易被肉眼发现,太小则攻击无效。
    ϵ\epsilon
  4. 符号函数(只认方向不认大小)$\mathrm{sign}(\cdot)$ 把梯度每个分量压成 $+1$ 或 $-1$,丢掉“改多少”,只保留“往哪儿改”。
    sign(∇xJ(θ,x,y))\mathrm{sign}\left(\nabla_x J(\theta, x, y)\right)
  5. 输入梯度(老师的批注)$\nabla_x J(\theta, x, y)$ 是损失对输入 $x$ 的偏导,指出“往哪个方向改输入,模型会错得更离谱”。
    ∇xJ(θ,x,y)\nabla_x J(\theta, x, y)

梯度计算流程

学生好奇:老师是怎么算出“往右下角改会扣分”的?原来阅卷流水线先正着读一遍卷子(前向传播),得到总分(损失值),再从总分倒推回来(反向传播),看答卷上每一笔对分数的影响。这条“从分数倒推笔迹”的路径,就是梯度的来历。

在神经网络里,损失 $J$ 是输入 $x$ 和权重 $\theta$ 共同作用的结果。要想知道“输入该怎么改”,就得从输出层一路向输入层做链式求导——每一步都问同一个问题:如果这一层的小齿轮转了一点,最终损失会变多少?

实际工程中,对 softmax 分类器来说这个梯度可写成简洁的矩阵形式:$\nabla_x J = (\mathbf{p} - \mathbf{y}_{\text{onehot}}) \cdot W^{\top}$。整个攻击过程只做一次前向加一次反向,模型参数 $\theta$ 完全冻结——我们不训练模型,只“调教”输入。这个“一次到位”的特性,正是 FGSM 能大规模批量生成对抗样本的原因。

∇xJ=∑j∂J∂zj⋅∂zj∂x\displaystyle \nabla_x J = \sum_j \frac{\partial J}{\partial z_j} \cdot \frac{\partial z_j}{\partial x}
通俗说明:把网络各层想象成机械齿轮组——先正向转一遍算出分数,再用链式法则倒推,算出“拧哪个螺丝(输入维度)能让分数暴跌”。FGSM 只需要拧一次。
  1. 中间输出(齿轮的传动比)$z_j$ 是样本经过各层加权后的中间结果,它是连接输入 $x$ 与损失 $J$ 的“中间人”。
    zj=∑iwijxi+bj\displaystyle z_j = \sum_i w_{ij} x_i + b_j
  2. 损失对中间输出求导(责任的划分)$\frac{\partial J}{\partial z_j}$ 衡量每个中间输出对最终损失该负多大责任,按 softmax 交叉熵可化简为“预测概率减独热标签”。
    ∂J∂zj=pj−1[y=j]\displaystyle \frac{\partial J}{\partial z_j} = p_j - \mathbf{1}[y = j]
  3. 中间输出对输入求导(齿轮咬合关系)对于线性层,这一项恰是权重矩阵元素 $w_{ij}$——输入改变一单位,中间输出改变多少。
    ∂zj∂xi=wij\displaystyle \frac{\partial z_j}{\partial x_i} = w_{ij}
  4. 链式相乘并求和(逐层回传)把所有层的偏导链式相乘、逐项加总,就得到损失对输入的梯度——也就是那条“批注方向”。
    ∑j∂J∂zj⋅∂zj∂x\displaystyle \sum_j \frac{\partial J}{\partial z_j} \cdot \frac{\partial z_j}{\partial x}

攻击类型变体

有些学生作弊只求“别及格”,涂改随意——只要老师判错就行,这叫非定向攻击。而另一些学生要求精准:必须把“熊猫”改成“长臂猿”,多改一个字都不算,这叫定向攻击。

非定向攻击直接用交叉熵损失 $J(\theta, x, y)$,让真实类别 $y$ 的损失变大,因此沿梯度的正方向加扰动,这就是我们前面看到的公式。而定向攻击要求模型把样本判成指定类别 $y_t$——此时要让“目标类别的损失”变小,方向就得反过来:

除了方向的不同,还有步数的区别。单步 FGSM 追求快,但一步走不准:走多了破坏图像,走少了翻不过边界。迭代式 FGSM(I-FGSM)把总预算 $\epsilon$ 拆成很多小步 $\alpha$,每走一步都重新看一眼批注:

无论哪种变体,本质都是“顺着评分标准下笔”:非定向随手一涂,定向照着目标答案临摹,迭代则是小步多涂、步步校准。

xadv=x−ϵ⋅sign(∇xJ(θ,x,yt))\displaystyle x_{\text{adv}} = x - \epsilon \cdot \mathrm{sign}\left(\nabla_x J(\theta, x, y_t)\right)
通俗说明:迭代攻击就是“涂一笔、看一次批注、再涂一笔”,眼手配合更稳;PGD 是它的强化版,多随机起点寻找更强攻击,通常作为对战训练的标尺。
  1. 小步长(每次只涂一点点)$\alpha$ 通常远小于 $\epsilon$,每一步的移动都很克制,方便随时修正方向。
    α<ϵ\alpha < \epsilon
  2. 迭代更新(涂一笔看一次批注)每步基于当前对抗样本重新计算梯度,相当于每次涂改后都重新确认老师的最新批注。
    xt+α⋅sign(∇xJ(θ,xt,y))x^{t} + \alpha \cdot \mathrm{sign}(\nabla_x J(\theta, x^{t}, y))
  3. 裁剪(不超预算)$\mathrm{clip}_{x,\epsilon}$ 把每一步结果拉回原始样本的 $\epsilon$ 邻域内,防止改动越界暴露行踪。
    clipx,ϵ(⋅)\mathrm{clip}_{x,\epsilon}(\cdot)

模型迁移性

作弊学生惊喜地发现:自己练出来的涂改手法,换到隔壁班的阅卷老师那儿也照样管用。这是因为所有老师都看同一本教材(训练数据)备课,看重的特征大差不差——这就是对抗样本的迁移性。

迁移性指:在模型 A 上生成的对抗样本,往往也能骗过模型 B。不同模型在相似数据上训练,学到的决策边界高度相似,所以对模型 A 致命的扰动方向,对模型 B 来说同样踩在痛处。这直接催生了黑盒攻击:攻击者拿不到目标模型的参数时,可以自己训练一个代理模型,在代理模型上用 FGSM 生成对抗样本,再投喂给目标模型。虽然不知道“目标老师的批注”,但参考“自己老师的批注”也能蒙对大半。

更极端的是通用对抗扰动:一张“万能涂改贴纸”加到任意图片上,都能让模型在多数类别上大面积出错。研究者甚至打印出来贴在路牌上,让自动驾驶模型把“停止”识别成“限速”,这已经不是纸面推演,而是实实在在的物理世界威胁。

这也解释了为什么学校要严格保密“评分标准”——可老师们的阅卷习惯早就被摸透了。对防御者来说,迁移性意味着:即使模型参数没泄露,也不能心存侥幸。

防御策略

学校开始反作弊,从三方面下手:第一,把历年作弊卷当练习题让学生反复做(对抗训练);第二,改进答题卡扫描仪,让涂改痕迹“洗”不进去(输入预处理);第三,定期组织模拟涂改考试(鲁棒性评估)。

对抗训练是目前最有效的防线:在训练时把 FGSM 生成的对抗样本混进训练集,让模型见过“挨了涂改”的样本,学会忽略这类扰动。它相当于给阅卷老师做“脱敏训练”,但代价是干净样本上的准确率往往小幅下降——这就是鲁棒性与准确率之间的权衡。

输入预处理则是在推理前对输入做平滑、压缩、随机重采样等操作,试图把扰动“洗掉”。这类方法实现简单、成本低,但攻击者一旦知道预处理的细节,可以用自适应攻击绕过它。还有一种思路叫防御蒸馏:用“软标签”训练一个更平滑的模型,让梯度的可用信息变模糊,相当于把批注写得歪歪扭扭——可惜 2017 年后已被证明可以绕过。

所以模型鲁棒性没有银弹。就像学校每年都要更新防作弊手段,AI 安全也是“道高一尺,魔高一丈”的军备竞赛,唯一可靠的姿态是持续攻防评估。

鲁棒性测试实战

学校雇了一位“白帽作弊专家”:定期用 FGSM 模拟涂改,检验阅卷老师有没有漏洞。这正是 AI 安全工程师的日常工作——鲁棒性测试,也叫给模型做“体检”。

具体操作分三步:选 ε、批量生成、看指标。ε 是攻击强度的旋钮,从 0 开始慢慢拧大,观察模型准确率的“滑坡曲线”——曲线掉得越早、越陡,模型越脆弱。工程上通常对验证集全量批量生成对抗样本,统计攻击前后的准确率对比:干净准确率(clean accuracy)与对抗准确率(adversarial accuracy)。两者差距越大,说明模型“外强中干”。

实战中有几条经验:不要只看单一 ε,要扫描一个范围(如 0.01、0.05、0.1、0.3、0.5);除了非定向攻击,还要搭配定向攻击测最坏情况;报告里注明模型结构、数据集、ε 和攻击变体,保证可复现。用 FGSM 批量测试的成本很低——一次前向加一次反向就能生成一批样本,非常适合做 CI 流水线里的“鲁棒性门禁”。

一场模拟涂改考试下来,哪个老师(模型)容易被骗一目了然。测试报告就是模型的体检单:上了线,也要定期复查。

AI 应用场景

人脸识别系统上线前的鲁棒性测试

阶段:模型评估与安全测试

解决的问题:人脸识别系统如果不测对抗鲁棒性,攻击者可以戴一副印有微小花纹的眼镜框骗过系统,刷别人的脸。传统测试只看干净样本准确率,掩盖了这类漏洞。用 FGSM 在公开人脸数据集上批量生成对抗样本,能快速量化系统在欺骗攻击下的错误率。

具体案例:某安防公司在部署门禁识别前,用 FGSM(ε=0.05)对内部测试集的 1 万张人脸照片叠加扰动,发现识别准确率从 99.2% 掉到 87%,于是补充对抗训练后才重新上线。

自动驾驶路牌识别模型的压力测试

阶段:感知模型鲁棒性评估

解决的问题:自动驾驶的“停止”路牌如果被贴上一小块对抗贴纸,模型可能识别成“限速 60”,后果不堪设想。用 FGSM 模拟数字世界的极端干扰,帮助感知团队提前发现薄弱类别并补强。

具体案例:感知团队在仿真环境里对路牌识别模型做 FGSM 迭代攻击,暴露出小目标类别(行人、施工标志)对扰动最敏感,随后对困难类别做数据增强并加入对抗训练。

内容审核模型的攻防演练

阶段:红队对抗测试

解决的问题:不良内容加上微小扰动可能绕过审核模型。安全团队用定向 FGSM 把“违规图片”伪装成“安全图片”,验证审核模型在最坏情况下的漏判率,帮助产品团队守住内容安全底线。

具体案例:某内容平台定期用 targeted FGSM 生成对抗测试集(指定模型判为“安全”),追踪审核模型的漏判率变化,并将其作为模型迭代的准入指标之一。

Python 演示

python54 行
import numpy as np def make_data(n=800, seed=0):    """生成两类高斯分布数据,模拟二分类任务。"""    rng = np.random.default_rng(seed)    x0 = rng.normal([1.0, 1.0], 0.9, size=(n // 2, 2))    x1 = rng.normal([4.0, 4.0], 1.1, size=(n - n // 2, 2))    X = np.vstack([x0, x1])    y = np.array([0] * (n // 2) + [1] * (n - n // 2))    return X, y def softmax(z):    e = np.exp(z - z.max(axis=1, keepdims=True))    return e / e.sum(axis=1, keepdims=True) def train(X, y, steps=500, lr=0.2):    """训练一个 softmax 线性分类器,返回权重 W 和偏置 b。"""    n, d = X.shape    W = np.zeros((d, 2))    b = np.zeros(2)    for _ in range(steps):        p = softmax(X @ W + b)        t = np.zeros((n, 2))        t[np.arange(n), y] = 1.0        W -= lr * (X.T @ (p - t)) / n        b -= lr * (p - t).mean(axis=0)    return W, b def fgsm_grad(W, b, X, y):    """计算交叉熵损失对输入 X 的梯度。"""    p = softmax(X @ W + b)    t = np.zeros((len(X), 2))    t[np.arange(len(X)), y] = 1.0    return (p - t) @ W.T def fgsm_attack(W, b, X, y, eps=0.3):    """FGSM 批量生成对抗样本:x_adv = x + eps * sign(grad)。"""    grad = fgsm_grad(W, b, X, y)    return X + eps * np.sign(grad) def accuracy(W, b, X, y):    pred = softmax(X @ W + b).argmax(axis=1)    return float((pred == y).mean()) def main():    X, y = make_data()    W, b = train(X, y)    print("clean acc: %.4f" % accuracy(W, b, X, y))    for eps in [0.05, 0.1, 0.2, 0.4, 0.8]:        X_adv = fgsm_attack(W, b, X, y, eps)        print("eps=%.2f  adv acc: %.4f" % (eps, accuracy(W, b, X_adv, y))) if __name__ == "__main__":    main()
目的:训练一个简单的 softmax 分类器,再分别用不同 ε 执行 FGSM 攻击,观察模型准确率随攻击强度增大而滑坡的过程。
  1. t[np.arange(n), y] = 1.0把整数标签转成“独热编码”:只有真实类别那一列为 1,其余为 0。
  2. W -= lr * (X.T @ (p - t)) / n梯度下降训练:让模型先学会“正常阅卷”,这是后面攻击的靶子。
  3. return (p - t) @ W.T核心中的核心:交叉熵损失对输入 X 的梯度,即“老师的批注方向”。
  4. return X + eps * np.sign(grad)FGSM 公式落地:原样本沿梯度符号方向挪动 ε,生成对抗样本。
  5. (pred == y).mean()计算准确率,用来评估“涂改前后”模型判断的差距。

常见误区

误区“对抗样本不就是往图片上撒一点随机噪声吗?模型只要鲁棒一点就不会上当。”

正解对抗扰动完全不是随机噪声。FGSM 的扰动是沿着损失函数梯度符号方向精心设计的——它像作弊学生专挑评分标准里最薄弱的地方下手。随机噪声方向杂乱、互相抵消,而梯度方向是“最省力”的攻击路径,一点点扰动就能跨越决策边界。二者有本质区别:噪声靠量变,对抗样本靠定向打击。

为何常见:视觉上对抗样本与加噪图“看起来都差不多”,加上许多科普图把扰动画成马赛克噪声样式,容易让人混淆。

误区“为了让对抗样本不被发现,ε 取 0.01 甚至更小最稳妥。”

正解ε 太小,扰动不足以让样本跨越决策边界,攻击就失效了——就像涂改的笔迹太轻,阅卷老师根本看不出变化。ε 要取到刚好能越过边界的“临界值”:既能骗过模型,又不被人眼察觉。工程上通常扫描一段范围观察精度曲线,而不是拍脑袋定一个极小值。

为何常见:初学者把“隐蔽性”当成唯一目标,忽略了攻击的根本目的是改变模型预测——隐蔽是约束,成功才是目标。

误区“既然算出了梯度,直接 x + ε·∇J 攻击岂不是更狠?用 sign 丢掉梯度大小太浪费了。”

正解直接加梯度有一个致命问题:不同样本的梯度模长差异巨大,导致部分样本扰动过大而暴露,另一些扰动不足而无效。sign 把每个分量归一化为 ±1,使总扰动被严格限制在 ε 的 L∞ 范数球内——这正是 FGSM 名字里“符号法”的意义:只取方向,保证每次涂改的幅度都同样“隐蔽而致命”。

为何常见:人直觉上认为“信息越多越好”,没意识到符号函数其实是在做“归一化、控预算”,让攻击在不同样本上同样有效。

误区“我又拿不到别人模型的权重,FGSM 在我这儿根本没用。”

正解由于决策边界相似性,在代理模型上生成的对抗样本往往也能欺骗目标模型,这就是迁移性。攻击者可以自己训练一个替代模型,或直接选用开源模型,用 FGSM 生成对抗样本,再对目标系统做黑盒攻击,命中率依然可观。连“万能贴纸”这类通用扰动都可以批量复用到任意图片上。

为何常见:教材大多先讲白盒场景下的公式推导,容易让人误以为对抗攻击必须依赖目标模型的内部参数。

误区“模型用对抗样本训练过,就再也不会被欺骗了,完美免疫。”

正解对抗训练能显著提升对已知攻击(如 FGSM)的鲁棒性,但攻防是军备竞赛:更强的攻击(PGD、AutoAttack)或更大的 ε 会让模型再次失效。对抗训练还常常降低干净样本上的准确率,存在“鲁棒性—准确率”权衡。正确做法是把鲁棒性测试纳入持续集成,定期重新评估。

为何常见:“打了疫苗就不会得病”的类比深入人心,但模型安全没有终点,攻击手段总在更新。

面试题

Q1. FGSM 中符号函数 sign 的核心作用是什么?

单选题 · easy

  • A.放大梯度值并增强攻击效果
  • B.将梯度转为 ±1 方向信号← 正确答案
  • C.计算损失函数的二阶导数
  • D.对输入像素做归一化处理

答案:B。sign 把梯度的每个分量压缩成 +1 或 -1,只保留“往哪改”的方向信息,就像作弊学生只看老师批注的箭头,不纠结划线粗细。A 的理解恰好相反,符号函数丢掉了梯度大小;C 和 D 与符号函数无关。

Q2. FGSM 生成的对抗样本必须具备什么特征?

单选题 · easy

  • A.扰动随机且完全不可见
  • B.扰动极小且模型误判← 正确答案
  • C.样本尺寸大幅压缩
  • D.模型权重全部公开

答案:B。对抗样本要“骗过模型”且“不被人眼发现”,所以要求扰动小、预测错。A 错在“随机”二字,FGSM 的扰动是沿梯度的定向扰动;C 是图像压缩不是对抗;D 说的是攻击条件,不是样本本身的特征。

Q3. 在 FGSM 公式 x_adv = x + ε·sign(∇xJ) 中,ε 表示什么?

单选题 · mid

  • A.模型训练的学习率
  • B.损失函数的计算轮数
  • C.对抗扰动的幅度上限← 正确答案
  • D.输入图像的像素均值

答案:C。ε 是扰动预算,同时决定攻击强度与暴露风险,好比作弊学生的橡皮擦使用限度。A 是训练超参数,与攻击无关;B 与 FGSM 的单步特性矛盾;D 是图像统计量。

Q4. FGSM 通常被归为以下哪一类攻击?

单选题 · mid

  • A.完全黑盒攻击
  • B.物理世界攻击
  • C.白盒梯度攻击← 正确答案
  • D.数据投毒攻击

答案:C。FGSM 需要利用损失对输入的梯度,必须知道模型结构和参数,属于白盒攻击。但它生成的样本可以迁移到别的模型,从而用于黑盒场景——这是“生成方式”与“使用场景”的区别,答题时要分清。

Q5. 用 FGSM 生成对抗样本,通常需要以下哪些信息?

多选题 · mid

  • A.模型的损失函数定义← 正确答案
  • B.损失对输入的梯度← 正确答案
  • C.原始输入样本本身← 正确答案
  • D.模型的私有训练数据

答案:ABC。FGSM 需要用损失函数算出梯度,再把梯度符号叠加到原始输入上,A、B、C 缺一不可。训练数据属于额外信息,FGSM 并不需要——对抗扰动完全由当前样本和模型参数决定。

Q6. 与非定向攻击相比,FGSM 定向攻击在公式上最关键的差异是什么?

单选题 · hard

  • A.反向传播改为前向传播
  • B.替换目标类并调转梯度方向← 正确答案
  • C.扰动幅度必须取负值
  • D.不再需要损失函数参与

答案:B。定向攻击把公式中的真实类别 y 换成目标类别 y_t,并把加号变成减号:让目标类别的损失变小,模型才更可能判成指定类。A、C、D 都是对公式的误解,减号针对的是梯度方向而非扰动幅度本身。

Q7. 关于对抗样本迁移性的说法,哪些是正确的?

多选题 · mid

  • A.对抗样本常可骗过多个模型← 正确答案
  • B.攻击必须有目标模型的梯度
  • C.可在代理模型上生成再使用← 正确答案
  • D.只适用于人脸识别场景

答案:AC。迁移性指在模型 A 上生成的对抗样本对模型 B 也有效,因此 A、C 正确。B 恰恰是迁移性要解决的痛点——黑盒攻击不需要目标模型梯度;D 完全以偏概全,对抗样本适用于图像、语音、文本等各类模型。

Q8. “对抗训练”防御手段的核心做法是什么?

单选题 · easy

  • A.提高模型的批大小和显存
  • B.把对抗样本混入训练数据← 正确答案
  • C.删除所有敏感的数据特征
  • D.降低模型参数的精度位数

答案:B。对抗训练在训练集中加入对抗样本,让模型“见过世面”,相当于用历年作弊卷当练习题,让阅卷老师对涂改手法脱敏。A、C、D 都与对抗训练的核心思想无关。

Q9. 与迭代式 PGD 攻击相比,FGSM 最突出的特点是什么?

单选题 · hard

  • A.单步生成、速度快但力度有限← 正确答案
  • B.多步迭代、速度慢但更稳
  • C.完全不依赖损失函数梯度
  • D.只能应用于图像分类模型

答案:A。FGSM 只用一次梯度计算完成攻击,因此叫“快速”,但单步扰动容易“走过头”或“不到位”;PGD 把 ε 拆成多小步迭代、随机重启,效果更强但更慢。C、D 都是明显错误,FGSM 依赖梯度且可用于多种模型。

Q10. 以下关于 FGSM 工程实践的描述,正确的是?

多选题 · extreme

  • A.扫描多个ε观察精度下降曲线← 正确答案
  • B.固定ε为极小值即可保证攻破
  • C.批量生成对抗样本评估鲁棒性← 正确答案
  • D.随机方向扰动效果优于梯度方向

答案:AC。工程上应扫描多个 ε 观察模型准确率的滑坡曲线,并批量生成对抗样本统计攻击成功率,故 A、C 正确。固定极小 ε 常因扰动不足而失效(B 错);梯度方向的定向攻击效率远高于随机方向(D 错),这正是 FGSM 的价值所在。