作者:dmcm0010 | 来源:互联网 | 2023-10-10 18:47
论文阅读:对抗训练(adversarialtraining)陈见耸自然语言处理、人工智能、机器学习 引言对抗训练(adversarialtraining)是增强神经网络鲁棒性的重
论文阅读:对抗训练(adversarial training)
陈见耸
自然语言处理、人工智能、机器学习
- 引言
对抗训练(adversarial training)是增强神经网络鲁棒性的重要方式。在对抗训练的过程中,样本会被混合一些微小的扰动(改变很小,但是很可能造成误分类),然后使神经网络适应这种改变,从而对对抗样本具有鲁棒性。
在图像领域,采用对抗训练通常能提高鲁棒性,但是通常都会造成泛化性降低,也就是说,虽然对对抗样本的抵抗力提升了,但是有可能影响普通样本的分类能力。神奇的是,在语言模型领域却观察到不一致的结果——对抗训练既提高了鲁棒性也提高了泛化性。所以对抗训练还值得研究一下,毕竟对效果也是有提升的。
我们首先来看一下对抗训练的一般性原理,对抗训练可以概括为如下的最大最小化公式:
内层(中括号内)是一个最大化,其中 表示样本的输入表示, 表示叠加在输入上的扰动, 是神经网络函数, 是样本的标签, 则表示在样本上叠加一个扰动,再经过神经网络函数,与标签比较得到的损失。 是优化目标,即寻找使损失函数最大的扰动,简单来讲就是添加的扰动要尽量让神经网络迷惑。
外层就是对神经网络进行优化的最小化公式,即当扰动固定的情况下,我们训练神经网络模型使得在训练数据上的损失最小,也就是说,使模型具有一定的鲁棒性能够适应这种扰动。
这个公式是一个一般性的公式,并没有讲如何设计扰动。理想情况下,最好是能直接求出,但在神经网络模型中这是不太可行的。所以大家就提出各种各样的扰动的近似求解的方法。事实上,对抗训练的研究基本上就是在寻找合适的扰动,使得模型具有更强的鲁棒性。
2. FGSM/FGM方法
FGSM和FGM方法是Goodfellow等人分别在[1]和[2]中提出的。思想很简单,就是让扰动的方向是沿着梯度提升的方向的,沿着梯度提升也就意味着让损失增大的最大。FGSM(Fast Gradient Sign Method)和FGM(Fast Gradient Method)的区别在于采用的归一化的方法不同,FGSM是通过Sign函数对梯度采取max归一化,FGM则采用的是 归一化。max归一化是是说如果梯度某个维度上的值为正,则设为1;如果为负,则设为-1;如果为0,则设为0。归一化则将梯度的每个维度的值除以梯度的范数。 理论上归一化更严格的保留了梯度的方向,但是max归一化则不一定和原始梯度的方向相同。
FGSM:
FGM:
其中, ,也就是损失函数L关于输入X的梯度,这个梯度在我们做神经网络优化的时候是很容易求出来的。
当然两种方法都有个假设,就是损失函数是线性的或者至少是局部线性的。如果不是(局部)线性的,那梯度提升的方向就不一定是最优方向了。
3. PGD方法
为了解决FGSM和FGM中的线性假设问题,论文[3]提出了使用PGD(Projected Gradient descent)方法来求解内部的最大值问题。 PGD是一种迭代攻击,相比于普通的FGSM和FGM 仅做一次迭代,PGD是做多次迭代,每次走一小步,每次迭代都会将扰动投射到规定范围内。
,
表示t时刻的损失关于t时刻输入的梯度。
,
t+1时刻输入根据t时刻的输入及t时刻的梯度求出。注意这里 的意思是,如果扰动超过一定的范围,就要映射回规定的范围S内。
由于每次只走很小的一步,所以局部线性假设基本成立的。经过多步之后就可以达到最优解了,也就是达到最强的攻击效果。论文还证明用PGD算法得到的攻击样本,是一阶对抗样本中最强的了。这里所说的一阶对抗样本是指依据一阶梯度的对抗样本。如果模型对PGD产生的样本鲁棒,那基本上就对所有的一阶对抗样本都鲁棒。实验也证明,利用PGD算法进行对抗训练的模型确实具有很好的鲁棒性。
PGD虽然简单,也很有效,但是存在一个问题是计算效率不高。不采用提对抗训练的方法m次迭代只会有m次梯度的计算,但是对于PGD而言,每做一次梯度下降(获取模型参数的梯度,训练模型),都要对应有K步的梯度提升(获取输出的梯度,寻找扰动)。所以相比不采用对抗训练的方法,PGD需要做m(K+1)次梯度计算。
4. FreeAT(Free Adversarial Training)
在PGD的计算过程中,每次做前向后向计算时,不管是参数的梯度还是输出的梯度,都会计算出来,只不过在梯度下降的过程中只利用参数的梯度,在梯度提升的过程中只利用输入的梯度,这实际上有很大的浪费。 我们能不能在一次前向后向计算过程中,把计算出来的参数的梯度和输入的梯度同时利用上?这就是FreeAT[4]这篇文章的核心思想。
如何做呢?这里存在一个小小的麻烦,就是普通训练的方式和PGD对抗训练的方式稍微有些不同。普通训练时相邻的batch是不同的batch,而PGD对抗训练在梯度提升的计算样本时,需要对同一个mini-batch的样本,反复求梯度。 FreeAT仍然采用了PGD这种训练方式,即对于每个min-batch的样本会求K次梯度,每次求得得梯度,我们既用来更新扰动,也用来更新参数。原始的PGD训练方法,每次内层计算只用梯度来更新扰动,等K步走完之后,才重新再计算一次梯度,更新参数。这个不同可以用下图形象的表示。
需要注意的是,如果内层做K次迭代的化,对于外层计算,FreeAT会把总体的迭代epoch除以K,这样保证总体的梯度计算的次数跟普通训练一样。从外层训练的视角来看,每个min-batch被训练的次数和普通训练是相同的,只不过其被训练的顺序有些变化,K个相同的min-batch会被顺序的训练。 这样带来的问题是连续相同的mini-batch对参数更新,不如随机mini-batch带来的扰动大,这有可能影响到最终模型收敛的效果。但是论文用实验证明,这种担心不太必要。详细的算法代码如下
5. YOPO(You can Only Propagate Once)
YOPO[5]的出发点是利用神经网络的结构来降低梯度计算的计算量。从PMP(Pontryagin's maximum principle)的角度看,对抗扰动只和神经网络的第一层有关。所以,论文提出固定住前面的基层,只对第一层求梯度,并据此来更新扰动。
基于这个想法,作者想复用后几层的梯度,假设p为定值:
则对扰动的更新就可以变为:
详细的算法代码如下:
虽然YOPO-m-n只完成了m次完整的正反向传播,但是却实现了m*n次扰动的更新。而PGD-r算法完成r次完整的正反向传播却只能实现r次扰动的更新。这样看来,YOPO-m-n算法的效率明显更高,而实验也表明,只要使得m*n略大于r,YOPO-m-n的效果就能够与PGD-r相媲美。
6. FreeLB(Free Large Batch Adversarial Training)
和FreeAT一样,FreeLB也想更高效的利用两种梯度。但是和FreeAT不一样的是,FreeLB并不是在每次梯度提升的过程中,都会对参数进行跟新,而是将参数的梯度累积起来,即算法第8行 更新的过程。这样走过K步之后,FreeLB利用K步之后积累的参数梯度 ,对参数 进行更新,即算法第13行, 的更新过程。 FreeLB需要进行 次梯度计算,相比于PGD需要进行 次梯度计算,是节省了 次梯度计算,但是相比于FreeAT只需要 次梯度计算而言,FreeLB效率的提升并不明显。 所以FreeLB的优势并不在效率,而是在效果。由于FreeLB利用了多步K积累的梯度再做更新,对梯度的估计更加精准,而且不存在FreeAT那样连续利用多个相同的min-batch进行梯度更新的问题。
相比于YOPO-m-n,FreeLB也是将K步(这里指m)中的梯度综合后再更新参数,不同的是其没有更进一步的n层,即使有,也是n个完全相同的值。
为什么论文成这种算法为Large Batch呢?在梯度下降时,我们使用的梯度是基于 ,..., 进行计算的,这可以理解为近似的对K个不同batch的样本进行平均,所以相当于虚拟的增大了样本的数量。
论文中还指出了很重要的一点,就是对抗训练和dropout不能同时使用,加上dropout相当于改变了网络结构,会影响r的计算。如果要用的话需要在K步中都使用同一个mask。
7. 参考文献
[1] EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES
[2] ADVERSARIAL TRAINING METHODS FOR SEMI-SUPERVISED TEXT CLASSIFICATION
[3] Towards Deep Learning Models Resistant to Adversarial Attacks
[4] Adversarial Training for Free!
[5] You Only Propagate Once: Accelerating Adversarial Training via Maximal Principle
[6] FREELB: ENHANCED ADVERSARIAL TRAINING FOR NATURAL LANGUAGE UNDERSTANDING
编辑于 2020-02-01