想象一个安检员小安,它经过大量训练,能准确识别行李中的猫和狗玩偶。某天,攻击者在猫玩偶上贴了一张几乎看不见的“透明贴纸”,小安却一口咬定那是狗。贴纸没有改变人类眼中的猫,却精准踩中了小安判断的“敏感点”。这张透明贴纸,就是对抗样本里的“对抗扰动”;小安面对伪装仍能保持正确识别的能力,就是模型鲁棒性。本文以这个安检员的视角,拆解对抗样本如何生成(FGSM、PGD)、攻击如何分类、鲁棒性测试方案如何设计,以及怎样通过对抗训练等防御手段给保安“补课”。
对 AI 从业者来说,掌握对抗样本与鲁棒性测试,等于学会给模型做“安全体检”,能提前发现上线后被攻击的漏洞。
可视化演示
动态演示对抗样本与模型鲁棒性测试的核心机制,通过源头/管道/节点/终端四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
对抗样本与模型鲁棒性测试:对抗样本 对抗样本的概念与威胁模型分类 FGSM快速梯度符号法攻击原理 核心机制可视化 对抗样本与模型鲁棒性测试整体架构与关键组件
1. 对抗样本入门
安检员小安平时看猫狗照片准确率 99%,直到有人拿着一张猫的照片,贴了一层几乎看不见的纹理后,小安在屏幕上果断打出“狗”。这层纹理没有让照片变模糊,也没有改变人类看到的轮廓,它只是把像素值往模型最敏感的方向推了一点点。这个被精心调整过的输入,就是对抗样本。
从数学上看,对抗样本不是“另一张图”,而是原图加一个很小的扰动向量 δ。扰动要足够小,通常限制在某个 ε 的球内,这样人眼看不出区别;但模型 f 在扰动后的输入 x+δ 上,输出却不再是原来的标签 y。也就是说,对抗样本要满足两个矛盾条件:人眼觉得没变,模型觉得变天。
生成对抗样本的一般思路是:在约束 ‖δ‖p≤ε 的条件下,让模型对 x+δ 的损失尽可能大。p 常用 1、2、∞,分别对应不同“贴纸规模”的度量。ε 越小,扰动越隐蔽,但攻击难度也越大;ε 越大,越容易被看出来,但更容易骗过模型。
所以,对抗样本不是把猫 P 成狗,而是在猫身上“擦一层观众看不见、安检机却高度敏感的气味”。理解这一点,就理解了整座大楼的地基。
- 扰动向量 δ待求的对抗扰动,也是要加到原始图片上的“透明贴纸”。
- 约束条件扰动的大小不能超过 ε,确保改动人眼难以察觉。
- 最大化损失选择让模型在错误答案上损失最大的方向,相当于精准刺激小安的“误判点”。
2. 模型鲁棒性
小安平时考试成绩优秀,但考试一换“贴纸题型”就崩。鲁棒性就是小安在被攻击者蓄意刁难时,仍能稳定识别的能力。一个鲁棒的模型,在输入附近的一个小邻域内,预测结果不会因为微小扰动而突然翻盘。
为了量化这种稳定性,我们给鲁棒性定义威胁模型:攻击者知道什么、能改什么、目标是什么。白盒攻击假设攻击者能看到模型结构和梯度,黑盒攻击只能查询输出。威胁模型不同,测试方案和攻击难度都不同。
工程上最常用的鲁棒性指标是鲁棒精度:对测试集的每个样本,先用攻击算法生成对抗样本,再统计模型在这些对抗样本上的正确率。它比普通准确率更贴近安全场景。
如果小安对透明贴纸毫无抵抗力,那它的“日常准确率”再高也不适合面对恶意环境。鲁棒性指标就是给模型出的安全考卷。
- 求和下标遍历测试集中的 N 个样本。
- 指示函数括号内“模型预测等于真实标签”成立时记 1,否则记 0。
- 鲁棒精度所有对抗样本上的平均正确率,就是小安在“贴纸考试”中的得分。
3. FGSM 攻击
FGSM(快速梯度符号法)的思路很直接:既然小安对某些纹理特别敏感,那就问模型“往哪个方向改最容易被带偏”。这个方向就是损失对输入 x 的梯度;FGSM 把梯度取符号,再乘上扰动强度 ε,一次性把图片往那个方向推。
它只走一步,所以计算极快,是安全测试团队用来快速摸底的工具。但正因为只走一步,它假设损失函数在局部近似线性;如果真实决策边界弯曲明显,单步攻击往往不如多步攻击强。
FGSM 公式中,∇xJ 是损失对输入像素的梯度,sign 负责把梯度变成 +1/-1 的方向,ε 控制整体扰动幅度。结果就是:所有像素都往让模型犯错的同方向移动相同大小的值。
FGSM 就像给猫快速涂一层“狗味香水”,可能一眼就能骗过小安,也可能骗不过。它跑得快,常被用来做鲁棒性测试的第一轮扫描。
- 原始输入 x待攻击的干净图片。
- 梯度方向计算损失对图片的梯度,找到让模型更糊涂的方向。
- 符号函数取每个分量的正负号,变成统一大小的方向信号。
- 扰动强度乘以 ε,控制贴纸的明显程度。
4. PGD 攻击
如果 FGSM 是“涂一次香水”,PGD 就是“反复试妆”:每次涂一点点,看看小安的反应,再根据新的梯度继续调整,最后把效果最好的那套妆容拿出来。它本质上是多步 FGSM。
多步迭代容易让扰动跑出允许范围,所以 PGD 每走一步都要“投影”回以原始样本为中心的 ε 球内。这就像给化妆师规定:怎么改都行,但总改动量不能超过这一小盒颜料。投影操作保证扰动始终满足约束。
PGD 通常从原始样本附近的随机点开始,按步长 α 沿梯度符号方向走,每步用 clip 把样本拉回 ε 邻域。多次迭代后,它往往能比 FGSM 找到更强的对抗样本,因此常被当作“标准攻击基准”。
对小安来说,FGSM 是急吼吼的骗子,PGD 则是耐心的伪装高手。安全测试如果想摸清模型的下限,PGD 是不可或缺的“压力测试”。
- 迭代步数 t攻击过程中第 t 次修改,一共做多次。
- 步长 α每次在梯度方向上挪动的幅度。
- 投影算子把越界的样本拉回以 x 为中心、半径为 ε 的可行域。
- 符号梯度和 FGSM 一样,用梯度的符号作为移动方向。
5. 攻击类型分类
同一个世界,不同的骗子。有人只想让小安出错:猫说成狗,狗说成猫,错得离谱就行,这叫无目标攻击。有人却有个明确剧本:非要把猫说成“拉布拉多”,这叫有目标攻击。后者通常更难,因为要同时避开正确的类别并逼近指定类别。
攻击者掌握的信息也不同。白盒攻击手里有模型结构和梯度,相当于能看到小安的训练手册;黑盒攻击只能拿样本去试,再根据输出猜测规律,类似于对着安检机疯狂递行李摸清规则。黑盒攻击可利用替代模型的对抗样本迁移到目标模型,所以不能因为没梯度就放松警惕。
攻击的物理形态也有区别:数字攻击直接在像素矩阵上加减,物理攻击要把对抗图案打印成贴纸、眼镜框,贴在真实世界物体上。物理攻击要考虑光照、角度和打印误差,但一旦成功,威胁更贴近现实。常见防御策略包括对抗训练、输入去噪、随机化等,它们分别从数据、输入、模型结构三个层面提高门槛。
测试时,安全团队通常按威胁模型分组:白盒/黑盒、有目标/无目标、数字/物理。每一种“骗子类型”都对应一张考卷,只有全部通过,小安才算得上可靠。
- 目标标签攻击者指定要骗成的类别。
- 最小化目标损失让模型对指定类别的损失降到最低,从而提高该类别概率。
- 约束条件仍然限制扰动大小,避免被人眼发现。
6. 鲁棒性测试方案
评估鲁棒性不是让模型做一道题,而是出一套完整的“心理测试题”。测试方案要从威胁模型出发,明确攻击算法(FGSM 还是 PGD)、扰动强度 ε、迭代次数、攻击是否有目标,以及评估指标。这样不同团队之间才能横向比较。
测试集要混合干净样本和对抗样本,并覆盖不同难度。最简单的流程是:先在干净集上测出基准精度,再用 FGSM 做快速扫描,接着用 PGD 做深度攻击,最后统计攻击成功率和样本级鲁棒性。
攻击成功率(ASR)是安全测试的核心指标:生成多少对抗样本能让模型犯错。它和鲁棒精度互补,鲁棒精度看正确率,ASR 看被攻破的比例。报告里还要记录攻击参数、扰动大小和失败案例,方便研发团队定位问题。
给小安出考卷的目的不是让它考满分,而是提前发现它会被哪种“贴纸”骗。测出的 ASR 越高,越应该在模型上线前进行防御加固。
- 样本总数 N测试的对抗样本总数。
- 指示函数只要预测错误就记 1。
- 求和取平均把所有翻车样本加起来除以总数,得到攻击成功率。
7. 对抗防御方法
知道了骗术,就能教小安反骗。最朴素也最常用的防御是“对抗训练”:在训练时把对抗样本也塞进题海,让小安见过这些贴着透明贴纸的猫狗,慢慢学会忽略贴纸。对抗训练相当于给保安上“骗子脸谱识别课”。
对抗训练的目标是让模型在干净样本和对抗样本上都表现好。训练的最小化目标由两部分组成:干净损失 + 对抗损失。λ 控制防御强度,太大的 λ 可能牺牲正常样本的精度,太小又防不住攻击,需要调参。
除了对抗训练,还有输入预处理(如降噪、压缩、随机化)、改进模型结构和使用更稳健的优化方法。输入预处理是把“贴纸”先擦掉一部分再给模型看;改进结构则是让模型对局部扰动天然迟钝。防御没有银弹,通常要组合使用,并且要用 PGD 等强攻击反复验证。
防御做完不能直接宣布胜利,还要用 PGD 等更强攻击重新测试。小安只有通过一轮轮“道高一尺、魔高一丈”的检验,才能真正站上安全岗。
- 模型参数 θ要训练优化的模型权重。
- 干净样本损失第一项,衡量在正常输入上的表现。
- 对抗样本损失第二项,衡量在对抗样本上的表现。
- 平衡系数 λ控制防御强度。
AI 应用场景
场景一:安全团队视觉模型红队测试
阶段:模型测试与安全评估
解决的问题:电商平台用图像审核模型检测违禁品,传统测试只看正常样本准确率,无法发现针对审核的漏网之鱼。用 FGSM/PGD 构造对抗样本,模拟攻击者给商品图片加不可察觉噪声,可以提前找出漏洞。
具体案例:某安全团队对图像分类系统做红队测试,用 PGD 对 1000 张测试图生成对抗样本,发现攻击成功率 68%,部分正常商品图被误判成违禁品。测试报告直接推动模型重新训练和上线前加固。
场景二:智能门禁鲁棒性验收
阶段:上线前鲁棒性验收
解决的问题:人脸识别闸机容易被“对抗眼镜”绕过,传统准确率指标无法反映这种攻击。通过白盒/黑盒对抗样本生成,评估系统在真实攻击下的表现。
具体案例:测试团队对人脸识别模型生成眼镜框图案的物理对抗样本,在闸机前实测发现系统把员工误判为陌生人。鲁棒性测试报告最终成为该闸机是否允许上线的关键依据。
场景三:自动驾驶感知模型防御效果验证
阶段:防御策略评估
解决的问题:自动驾驶感知模型在路牌上被贴小贴纸就可能误判,需要验证对抗训练等防御是否真的有效。
具体案例:算法团队先用 PGD 攻击评估,发现“STOP”标志识别准确率从 98% 掉到 35%;随后加入对抗训练重新评测,鲁棒精度提升到 82%,并输出前后对比报告。
Python 演示
import numpy as np rng = np.random.default_rng(42) def sigmoid(z): return 1.0 / (1.0 + np.exp(-z)) def train(X, y, steps=300, lr=0.5): w = np.zeros(X.shape[1]) b = 0.0 for _ in range(steps): p = sigmoid(X @ w + b) grad_w = (X.T @ (p - y)) / len(y) grad_b = (p - y).mean() w -= lr * grad_w b -= lr * grad_b return w, b def predict(X, w, b): return (sigmoid(X @ w + b) >= 0.5).astype(int) def accuracy(X, y, w, b): return (predict(X, w, b) == y).mean() def fgsm(x, y, w, b, eps=0.2): p = sigmoid(x @ w + b) grad = (p - y) * w return x + eps * np.sign(grad) def pgd(x, y, w, b, eps=0.2, alpha=0.05, iters=10): x_adv = x + rng.uniform(-eps, eps, size=x.shape) for _ in range(iters): p = sigmoid(x_adv @ w + b) grad = (p - y) * w x_adv = x_adv + alpha * np.sign(grad) x_adv = np.clip(x_adv, x - eps, x + eps) x_adv = np.clip(x_adv, -1.0, 1.0) return x_adv def attack_accuracy(X, y, w, b, attack, **kwargs): adv = np.array([attack(x, y[i], w, b, **kwargs) for i, x in enumerate(X)]) return accuracy(adv, y, w, b) def main(): cat = rng.normal([-0.6, 0.6], 0.3, size=(60, 2)) dog = rng.normal([0.6, -0.6], 0.3, size=(60, 2)) X = np.vstack([cat, dog]) y = np.concatenate([np.zeros(60), np.ones(60)]).astype(int) w, b = train(X, y) print("clean acc =", round(accuracy(X, y, w, b), 3)) print("FGSM acc =", round(attack_accuracy(X, y, w, b, fgsm, eps=0.2), 3)) print("PGD acc =", round(attack_accuracy(X, y, w, b, pgd, eps=0.2, alpha=0.05, iters=10), 3)) if __name__ == "__main__": main()
grad = (p - y) * w对二分类逻辑回归,损失对输入的梯度正比于预测偏差乘权重,相当于找出小安最敏感的改动方向。return x + eps * np.sign(grad)把梯度变成方向,乘以 ε 后一次性加到原图,完成 FGSM 单步攻击。x_adv = x + rng.uniform(-eps, eps, size=x.shape)PGD 从随机起点开始,让迭代搜索不局限于单一路径。x_adv = np.clip(x_adv, x - eps, x + eps)每步把扰动拉回 ε 邻域,这是 PGD 区别于普通多步梯度下降的关键。return accuracy(adv, y, w, b)统计对抗样本上的正确率,得到模型鲁棒性得分。
常见误区
误区我以为对抗样本就是把图片涂花、加噪点,图片肯定看起来很奇怪,所以只要人看不出问题就不会被攻击。
正解对抗扰动的 ε 通常很小,人眼几乎无法察觉,但模型会在局部邻域内犯错。它更像一张透明贴纸,人不刻意看根本发现不了,安检机却因敏感纹理而误判。
为何常见:很多教程为了展示效果会把扰动放大,导致初学者误以为对抗样本必须可见。
误区FGSM 和 PGD 都用梯度符号,PGD 多迭代几次而已,实际攻击能力差别不大。
正解FGSM 是沿着梯度方向一步跨出去,依赖局部线性假设;PGD 是多步小步迭代并投影回扰动范围,能逼近更强的局部最优攻击。在弯曲的决策边界上,两者的攻击成功率可以相差很大。
为何常见:两者公式长得像,容易被忽略“投影”和“迭代”这两个核心差异。
误区模型在测试集上准确率 99%,说明它已经很稳定,应该不怕对抗样本。
正解准确率衡量自然数据上的平均表现,鲁棒性衡量最坏情况或局部扰动下的稳定性。高准确率模型的决策边界可能紧贴训练数据,加入微小扰动后仍然会翻车。
为何常见:日常评测几乎都用自然数据,人们容易把“平均表现”错当成“安全底线”。
误区只要用对抗样本训练过模型,以后所有攻击都伤不到它了。
正解对抗训练通常只对训练时用过的攻击方式有效,面对更强的 PGD、可迁移黑盒攻击或新攻击形态仍可能失败,甚至出现“梯度掩蔽”这种假防御。
为何常见:防御效果总在固定攻击下评估,换一种攻击就露馅,容易让人高估安全性。
误区黑盒攻击拿不到模型内部权重和梯度,因此黑盒模型是安全的,攻击者无从下手。
正解黑盒攻击可以利用替代模型生成可迁移对抗样本,也可以通过多次查询输出估算梯度。你看不到安检机内部参数,但通过不断试行李也能摸清它的盲区。
为何常见:很多人从 FGSM、PGD 的梯度公式出发,想当然认为没梯度就没法做攻击。
面试题
Q1. 什么是对抗样本?
- A.人为注入程序的计算机病毒
- B.添加微小扰动骗过模型的输入← 正确答案
- C.像素被彻底毁坏的模糊图片
- D.用来训练模型的标准数据集
答案:B。对抗样本在原始输入上加上人眼难以察觉的微小扰动,使模型预测出错。它并不是病毒,也不是正常数据集,更不是毁坏的图片。
Q2. FGSM 中 sign 函数的作用是什么?
- A.将梯度压缩成方向信号← 正确答案
- B.放大梯度数值信息
- C.减小模型损失的数值
- D.统计参数的梯度大小
答案:A。FGSM 只需要知道往哪个方向扰动,sign 把每个梯度分量的数值变成 +1 或 -1,从而生成统一幅度的扰动方向。
Q3. 鲁棒精度度量的是什么?
- A.普通干净样本上的准确率
- B.对抗攻击下的分类准确率← 正确答案
- C.模型推理速度的快慢
- D.模型参数规模的大小
答案:B。鲁棒精度先为样本生成对抗扰动,再统计模型在这些对抗样本上的正确率,反映模型面对攻击时的稳定性。
Q4. PGD 与 FGSM 的核心区别是什么?
- A.PGD 使用多次小步迭代← 正确答案
- B.PGD 无需计算任何梯度
- C.PGD 直接修改训练标签
- D.PGD 只能在白盒中使用
答案:A。PGD 迭代执行多次小步梯度攻击,并把结果投影回允许扰动范围,因此通常比单步 FGSM 更强,但它依然需要梯度,也可在黑盒迁移场景下使用。
Q5. 以下哪些属于对抗防御方法?
- A.对抗训练← 正确答案
- B.输入预处理← 正确答案
- C.增大模型参数量
- D.增加训练集标签
答案:AB。对抗训练在训练数据中加入对抗样本,输入预处理通过降噪、压缩等方式削弱扰动,二者都是常见防御。只是增加参数量或标签不能直接提升对抗鲁棒性。
Q6. 无目标和靶向攻击的区别是什么?
- A.无目标只求分类出错← 正确答案
- B.靶向攻击指定错误类别
- C.无目标攻击无需扰动
- D.两者在效果上无差别
答案:A。无目标攻击只要让模型预测错就行,靶向攻击还要进一步指定一个特定错误类别。两者都依赖扰动,区别在于攻击目标是否明确。
Q7. 黑盒攻击可用哪些手段?
- A.用替代模型生成对抗样本← 正确答案
- B.查询输出并估计梯度← 正确答案
- C.直接读取模型内部权重
- D.随机猜测全部模型参数
答案:AB。黑盒攻击可通过替代模型的对抗样本迁移到目标模型,也可通过查询输出近似估计梯度。直接读取权重属于白盒攻击,随机猜测参数不是有效方法。
Q8. 为什么高准确率模型也可能鲁棒性差?
- A.决策边界紧贴数据流形← 正确答案
- B.模型参数过多导致过拟合
- C.训练数据总是含有噪声
- D.鲁棒性与准确率必然反比
答案:A。高准确率模型的决策边界可能正好贴着训练数据,只要输入往边界外移动一点点,就会被误判。准确率看平均表现,鲁棒性看邻域稳定性,二者并不保证同步。
Q9. 评估鲁棒性时测试方案应包含哪些要素?
- A.多种攻击强度和迭代次数← 正确答案
- B.干净样本与对抗样本对照← 正确答案
- C.只采用训练集样本评估
- D.报告攻击成功率与迁移性← 正确答案
答案:ABD。鲁棒性测试需要覆盖不同攻击强度、迭代次数、干净与对抗对照,并报告 ASR 和迁移性。只用训练集评估会把安全测试变成记忆测试,无法反映泛化能力。
Q10. 梯度掩蔽的问题在于?
- A.防御依赖不可靠的梯度← 正确答案
- B.模型训练时无法反向传播
- C.可以完全消除对抗样本
- D.模型正常精度显著下降
答案:A。梯度掩蔽是一种假防御,模型在攻击目标上的梯度不可靠,让白盒攻击失效,但攻击者改用替代模型或可迁移攻击就能绕过。它并不等于模型真正鲁棒。