对抗训练

对抗训练#

对抗训练(Adversarial Training)最初由 [Goodfellow et al., 2015] 提出,作为一种防御对抗攻击的方法,其思路非常简单直接,将生成的对抗样本加入到训练集中去,做数据增强,让模型在训练的时候就先学习一遍对抗样本。为了加速对抗样本的生成过程以便于训练,他们同时提出了著名的 FGSM 攻击,假设损失函数在样本点处为局部线性,快速生成 \(L_{\infty}\) 范数限制下的对抗样本:

\[ x_{\text{adv}} = x + \epsilon \operatorname{sign}(\nabla_x J(f(x), y)) \]

其中 \(\epsilon\) 是攻击步长,\(\nabla_x J(f(x), y)\) 是损失函数 \(J\)\(x\) 处的梯度。

后续 [Moosavi-Dezfooli et al., 2016] 研究发现 FGSM 对抗训练并不是总能增强模型的对抗稳健性(Adversarial Robustness),因为 FGSM 这种单次线性构造对抗样本的方式显然生成的不是最优的对抗样本,另一方面这个方法设计之初也是为了快,而不是好。

2017 年,[Madry et al., 2019] 提出使用更强的 PGD 攻击来进行对抗训练,并且在文中证明对抗训练可以获得稳健的模型。他们将对抗训练简化成了 min-max 优化问题,即寻找模型(以参数 \(\theta\) 表示),使得其能够正确分类扰动 \(\delta\) 在一定范围 \(\mathsf{S}\) 内的对抗样本,即

\[ \min_{\theta} \mathbb{E}_{(x,y)\thicksim\mathbf{D}} [\max_{\delta\in\mathsf{S}} L(f(x+\delta|\theta), y)] \]

其中 \(\mathsf{S}\)\(\ell_\infty\) 范数限制下的扰动空间,\(L\) 是损失函数,\(f\) 是模型。

当内层达到最优的时候,他们证明在内层问题的最优解上求解外层问题可以获得整个问题的最优解,当然,实际实现时求解的都是近似最优。

2018 年,[Athalye et al., 2018] 对 11 种对抗防御方法进行了评估,最后他们只在基于对抗训练的两种方法上没有发现混淆梯度([Papernot et al., 2017])的迹象,自此之后,对抗训练成为对抗防御研究的主流。

对抗训练本身有两个显著的问题,一个问题是速度极慢,假设针对每个样本进行 10 次 PGD 对抗攻击来获得对抗样本,那么一个训练迭代就对梯度多进行了 10 次反向传播,训练用时至少是正常训练的十倍(因此最初才会使用 FGSM 等快速攻击方法来加快对抗训练)。

另一个问题则是精度较低,一方面是模型在正常样本上的精度降低了,原来可以达到 \(95\%\) 以上的分类精度的模型,进行对抗训练之后,往往只能达到 \(80\%~90\%\)(这意味着模型可能要在稳健性和精确度之间取舍);另一方面模型在对抗攻击下的精度(Robust Accuracy)也不高。

小技巧

对抗训练也许从本质上来说就是一种对反向梯度的正则化, 这种正则化能够减少提取特征中, 对“混合特征(Dense Mixture)”的学习, 并且使得训练梯度的相对可解释性更强, 从梯度图片上看, 对抗训练其更容易学习到物体的结构特征, 而非纹理等细节特征.