对抗训练是提升机器学习模型,特别是深度神经网络抵御规避攻击抵抗力最有效和广泛采用的策略之一。基于先前介绍过的思想,其核心构想出人意料地简单:如果你想让模型能够抵御对抗样本,就应该明确地用这些样本来训练它。我们不再仅仅使用干净数据进行训练,而是动态生成对抗样本来扩充训练集。对抗训练直接处理了像PGD这类攻击所针对的脆弱点。它迫使模型学习那些对输入空间中小而恶意的扰动不那么敏感的决策边界。最小最大优化视角如章引言所述,对抗训练可以被正式表述为一个最小最大优化问题。目标是找到模型参数 $\theta$,使其能够最小化预期损失,即使面对在定义约束下最强的可能对手。目标函数如下:$$ \min_{\theta} \mathbb{E}{(x,y) \sim \mathcal{D}} \left[ \max{\delta \in S} L(\theta, x+\delta, y) \right] $$让我们分解一下:$\min_{\theta}$:我们希望找到最优模型参数 $\theta$。$\mathbb{E}_{(x,y) \sim \mathcal{D}}$:这表示真实数据分布 $\mathcal{D}$ 上的期望。实际操作中,我们通过对从训练数据集中抽样的小批量数据取平均来近似计算。$\max_{\delta \in S}$:这是内部最大化问题,代表对手的目标。对手试图在允许的集合 $S$ 内(例如,$L_p$ 范数球体,如 $S = {\delta \mid ||\delta||_p \leq \epsilon}$)找到一个扰动 $\delta$,使其能够最大化损失函数 $L$。这相当于在干净输入 $x$ 附近找到“最坏情况”的对抗样本。$L(\theta, x+\delta, y)$:这是损失函数(例如,分类任务的交叉熵),使用当前模型参数 $\theta$,在受扰动输入 $x+\delta$ 上与真实标签 $y$ 一起计算。本质上,外部最小化寻找模型参数,使其在内部最大化为每个数据点找到最有效的对抗扰动后,仍能表现良好(损失较低)。这形成了一种态势,模型学习如何抵御训练期间遭受的攻击。具体实践:PGD对抗训练解决精确的内部最大化 $\max_{\delta \in S} L(\theta, x+\delta, y)$ 通常难以处理。实际操作中,它通过迭代的基于梯度的攻击方法来近似。投影梯度下降(PGD)是最常见的选择,从而产生了所谓的PGD对抗训练(PGD-AT)。在单个小批量训练步骤中,PGD-AT过程通常如下所示:抽样一个迷你批次: 从训练数据中获取一组干净样本 $(x, y)$。生成对抗样本(内循环 - 攻击): 对于迷你批次中的每个干净样本 $x$:初始化一个小的随机扰动 $\delta_0$。使用PGD迭代更新扰动 $k$ 步: $$ \delta_{t+1} = \Pi_S \left( \delta_t + \alpha \cdot \text{sign}(\nabla_\delta L(\theta, x+\delta_t, y)) \right) $$ 其中 $\alpha$ 是步长,$\nabla_\delta L$ 是损失函数关于扰动 $\delta$ 的梯度,$\Pi_S$ 是投影算子,确保 $\delta_{t+1}$ 保持在允许的集合 $S$ 内(例如,裁剪值以保持在半径为 $\epsilon$ 的 $L_\infty$ 球体内)。最终扰动 $\delta_k$ 产生对抗样本 $x' = x + \delta_k$。更新模型参数(外循环 - 训练): 使用生成的对抗样本 $x'$ 及其真实标签 $y$ 计算损失。计算此损失函数关于模型参数 $\theta$ 的梯度,并使用优化器(如SGD或Adam)更新 $\theta$。这个循环重复多个训练周期。内循环中使用的PGD攻击强度(由 $\epsilon$、$\alpha$ 和 $k$ 控制)是一个重要的超参数。训练期间更强的攻击通常会带来一个更稳定的模型,但也会增加计算成本,有时还会使训练变得困难。对抗训练的变体虽然PGD-AT是标准方法,但也存在几种变体和改进:FGSM对抗训练(FGSM-AT): 一种更快的替代方法,其内循环仅使用快速梯度符号方法(FGSM)的单步,而非PGD。虽然计算成本更低,但与PGD-AT相比,它产生的模型抵抗力通常较弱。有时,它会出现一种称为“灾难性过拟合”的现象,即对多步PGD攻击的抵抗力在训练过程中突然崩溃,即使对单步FGSM攻击的抵抗力有所提升。快速对抗训练方法: 像“Free AT”和“You Only Propagate Once (YOPO)”这样的方法旨在减少计算开销。它们巧妙地重用梯度计算,在每步的单次反向传播中同时更新扰动 $\delta$ 和模型参数 $\theta$,相较于标准PGD-AT,显著加快了训练速度。TRADES(基于权衡的替代损失对抗防御): 该方法明确处理了标准准确性(在干净数据上)与对抗抵抗力之间的常见权衡。它修改了损失函数,以包含一个基于模型对于干净输入和对抗输入的输出分布之间的库尔巴克-莱布勒(KL)散度的正则化项: $$ L_{TRADES}(\theta, x, y) = L_{CE}(\theta, x, y) + \beta \cdot KL(p_{\theta}(x) || p_{\theta}(x')) $$ 其中,$L_{CE}$ 是干净样本上的标准交叉熵损失,$x'$ 是通过内层PGD循环(优化KL项)生成的对抗样本,$p_{\theta}(x)$ 是模型对于输入 $x$ 的预测概率分布,$\beta$ 是一个控制标准准确性与抵抗力平衡的超参数。TRADES鼓励模型对干净和对抗输入产生相似的输出。理解其影响对抗训练从根本上改变了模型的学习方式。它不再仅仅是拟合训练数据,还必须学习对旨在欺骗它的小扰动保持不变。这通常会带来:更平滑的决策边界: 模型对数据点附近微小的输入变化不那么敏感。更符合感知的梯度: 梯度可能变得噪声更小,并可能与人类感知更好地对齐,尽管这是一个持续研究的领域。特征学习: 模型可能会学习到本质上更稳定、更能代表真实类别的特征,而不是依赖于容易被对手利用的表面相关性。准确性与抵抗力之间的权衡对抗训练的一个常见现象是存在权衡:提高对对抗攻击的抵抗力通常会导致在干净、未受扰动样本上的准确性下降。标准训练只针对干净数据的准确性进行优化,而对抗训练则优化在扰动半径内的最坏情况性能,这可能将决策边界拉离一些干净样本。{"layout": {"title": "准确性与抵抗力权衡", "xaxis": {"title": "对抗抵抗力(例如,PGD攻击下的准确性)"}, "yaxis": {"title": "标准准确性(干净数据)"}, "legend": {"title": {"text": "模型类型"}}}, "data": [{"type": "scatter", "mode": "lines+markers", "name": "标准训练", "x": [0.05, 0.1], "y": [0.94, 0.93], "marker": {"color": "#4263eb"}}, {"type": "scatter", "mode": "lines+markers", "name": "弱对抗训练", "x": [0.3, 0.4], "y": [0.90, 0.88], "marker": {"color": "#74c0fc"}}, {"type": "scatter", "mode": "lines+markers", "name": "强对抗训练(例如,PGD-AT)", "x": [0.5, 0.6], "y": [0.85, 0.82], "marker": {"color": "#f76707"}}, {"type": "scatter", "mode": "lines+markers", "name": "TRADES(平衡型)", "x": [0.45, 0.55], "y": [0.87, 0.84], "marker": {"color": "#20c997"}}]}使用更强对抗方法训练的模型(如PGD-AT)通常能获得更高的抵抗力,但相比于使用标准训练或较弱防御的模型,可能会牺牲一些标准准确性。像TRADES这样的技术旨在找到更好的平衡。挑战与考量尽管有效,对抗训练也带来挑战:计算成本: 为每个批次生成对抗样本会显著增加训练时间(通常比标准训练增加5-10倍或更多)。超参数调整: 有效性在很大程度上取决于训练期间使用的攻击参数选择($\epsilon$、$\alpha$、$k$)。这些需要仔细调整。使用过弱的攻击会导致抵抗力不足,而过强的攻击可能会阻碍收敛或过度降低干净数据的准确性。泛化性: 针对一种攻击类型(例如,$L_\infty$ PGD)学到的抵抗力可能无法完全泛化到其他攻击类型或扰动范数。尽管存在这些挑战,对抗训练,尤其是PGD-AT及其像TRADES这样的复杂变体,仍然是构建更安全机器学习模型抵御规避攻击的一种核心技术。它提供了一种有原则的方法,将抵抗力直接纳入学习过程。