知行编程网知行编程网  2022-06-15 18:00 知行编程网 隐藏边栏 |   抢沙发  247 
文章评分 0 次,平均分 0.0

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

来自 | 知乎  作者 | 陈见耸
链接 | https://zhuanlan.zhihu.com/p/104040055
编辑 | 深度学习这件小事

本文仅作学术交流,如有侵权,请联系后台删除

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


   1. 引言


对抗训练(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步走完之后,才重新再计算一次梯度,更新参数。这个不同可以用下图形象的表示。
论文阅读:对抗训练(Adversarial Training)
需要注意的是,如果内层做K次迭代的化,对于外层计算,FreeAT会把总体的迭代epoch除以K,这样保证总体的梯度计算的次数跟普通训练一样。从外层训练的视角来看,每个min-batch被训练的次数和普通训练是相同的,只不过其被训练的顺序有些变化,K个相同的min-batch会被顺序的训练。这样带来的问题是连续相同的mini-batch对参数更新,不如随机mini-batch带来的扰动大,这有可能影响到最终模型收敛的效果。但是论文用实验证明,这种担心不太必要。详细的算法代码如下
论文阅读:对抗训练(Adversarial Training)


   5. YOPO(You can Only Propagate Once)


YOPO[5]的出发点是利用神经网络的结构来降低梯度计算的计算量。从PMP(Pontryagin's maximum principle)的角度看,对抗扰动只和神经网络的第一层有关。所以,论文提出固定住前面的基层,只对第一层求梯度,并据此来更新扰动。
基于这个想法,作者想复用后几层的梯度,假设p为定值:
论文阅读:对抗训练(Adversarial Training)
则对扰动的更新就可以变为:
论文阅读:对抗训练(Adversarial Training)
详细的算法代码如下:
论文阅读:对抗训练(Adversarial Training)
虽然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)


论文阅读:对抗训练(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。


参考文献

[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


<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section><section style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">长尾分布下图像分类问题最新综述(2019-2020)</section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">GitHub重大更新:在线开发上线,是时候卸载IDE了</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">特朗普拿H1B签证开刀,LeCun吴恩达等实名谴责!</section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">数据分析入门常用的23个牛逼Pandas代码</section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="color: rgb(87, 107, 149);font-size: 14px;">如何在科研论文中画出漂亮的插图?</span><br  /></section></section></section></section></section></section></section></section></section>
论文阅读:对抗训练(Adversarial Training)

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享