论文阅读:对抗训练(Adversarial Training)

2020-07-28 11:06:47 浏览数 (1)

1. 引言

对抗训练(adversarial training)是增强神经网络鲁棒性的重要方式。在对抗训练的过程中,样本会被混合一些微小的扰动(改变很小,但是很可能造成误分类),然后使神经网络适应这种改变,从而对对抗样本具有鲁棒性。

在图像领域,采用对抗训练通常能提高鲁棒性,但是通常都会造成泛化性降低,也就是说,虽然对对抗样本的抵抗力提升了,但是有可能影响普通样本的分类能力。神奇的是,在语言模型领域却观察到不一致的结果——对抗训练既提高了鲁棒性也提高了泛化性。所以对抗训练还值得研究一下,毕竟对效果也是有提升的。

我们首先来看一下对抗训练的一般性原理,对抗训练可以概括为如下的最大最小化公式:

2. FGSM/FGM方法

3. PGD方法

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次完整的正反向传播,但是却实现了mn次扰动的更新。而PGD-r算法完成r次完整的正反向传播却只能实现r次扰动的更新。这样看来,YOPO-m-n算法的效率明显更高,而实验也表明,只要使得mn略大于r,YOPO-m-n的效果就能够与PGD-r相媲美。

6. FreeLB(Free Large Batch Adversarial Training)

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

0 人点赞