利用误分类样本来防御对抗样本
来自于ICLR2020的一篇paper -- Improving Adversarial Robustness Requires Revisiting Misclassified Examples
其中作者有北大的王奕森,在对抗样本这块工作比较多大家可以关注一下。
防御对抗样本在深度学习里面一直是件难办的事 ,目前都没有什么特别有效的方法,我今天介绍这篇也不能完美解决这个问题,只希望提供一些一些有趣的思路给大家。
首先,文章进行了一个小的实验,可以说是一个有意思的观察。作者首先讲正确分类的样本集合记做,误分类的样本集合记做。统一使用对抗训练进行防御,分别只对和进行扰动,以及两者均进行扰动,比较这三者的对抗鲁棒性。
这里的扰动,指的就是生成对应的对抗样本加入到训练集合中
在正确分类和误分类数据上加不加扰动所带来的鲁棒性的差异对抗鲁棒性指的是,在对抗样本作为输入时,模型的精度
如上图所示,我们只看最后的结果,即训练100轮次之后,单独对误分类样本集合进行扰动的鲁棒性(橘色线)要优于单独对正确分类样本进行扰动(绿色线)。
基于这个有意思的观察,文章对误分类样本在对抗训练中产生的影响进行了探究。
首先作者改变了扰动的方法,将PGD切换成FGSM,分别单独作用于两个样本集合中,从最终的结果上看,仍然是对误分类样本扰动对鲁棒性的提升比较明显,如下图所示:
不同的对抗样本产生方式下误分类样本集合对于整体鲁棒性的影响
接下来,作者在loss上添加了一个KL散度的正则化项,发现添加之后可以显著提升对抗鲁棒性(相比较于传统的交叉熵误差[CE, Cross Entropy]),如下图所示:
并且,KL散度这一项不论是加在还是,都有提升效果。(反之,如果模型对于对抗样本和正常样本的输出分布类似,鲁棒性越高?)
在loss上添加KL散度进而提升鲁棒性,是由Stephan Zheng在2016的一篇名为Improving the Robustness of Deep Neural Networks via Stability Training的论文中首次提出
那么,直觉地,作者应该会给出一项新的loss,由基本的精度误差项,加上KL散度的一项,且KL散度这一项应该主要针对误分类样本。
这里我们就直接给出最终的loss形式
最终loss
主要分两项:
- BCE项:由交叉熵误差演变而来,作者称之为Boosted CE
- KL散度项:促进鲁棒性的项
BCE项
注意到,这一项的输入是扰动后的输入,具体形式为:
这里我放上CE的形式,便于大家对比
其中是真实标签,即Ground Truth。 特别是对于one-hot向量而言,其实就只剩下了。
对比之下,其实就是多了一项,这一项是基于第二大的分类概率计算得来,也就是说,第二大的分类概率越大,这一项误差就越大。所以优化的目标其实就是希望除了正确标签,其余标签的概率都变得很小。
当然,整体的效果暂时还不能下定论,之后我们会在其实验部分进行分析。
KL散度项
其形式为:
不过还多了一个系数,用来当作动态的权重,即对于误分类样本权重大,正确分类样本权重小。(这一块的设置未必是最佳的,我们会在实验部分分析一下)
Zheng等人在16年时,所采用的KL散度并非是上述形式,而是
实验部分
KL项的影响
如上图所示,加上KL项会提升鲁棒性(这已经被先前的工作确认过了),权重项会进一步提升鲁棒性(对误分类样本加大KL项的权重)
对于KL散度中的动态权重项没给出一个对比,即KL(1-p)和只用误分类样本的KL的对比。
BCE项的影响
首先看蓝色虚线(BCE+KL散度)和橘黄色线(CE项+KL散度),看出BCE优于CE项。
然后我们看蓝色虚线(BCE[以扰动样本作为输入]+KL散度)和绿色线(BCE[以普通样本作为输入]+KL散度),说明基础的精度那一项的输入还是扰动样本要优。
KL项的系数
如上图所示,该项越大,鲁棒性越高,但有一定的震荡且不会无限递增。
橘黄色线表示本文章的方法,蓝色线表示另一个防御工作TRADES
和其他方案的比较
这里我只列出其白盒攻击下的精度,其余的实验可以查看原文。整体上看要优于2019年的TRADES方案,达到了SOTA的鲁棒性。
讨论
这篇文章其实是基于一个小的观察(单独加扰动在误分类样本和正确分类样本上会对鲁棒性产生不同的影响),结合KL散度的一个创新(即动态权重的KL散度项)以及BCE项的提出,给出一个新的loss。
BCE项的提出比较突兀,没有过多的解释原因,比如为什么是只计算第二大的概率?如果加入第三大的概率有提升作用吗?。