对抗样本与防御
本页介绍深度学习最棘手的安全隐患——对抗样本(Adversarial Examples):在人眼完全看不出区别的扰动下,深度模型会给出荒谬的预测。它是卷积神经网络 CNN等视觉模型部署到自动驾驶、人脸支付、医疗诊断等高风险场景时必须面对的安全课题,也是连接模型评估与 AI 安全研究的重要分支。
对抗样本就像一张视觉魔咒——给熊猫照片加上人眼不可见的细微噪点,CNN 就把它认成长臂猿,而且信心满满。核心机理在于:
-
决策边界极其脆弱:CNN 的决策函数在高维输入空间中像一张薄纸。输入空间有几百万个像素维度,只要沿”梯度方向”轻轻推一小步(每个像素改变 1/255 的亮度),就能越过决策边界,跨到另一类。
梯度(Gradient) 是什么?梯度是一个向量,指向函数值上升最快的方向,长度等于上升速率。训练神经网络时,我们用梯度下降逐步调低参数;生成对抗样本时则反过来——沿输入方向的梯度往上推,让损失函数(衡量预测误差的函数)变大。
-
对抗扰动 = 逆向梯度:训练时我们沿梯度 下降 方向更新参数以减小损失;生成对抗样本时则沿 输入 的梯度 上升 方向加一小步扰动,让损失 增大——模型就越发”看走眼”。这就是 FGSM(快速梯度符号法,Fast Gradient Sign Method)的全部数学。
-
跨模型可迁移:在模型 A 上生成的对抗样本,往往也能骗过模型 B——因为不同模型学到的决策边界在局部高度重合。这意味着攻击者不必知道目标模型的细节,黑盒攻击即可奏效。
白盒(White-box)vs. 黑盒(Black-box):白盒攻击指攻击者完全掌握目标模型的结构与权重参数;黑盒攻击指攻击者只能向模型发送输入、观察输出,对内部一无所知。可迁移性让黑盒攻击成为现实。
直觉上理解:CNN 对图像的理解与人类不同。人看的是”整体语义”(毛茸茸、黑白、圆脸 → 熊猫),CNN 看的是”像素统计模式”。对抗扰动恰恰操纵了那些人类视而不见、但 CNN 高度敏感的统计模式。
Ilyas et al.(2019)从理论角度解释了这一现象:自然数据中同时存在”鲁棒特征”(robust features,人类感知依赖的、对抗扰动难以颠覆的语义特征)和”非鲁棒特征”(non-robust features,模型为追求训练精度而利用的脆弱统计模式)。对抗样本之所以有效,正是因为它精准操纵了非鲁棒特征。这不是训练 bug——而是模型在标准训练目标下必然学到的东西。
FGSM:最经典的对抗攻击
Section titled “FGSM:最经典的对抗攻击”给定一个分类模型 、输入 和真实标签 ,FGSM 的生成公式为:
其中:
- 表示损失函数 对 输入 的梯度(而非对模型参数的梯度)。注意:常规训练中反向传播计算的是 (对权重 的梯度),这里则需要把 设为
requires_grad=True再做一次反向传播。 - 是扰动幅度(perturbation budget),通常取 。
- 取符号函数(正为 ,负为 ,零为 ),确保每个像素只朝”最有害”的方向推一步。
这一步为什么有效?因为梯度 指向”让损失增大最快的输入方向”——沿这个方向走 步,模型的损失急剧上升,预测就翻车了。从一阶泰勒展开的角度看,,在约束 下, 恰好是这个线性近似的最优解。
范数(Norm) 是什么?范数 衡量向量的”大小”。对抗攻击中最常用三种: 范数限制每个分量的最大绝对值(,对应 FGSM/PGD); 范数限制扰动总能量(); 范数限制被修改的像素个数。
PGD:更强的迭代攻击
Section titled “PGD:更强的迭代攻击”FGSM 只走一步,PGD(投影梯度下降,Projected Gradient Descent)走多步:
每步走一个更小的步长 (通常 ,迭代 20-100 步),然后通过投影算子 将结果”拉回”允许的扰动范围——以 为中心、 半径为 的超立方体 。此外还需做像素裁剪(clip 到 ),确保结果仍是合法图像。
投影的具体操作是逐元素截断:。对 球约束,投影则是沿径向缩放。
PGD 是白盒攻击的黄金标准。Madry et al.(2018)从优化角度指出:PGD 本质上是在扰动约束集上做最大化损失的梯度上升,而 约束下的 PGD 能找到的局部最大值在损失景观(loss landscape)中相对密集且集中——意味着随机重启(random restart)不会找到显著更强的解。这让 PGD 成为对抗训练中内层最大化的可靠近似。
CW 攻击:优化驱动的精准攻击
Section titled “CW 攻击:优化驱动的精准攻击”Carlini & Wagner(2017)提出的 CW 攻击不直接最大化交叉熵损失,而是将攻击建模为一个带约束的优化问题:
其中 是一个精心设计的损失函数(不同于交叉熵),常见形式为:
这里 是模型 logits 层 的原始输出(softmax 之前的未归一化分数), 是目标错误类别, 是控制置信度的间隔参数。CW 攻击通过引入辅助变量 并用 变换将箱约束 转化为无约束优化,再用 Adam 优化器求解,能生成扰动极小、攻击成功率极高的对抗样本。
Logits 与 Softmax:神经网络分类器的最后一层通常先输出一组实数分数 ,称为 logits。Softmax 把 logits 转换成概率分布:。CW 攻击直接操纵 logits 而非 softmax 后的概率,优化更稳定。
CW 攻击在评估防御方法时极其重要:许多看起来能抵抗 FGSM/PGD 的防御方法,在 CW 攻击下不堪一击——这也是为什么社区现在以 AutoAttack(内含 CW 变体)作为防御有效性的终极检验。
防御的四条路线
Section titled “防御的四条路线”-
对抗训练(Adversarial Training):用对抗样本(而非干净样本)来训练模型——把攻防博弈内化到训练过程中。这是目前最有效、也是工业界最常用的防御手段。
对抗训练的核心是一个 min-max(极小极大)优化问题:
- 内层 max(攻击者):在扰动预算 内,寻找使损失最大的扰动 ——这正是 PGD 在做的事。
- 外层 min(防御者):用这些最坏情况下的对抗样本来更新模型参数 ,让模型学会在最强攻击下仍然正确分类。
这种”以内层 PGD 对抗样本为训练数据”的朴素对抗训练(Madry AT)虽然有效,但存在鲁棒性-精度权衡(robustness-accuracy tradeoff):模型越鲁棒,在干净样本上的精度往往越低。为了缓解这一问题,TRADES(Zhang et al., 2019)在损失函数中显式引入正则项,平衡干净精度与鲁棒精度:
其中 是 KL 散度(衡量两个概率分布差异的指标), 控制鲁棒性权重。
-
对抗净化(Adversarial Purification):在输入送入分类器之前,先用一个独立的模型”清洗”对抗扰动——例如用去噪自编码器、GAN 或近年的扩散模型(Diffusion Models,如 DiffPure)对输入做去噪重建,恢复干净特征后再分类。这类方法不修改分类器本身,部署灵活,但引入额外推理开销,且自身也可能被自适应攻击绕过。
-
随机化与去噪:给输入加随机扰动、做随机裁剪/缩放(randomized data augmentation),或对模型做随机平滑——破坏攻击者精心设计的确定性对抗扰动。代表方法如 randomized smoothing(Cohen et al., 2019):对输入加高斯噪声后做多次预测取平均,可以给出 球内的认证保证(certified guarantee),即数学证明在一定扰动范围内预测不变。
-
认证防御(Certified Defense):从数学上证明在一个扰动半径范围内,模型的预测一定不变。代表方法包括 interval bound propagation(区间界传播)和 randomized smoothing。这类方法给出硬保证,但精度通常牺牲较大,且目前主要适用于较小的扰动半径。
攻击与防御的博弈循环
Section titled “攻击与防御的博弈循环”FGSM 生成过程
Section titled “FGSM 生成过程”PyTorch:用 FGSM 生成对抗样本
Section titled “PyTorch:用 FGSM 生成对抗样本”import torchimport torch.nn as nnfrom torchvision.models import resnet18, ResNet18_Weights
# 加载预训练 ResNet18(ImageNet 1000 类)model = resnet18(weights=ResNet18_Weights.DEFAULT).eval()eps = 0.03 # 扰动幅度 8/255
# 假装有一张输入图像(这里用随机图做演示)x = torch.rand(1, 3, 224, 224, requires_grad=True)label = torch.tensor([207]) # ImageNet 第 207 类:golden retriever
# FGSM 核心:对"输入"求梯度(不是对参数)loss = nn.CrossEntropyLoss()(model(x), label)loss.backward() # 反向传播得到 x.gradx_adv = x + eps * x.grad.sign() # 沿梯度符号方向加扰动x_adv = torch.clamp(x_adv, 0, 1) # 确保像素值合法
# 对比干净输入与对抗输入的预测print("干净预测:", model(x).argmax().item())print("对抗预测:", model(x_adv).argmax().item()) # 通常会变成另一类PyTorch:PGD 迭代攻击
Section titled “PyTorch:PGD 迭代攻击”import torchimport torch.nn as nnfrom torchvision.models import resnet18, ResNet18_Weights
model = resnet18(weights=ResNet18_Weights.DEFAULT).eval()criterion = nn.CrossEntropyLoss()
x = torch.rand(1, 3, 224, 224) # 干净输入label = torch.tensor([207])
# PGD 超参数eps = 8 / 255 # 扰动预算alpha = 2 / 255 # 每步步长num_steps = 20 # 迭代次数
# 初始化:从干净图像出发(实战中可加随机噪声做 random restart)x_adv = x.clone().detach().requires_grad_(True)
for step in range(num_steps): output = model(x_adv) loss = criterion(output, label)
model.zero_grad() if x_adv.grad is not None: x_adv.grad.zero_() loss.backward()
# 沿梯度符号方向走一步 with torch.no_grad(): x_adv = x_adv + alpha * x_adv.grad.sign() # 投影回 L_inf 球:限制总扰动不超过 eps x_adv = torch.clamp(x_adv, x - eps, x + eps) # 确保仍是合法像素值 x_adv = torch.clamp(x_adv, 0.0, 1.0)
x_adv.requires_grad_(True)
print("PGD 对抗预测:", model(x_adv).argmax().item())PyTorch:对抗训练的核心循环
Section titled “PyTorch:对抗训练的核心循环”以下是 Madry 风格对抗训练的简化版,展示了 min-max 博弈在代码中如何实现:
import torchimport torch.nn as nnimport torch.optim as optim
model = ... # 你的分类器,如 ResNetopt = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)criterion = nn.CrossEntropyLoss()
# 对抗训练超参数eps = 8 / 255alpha = 2 / 255inner_steps = 7 # 内层 PGD 步数(通常 5-10 步即可)
for x, y in train_loader: # ---- 内层 max:用 PGD 生成对抗样本 ---- x_adv = x.clone().detach().requires_grad_(True) for _ in range(inner_steps): loss_inner = criterion(model(x_adv), y) opt.zero_grad() loss_inner.backward() with torch.no_grad(): x_adv = x_adv + alpha * x_adv.grad.sign() x_adv = torch.clamp(x_adv, x - eps, x + eps) x_adv = torch.clamp(x_adv, 0.0, 1.0) x_adv.requires_grad_(True)
# ---- 外层 min:用对抗样本更新模型参数 ---- opt.zero_grad() loss_outer = criterion(model(x_adv), y) # 用对抗样本计算损失 loss_outer.backward() opt.step()关键点:内层 PGD 的计算图不需要保留到外层——用 detach() 切断梯度流,让内外两个优化各自独立。
- 对抗训练是工业界首选防御:在每个 batch 上同时用干净样本和 PGD 对抗样本计算损失。代价是训练慢 3-10 倍(因为每个 batch 要先跑内层 PGD 生成对抗样本),但鲁棒性显著提升。加速技巧包括 Free Adversarial Training(Shafahi et al., 2019,通过重用前向/反向传播计算同时更新参数和生成对抗样本)和 Fast Adversarial Training(Wong et al., 2020,用单步 FGSM + 随机初始化达到接近多步 PGD 的效果)。
- 扰动幅度 epsilon 的取舍:epsilon 越大攻击越强但越不”隐蔽”。8/255 是文献中最常用的基准,人眼几乎看不出,但对模型已足够致命。在实际部署中,epsilon 的选择应基于威胁模型——攻击者能修改多少像素而不被发现。
- 黑盒攻击的威胁:利用对抗样本的可迁移性,攻击者无需访问目标模型内部,用一个替代模型(surrogate model)生成对抗样本即可攻击。这也是对抗训练需要多样化攻击模型(ensemble adversarial training)的原因。
- 没有银弹:至今没有任何防御能抵挡所有攻击。许多发表于论文的”新防御”在更强的自适应攻击(adaptive attack)下纷纷破防(Athalye et al. 2018 的论文专门击穿了 7 种顶会防御)。评估防御时必须使用 AutoAttack 等强自适应攻击套件,而不是只报告对 FGSM 的抵抗力。
- 物理世界的对抗样本:对抗性并不仅存在于数字空间——打印出来的对抗贴纸贴在路牌上,自动驾驶系统就会把”停车”认成”限速 80”。这对目标检测与 YOLO等车载感知系统是真实威胁。物理攻击需要额外考虑视角变化、光照变化、打印色域损失等因素,因此通常使用期望最大化变换(EOT,Expectation Over Transformation)来增强鲁棒性。
- 自动驾驶安全:路牌上贴几张精心打印的贴纸,特斯拉 Mobileye 摄像头就会误判标志含义——McAfee 2019 年的测试就成功让一代 Model X 把”限速 35”读成”限速 85”。3D 物理对抗物体(如精心设计的障碍物贴纸)甚至能逃过激光雷达与摄像头的联合检测。对抗训练是提升感知鲁棒性的核心手段。
- 人脸识别防欺骗:苹果 Face ID、支付宝人脸支付都需考虑对抗性攻击。清华团队曾用一副对抗眼镜就骗过了多家人脸识别门禁——工业系统需结合活体检测(liveness detection)与对抗训练。
- 内容审核与水印:社交媒体平台用 AI 审核违规图片,攻击者试图用对抗扰动绕过审核;反之,版权方也用对抗扰动保护图片不被生成模型”洗稿”——Glaze、Nightshade 等工具通过向艺术品添加不可见扰动,使风格迁移或文生图模型产生混乱输出,本质上是”防御性对抗样本”。
- 医疗影像安全:对抗扰动能让 AI 诊断系统把恶性肿瘤误判为良性(或反之)——在医疗 AI 走向临床部署的过程中,鲁棒性审计正成为监管要求(如 FDA 对 AI 医疗器械的审批流程)。
- 大语言模型越狱:对抗攻击不止针对视觉模型——精心设计的提示词序列(如越狱 prompt、GCG 后缀攻击)本质上是 LLM 的”对抗样本”,可绕过安全护栏。详见提示工程与安全护栏。
2025-2026 前沿进展
Section titled “2025-2026 前沿进展”LLM 对抗攻击:从视觉到语言
Section titled “LLM 对抗攻击:从视觉到语言”对抗样本研究的重心正在从图像分类器向大语言模型(LLM)转移。核心发展包括:
- GCG 后缀攻击(Greedy Coordinate Gradient):Zou et al.(2023)提出在用户 prompt 后面追加一段看似乱码的对抗后缀(如
describing.\ + similarlyNow write oppositeley.](...),就能让对齐的 LLM 执行原本被拒绝的有害指令。GCG 用类似 FGSM 的离散梯度搜索来优化这段后缀,是 LLM 对抗攻击的里程碑。 - 自动化红队(Automated Red Teaming):2024-2025 年,利用强化学习和 LLM-as-attacker 的自动化越狱搜索成为主流范式。攻击模型自动生成、变异、筛选 prompt,无需人工设计越狱模板——这让防御方面对的攻击压力急剧增大。
- 多模态越狱:视觉语言模型(VLM,如 GPT-4V、Gemini)引入了新攻击面——攻击者可以把对抗指令编码到图片中(对抗图片 + 文本 prompt 组合),绕过文本侧的安全过滤。
- 对抗训练对齐:将对抗训练的思想引入 LLM 安全对齐流程——在 RLHF 或 DPO 阶段混入红队生成的对抗 prompt,让模型学会抵抗越狱。Anthropic 的 Constitutional AI 和 Google 的 REINFORCE 等方法都不同程度采用了这一思路。
扩散模型:既是攻击目标也是防御武器
Section titled “扩散模型:既是攻击目标也是防御武器”扩散模型(Diffusion Models)在对抗鲁棒性领域扮演双重角色:
- 作为防御(DiffPure):用预训练扩散模型对输入做”加噪-去噪”重建,有效洗掉对抗扰动,净化后的图像再送入分类器。扩散模型的随机性天然契合 randomized smoothing 框架,可以同时提供经验鲁棒性和认证鲁棒性。
- 作为攻击目标:对抗扰动也可用来攻击文生图模型——例如让一个看似正常的文本 prompt 实际生成完全不同的图片,或用对抗图片保护版权(如 Mist、PhotoGuard 使图片在扩散模型视角下变成”噪声”,从而阻断风格模仿)。
认证鲁棒性的规模化
Section titled “认证鲁棒性的规模化”认证防御一直受困于精度过低。2024-2025 年的进展包括:将 randomized smoothing 扩展到 Vision Transformer(ViT)架构、利用 平滑分类器(smoothed classifier) 在 半径下达到 ImageNet 上 70%+ 的认证精度。部分工作开始探索 和 扰动下的认证保证,以及对更现实威胁模型(如语义扰动)的认证。
鲁棒性与通用性的统一
Section titled “鲁棒性与通用性的统一”一个长期问题是:对抗鲁棒的模型是否也更公平、更可解释、更校准(calibrated)?越来越多的证据表明答案是肯定的——鲁棒特征本质上是与人类语义对齐的特征,因此对抗训练带来的好处远超”抗攻击”本身。2024-2025 年的研究进一步揭示,鲁棒模型对分布偏移(distribution shift)和罕见子群体(rare subgroups)的泛化能力也更强。
实战基准与标准化
Section titled “实战基准与标准化”RobustBench 持续更新各模型在 AutoAttack 下的鲁棒精度排行榜,已成为领域共识的标准化基准。社区越来越强调:没有 AutoAttack 评估的防御论文不应被视为可信。2025 年的趋势是将对抗鲁棒性评估扩展到更广泛的任务(检测、分割、NLP)和更现实的威胁模型(查询受限的黑盒、物理世界约束)。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| Foolbox | Python | 德国 CISPA 团队维护的对抗攻击库,集成 FGSM/PGD/DeepFool/CW 等 30+ 种攻击 |
| CleverHans | Python | 蒙特利尔大学(Goodfellow 团队)的对抗攻击与防御库,FGSM 的参考实现 |
| ART (Adversarial Robustness Toolbox) | Python | IBM 开源,覆盖攻击/防御/认证/可解释性,支持 TF/PyTorch/scikit-learn |
| RobustBench | Python | 对抗鲁棒性标准化基准,收录各模型在 AutoAttack 下的真实鲁棒精度 |
| AutoAttack | Python | 目前最强的自适应攻击套件(由四种攻击组合而成),用于严格验证防御有效性 |
| TextAttack | Python | 针对 NLP 模型的对抗攻击与数据增强工具库 |
| llm-attacks | Python | Zou et al. 开源的 GCG 后缀攻击实现,针对 LLM 安全越狱 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 对抗样本 | Adversarial Example | 加入人眼不可见扰动后使模型给出错误预测的输入 |
| 白盒攻击 | White-box Attack | 攻击者完全了解目标模型结构与参数的攻击场景 |
| 黑盒攻击 | Black-box Attack | 攻击者只能查询模型输出、不知内部参数的攻击场景 |
| 快速梯度符号法 | FGSM | 沿输入梯度符号方向加一步扰动的经典攻击方法 |
| 投影梯度下降 | PGD | FGSM 的多步迭代加强版,白盒攻击的黄金标准 |
| CW 攻击 | Carlini-Wagner Attack | 基于优化的强攻击,直接操纵 logits 层,能找到极小扰动 |
| 对抗训练 | Adversarial Training | 用对抗样本参与训练以提升模型鲁棒性的防御方法,本质是 min-max 博弈 |
| 对抗净化 | Adversarial Purification | 用独立模型(如扩散模型)清洗对抗扰动后再分类的防御方法 |
| 认证防御 | Certified Defense | 从数学上保证在一定扰动范围内预测不变的防御 |
| Randomized Smoothing | Randomized Smoothing | 通过加噪后多次预测取平均,提供 L2 球内认证保证的方法 |
| 可迁移性 | Transferability | 对抗样本跨模型有效的特性,是黑盒攻击的基础 |
| 扰动预算 epsilon | Perturbation Budget | 允许的最大扰动幅度,限制对抗样本与原图的差异 |
| 范数 | Norm () | 衡量向量”大小”的数学工具,对抗攻击常用 、、 三种 |
| 梯度 | Gradient | 指向函数值上升最快方向的向量,对抗攻击的核心工具 |
| Logits | Logits | 分类器最后一层的未归一化原始分数(softmax 之前) |
| AutoAttack | AutoAttack | 由四种攻击组合的标准化评测套件,用于严格验证防御有效性 |
| TRADES | TRADES | 通过 KL 散度正则项平衡干净精度与鲁棒精度的对抗训练变体 |
| GCG 攻击 | Greedy Coordinate Gradient | 针对大语言模型的离散对抗后缀搜索攻击 |
| 鲁棒性-精度权衡 | Robustness-Accuracy Tradeoff | 模型对抗鲁棒性提升往往以干净样本精度下降为代价的现象 |
| 自适应攻击 | Adaptive Attack | 针对特定防御机制专门设计的攻击,用于检验防御的真实有效性 |
- FGSM 开山作:Goodfellow et al., “Explaining and Harnessing Adversarial Examples”, ICLR 2015. 提出快速梯度符号法,首次系统解释了对抗样本的成因——线性特性而非非线性。
- PGD 攻击与对抗训练:Madry et al., “Towards Deep Learning Models Resistant to Adversarial Attacks”, ICLR 2018. 确立了一阶对抗训练的理论与实践框架,至今仍是鲁棒训练的基线。
- TRADES:Zhang et al., “Theoretically Principled Trade-off between Robustness and Accuracy”, ICML 2019. 用 KL 散度正则化显式平衡干净精度与鲁棒精度,是 ImageNet 鲁棒训练的标杆方法。
- CW 攻击:Carlini & Wagner, “Towards Evaluating the Robustness of Neural Networks”, IEEE S&P 2017. 提出基于优化的强攻击,证明了当时许多防御在强攻击下无效。
- 击穿虚幻防御:Athalye et al., “Obfuscated Gradients Give a False Sense of Security: Circumventing Defenses to Adversarial Examples”, ICML 2018. 系统性地破解了 7 种顶会防御,提醒社区警惕”看起来有效”的防御。
- 认证鲁棒性:Cohen et al., “Certified Adversarial Robustness via Randomized Smoothing”, ICML 2019. 用随机化平滑给出 L2 球内的认证保证,是可扩展认证防御的代表。
- 鲁棒 vs. 非鲁棒特征:Ilyas et al., “Adversarial Examples Are Not Bugs, They Are Features”, NeurIPS 2019. 从理论角度揭示了对抗样本源于模型学习非鲁棒特征,是理解对抗性本质的必读论文。
- 物理世界对抗:Eykholt et al., “Robust Physical-World Attacks on Deep Learning Visual Classification”, CVPR 2018. 把对抗扰动做成实体贴纸,在真实路牌上攻击自动驾驶感知系统。
- LLM 对抗攻击:Zou et al., “Universal and Transferable Adversarial Attacks on Aligned Language Models”, 2023. 提出 GCG 后缀攻击,首次系统性地攻破对齐 LLM 的安全护栏。
- DiffPure:Xiao et al., “DensePure: Understanding Diffusion Models towards Adversarial Robustness”, ICLR 2023. 用扩散模型净化对抗扰动,结合认证防御提升鲁棒性。
- RobustBench:Croce et al., “RobustBench: A Standardized Adversarial Robustness Benchmark”, NeurIPS Datasets 2021. 持续更新的对抗鲁棒性排行榜,收录 AutoAttack 下的真实鲁棒精度。