深度神经网络中的对抗攻击防御方法——对抗训练(Adversarial Training)详解
1. 问题/知识点描述
对抗训练是深度学习中一种重要的防御技术,旨在增强模型对对抗样本的鲁棒性。对抗样本是经过精心构造的、对人类感知几乎没有影响、但能使模型以高置信度产生错误预测的输入。对抗训练的核心思想是:在模型训练过程中,主动生成对抗样本,并将其与原始样本混合起来共同训练,从而“教会”模型正确分类这些具有欺骗性的输入,提高其泛化能力和鲁棒性。
2. 背景与动机
在2013年,Szegedy等人发现,在图像上添加人眼难以察觉的微小扰动,就能导致深度神经网络模型做出完全错误的判断。这种脆弱性在安全关键领域(如自动驾驶、人脸识别、医疗诊断)是致命的。因此,研究如何使模型抵御此类攻击变得至关重要。对抗训练是其中最经典、最有效的防御范式之一。
3. 核心原理与数学形式化
对抗训练可以被形式化为一个最小-最大优化问题:
\[\min_{\theta} \mathbb{E}_{(x, y) \sim \mathcal{D}} \left[ \max_{\delta \in \mathcal{S}} L(f_\theta(x + \delta), y) \right] \]
让我们一步步分解这个公式:
- 外层最小化(\(\min_{\theta}\)):这是标准的训练目标,即寻找最优的模型参数 \(\theta\),使得损失函数 \(L\) 尽可能小。
- 内层最大化(\(\max_{\delta \in \mathcal{S}}\)):这是对抗训练特有的部分。对于给定的一个干净样本 \(x\) 和其真实标签 \(y\),我们的目标是找到一个扰动 \(\delta\),使得模型在扰动后的样本 \(x + \delta\) 上的损失 \(L\) 最大。换句话说,我们要找到最能欺骗当前模型的对抗扰动。
- 约束集合 \(\mathcal{S}\):扰动 \(\delta\) 不能太大,否则会改变样本的本质语义(例如,把猫变成狗)。通常 \(\mathcal{S}\) 被限制在一个 \(L_p\) 范数球内,例如 \(||\delta||_p \leq \epsilon\),其中 \(\epsilon\) 是一个很小的常数,确保扰动对人类是“不可察觉的”。最常用的是 \(L_\infty\) 约束(\(||\delta||_\infty \leq \epsilon\)),即每个像素点的扰动绝对值不超过 \(\epsilon\)。
- 期望 \(\mathbb{E}\):这个优化是在整个数据分布 \(\mathcal{D}\) 上进行的。
通俗理解:对抗训练像是在让模型和一个“攻击者”进行对抗性博弈。在每一步训练中,“攻击者”(内层最大化)试图找到当前模型的弱点,生成最难缠的对抗样本;然后“防御者”(模型,外层最小化)根据这些对抗样本调整自己的参数,学习如何正确分类它们。通过反复博弈,模型变得越来越鲁棒。
4. 对抗训练的关键步骤
实现对抗训练主要分为两步:1) 生成对抗样本; 2) 用对抗样本更新模型。
步骤一:生成对抗样本(内层最大化)
由于内层最大化问题通常是非凸的,难以精确求解。实践中采用基于梯度的近似方法快速生成强对抗样本。最经典的方法是投影梯度下降。
以快速梯度符号法(FGSM)及其多步迭代版本(PGD)为例:
a) 快速梯度符号法(FGSM)
这是一种单步攻击方法,计算高效但攻击强度通常弱于迭代方法。
- 前向传播:将干净样本 \(x\) 输入当前模型,计算损失 \(L(f_\theta(x), y)\)。
- 计算梯度:计算损失关于输入 \(x\) 的梯度:\(g = \nabla_x L(f_\theta(x), y)\)。
- 生成扰动:扰动的方向与梯度方向一致(使损失增大),幅度受 \(\epsilon\) 约束。公式为:\(\delta = \epsilon \cdot \text{sign}(g)\)。
sign函数取梯度的符号(+1或-1),保证是 \(L_\infty\) 扰动。 - 生成对抗样本:\(x_{adv} = x + \delta\)。
b) 投影梯度下降(PGD,也称为多步FGSM)
这是对抗训练中最常用、最强大的攻击生成方法,可以看作FGSM的迭代版本。
- 初始化扰动:通常在一个小范围内随机初始化扰动,例如 \(\delta^0 \sim \text{Uniform}(-\epsilon, +\epsilon)\)。
- 迭代更新:进行 \(K\) 次迭代(例如 \(K=10\)):
- 在每次迭代 \(t\) 中,计算当前对抗样本 \(x^t = x + \delta^t\) 的损失梯度。
- 沿着梯度上升方向走一小步 \(\alpha\):\(\delta^{t+1} = \delta^t + \alpha \cdot \text{sign}(\nabla_{x^t} L(f_\theta(x^t), y))\)。
- 投影操作:确保扰动始终在约束集合 \(\mathcal{S}\) 内(例如 \(||\delta||_\infty \leq \epsilon\)):\(\delta^{t+1} = \text{Clip}(\delta^{t+1}, -\epsilon, +\epsilon)\)。这个“Clip”操作将每个像素的扰动值裁剪到 \([-\epsilon, +\epsilon]\) 区间。
- 得到最终对抗样本:\(x_{adv} = x + \delta^K\)。
PGD通过多步迭代探索输入空间,能找到比单步FGSM更强、更具代表性的对抗样本,因此用PGD生成的样本进行对抗训练,得到的模型鲁棒性通常更好。
步骤二:模型参数更新(外层最小化)
生成了对抗样本 \(x_{adv}\) 后,将其用于训练模型:
- 计算对抗损失:将对抗样本 \(x_{adv}\) 输入模型,计算损失 \(L_{adv} = L(f_\theta(x_{adv}), y)\)。
- (可选)混合损失:为了平衡鲁棒性和在干净样本上的精度(标准精度),通常会同时计算干净样本的损失 \(L_{nat} = L(f_\theta(x), y)\)。总损失为两者加权和:\(L_{total} = L_{nat} + \beta \cdot L_{adv}\),其中 \(\beta\) 是一个超参数(常设为1)。
- 反向传播与优化:计算总损失关于模型参数 \(\theta\) 的梯度,并使用优化器(如SGD或Adam)更新 \(\theta\)。
5. 训练流程伪代码
以一个使用PGD生成对抗样本的简单对抗训练为例:
初始化模型参数 θ
设置扰动幅度 ε, 迭代步数 K, 步长 α, 训练轮数 Epochs
for epoch in 1...Epochs:
for (x, y) in training_dataloader:
# --- 内层最大化:生成对抗样本 (PGD) ---
δ = torch.rand_like(x) * 2ε - ε # 在[-ε, +ε]内随机初始化
δ.requires_grad = True
for k in 1...K:
# 1. 前向计算对抗损失
x_adv = x + δ
loss_adv = L(f_θ(x_adv), y)
# 2. 计算输入梯度 (注意是对δ求导,但x_adv = x+δ, 所以等同于对x_adv求导)
grad = torch.autograd.grad(loss_adv, δ, retain_graph=False, create_graph=False)[0]
# 3. 梯度上升一步
δ = δ + α * torch.sign(grad)
# 4. 投影到L∞球内
δ = torch.clamp(δ, -ε, ε)
δ = torch.clamp(x + δ, 0, 1) - x # 对于图像,还需确保x_adv在有效像素范围内[0,1]
# 最终对抗样本
x_adv = x + δ.detach()
# --- 外层最小化:更新模型参数 ---
# 计算干净样本和对抗样本的混合损失
loss_natural = L(f_θ(x), y)
loss_adversarial = L(f_θ(x_adv), y)
loss = loss_natural + loss_adversarial # β=1
# 标准反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
6. 优势与挑战
优势:
- 原理直观,防御能力强:直接针对对抗样本进行优化,是提升鲁棒性的最有效方法之一。
- 通用性强:不依赖于特定的网络结构,可以方便地集成到现有训练流程中。
挑战:
- 计算开销大:生成对抗样本(尤其是PGD)需要多次前向和反向传播,训练时间是标准训练的数倍到数十倍。
- 鲁棒性与标准精度的权衡:过度追求鲁棒性可能导致模型在干净数据上的性能下降,即“鲁棒性-准确性权衡”。
- 针对特定攻击的过拟合:使用一种攻击方法(如PGD-L∞)训练的模型,可能对其他类型攻击(如L2攻击、黑盒攻击)的防御能力有限。为此,研究者提出了使用多种攻击或自适应攻击进行训练的策略。
7. 总结
对抗训练通过最小-最大优化的框架,将对抗样本的生成过程融入到模型训练中,使模型在博弈中学习到更鲁棒的特征表示。其核心是内层用PGD等强攻击生成“最坏情况”样本,外层用这些样本来更新模型。尽管存在计算成本高和权衡问题等挑战,它至今仍然是提升深度神经网络对抗鲁棒性的基石方法。后续的许多防御研究和鲁棒性基准测试(如RobustBench)都以对抗训练及其变体作为重要的参照。