论文 2016CVPR-DeepFool a simple and accurate method to fool deep neural networks.
论文主要内容
- 提出了一种新的计算对抗样本的方法:DeepFool算法
- 通过实验,验证了DeepFool算法所添加的扰动更小,同时计算对抗样本所消耗的时间也更少
- 实验也说明了,如果使用不恰当的算法(如FGSM算法)来验证分类器的鲁棒性,那么可能会对分类器的鲁棒性(Robustness)评估过高。
DeepFool算法原理
DeepFool算法基于超平面的分类思想,可精准地计算扰动值。
二分类问题
这是最简单的一种情况。对于二分类,超平面两侧对应不同的分类结果,对于在一侧的样本
x
x
x,想要添加扰动使分类器将其分类为另一个类别,那么只需要将
x
x
x更新到超平面的另外一侧就可以了。
现在优化算法的约束条件是最小扰动,那么就只需要找到
x
x
x到超平面的最短距离,使
x
x
x加上这个距离后转换到超平面的另外一侧,那么就算是找到了对抗样本,同时也就找到了最小的扰动
r
r
r(投影距离)。此最小的且最精准的距离即为垂直分类面移动。
注意:最后找到的扰动只能保证我们能将 x x x改变到决策边界上,所以我们还需要在 r r r的基础上乘上一个微小的系数,保证能越过决策边界。即 r ∗ ( 1 + η ) r*(1+\eta) r∗(1+η),其中 η \eta η的值远远小于1。
非线性问题
若分类器的决策边界是非线性的,在这种情况下,需要寻找 x x x到曲线的最短距离,然后将 x x x加上这个最短距离,即可使 x x x转移到决策边界的另外一侧,从而被错误分类。然而,直接找这个投影点是不好找的。我们需要用到一种迭代的算法。
下面简单描述一下如何寻找一个点到一个曲线(或者是高维空间中的曲面)的最短距离。
- 假设当前是第 i i i次迭代,我们在 x i x_i xi这点对分类器使用一阶泰勒展开,将会得到一条直线(或者一个超平面)
- 将 x i x_i xi投影到这条直线上,我们找到了下一次迭代的 x x + i x_{x+i} xx+i,同时我们将这次迭代添加的扰动向量记为 r i r_i ri
- 我们再在 x i + 1 x_{i+1} xi+1这点,使用同样的方法,寻找下一次迭代的点 x i + 2 x_{i+2} xi+2,同时计算 r i + 1 r_{i+1} ri+1
- 我们的算法一直迭代,直到找到的 x x x落在分类器的决策边界上,算法终止。
- 输出:将每一次迭代过程中产生的 r i r_i ri(是一个向量)全部累计起来(向量加法),得到最终的扰动 r r r。
多分类问题
多元分类的情况下,需要遍历样本点
x
x
x到各分界面的距离,然后比较得到最小的距离,即为需要添加的干扰值。
对于非线性多分类,参照非线性二分类的方法求得各超平面的距离,取最小即可。
实验结果
从上表中可以看出
- DeepFool所添加的扰动较[4][FGSM]和[18][L-BFGS]都要小
- DeepFool产生对抗样本的时间很短
上图是模型多迭代训练,模型的鲁棒性的变化情况,从中可以看出: - 如果使用原来的干净样本,模型鲁棒性基本没有变化
- 如果使用DeepFool产生的对抗样本(后5个epoch都是在这对抗样本上训练的),那么模型在1个epoch后的鲁棒性就大大提升
- 使用FGSM产生的对抗样本做训练,模型的鲁棒性反而会下降
另外,作者将Deepfool产生的扰动放大,然后再使模型在这个放大的样本上训练,看训练后模型的鲁棒性怎么变化,结果如下图所示:
当扰动太大时,反而会使模型鲁棒性降低,这就说明了FGSM算法产生的扰动很大,不是最小的扰动。使用正确的方法(扰动更小的攻击方法)更能说明模型的鲁棒性,而使用那些扰动大的方法来评估模型的鲁棒性,往往会过分评估。