论文阅读笔记:DeepFool: a simple and accurate method to fool neural networks

寻找对抗样本的过程就是最优化下面的目标函数:

其中k表示分类器,r表示添加的扰动,delta文中表示的含义是分类器在x这个样本点处的robustness,其实就是扰动的L-2 norm

分类器在整个数据集上的robustness计算公式如下:

从公式中可以看出,如果添加的扰动越小,计算到的ro值就越小,相应的根据文中的定义,分类器的robustness就越好。

本文中的主要贡献:

  1. 提出了一种新的计算对抗样本的方法DeepFool
  2. 从实验中验证了:新的攻击算法所添加的扰动更小,同时计算对抗样本所消耗的时间更少
  3. 实验中说明了:如果使用不恰当的算法(FGSM算法)来验证分类器的鲁棒性,那么很可能会过分的评估分类器的robustness

攻击算法细节

  • 二元分类 and 线性分类器

这是最简单的一种情况。我们有一个线性分类器,那么可以得到一个超平面将两个类别却分开来。

现在X属于其中一个类别,也就是在直线(或者超平面)的一侧,想要添加扰动使分类器将其分类为另一个类别,那么只需要将X更新到直线(或者超平面)另外一侧就可以了。

现在优化算法的约束条件是最小扰动,那么就只需要找到X到直线(超平面)的最短距离,使X加上这个距离后转换到直线另外一侧,那么就算是找到了对抗样本,同时也就找到了最小的扰动r(投影距离)。

这时候处理起来就很简单了,只需要使用一次距离公式即可:

分类器:

投影距离:

  • 二元分类 and 非线性分类器

现在考虑一种更为普遍的setting。分类器的决策边界是非线性的。

这种情况等价于:寻找X到曲线的最短距离,然后将X加上这个最短距离,即可导致X转移到决策边界的另外一侧,从而被错误分类。

但是直接找这个投影点是不好找的。我们需要用到一种迭代的算法。下面简单描叙一下如何寻找一个点到一个曲线(或者是高维空间中的曲面)的最短距离。

1
2
3
4
5
6
7
8
假设当前是第 i 次迭代
我们在Xi这点对分类器使用一阶泰勒展开,我们将会得到一条直线(或者一个超平面)
将Xi投影到这条直线上,我们找到了下一次迭代的X(i+1),同时我们将这次迭代添加的扰动向量记为ri
接着我们再在X(i+1)这点使用同样的方法,寻找下一次迭代的点X(i+2),同时计算r(i+1)

我们的算法一直迭代,知道找到的X落在分类器的决策边界上,算法终止。

输出:将每一次迭代过程中产生的ri(是一个向量)全部累计起来(向量加法),得到最终的扰动r。

注:最后找到的扰动只能保证我们能将X改变到决策边界上,所以我们还需要在r的基础上乘上一个微小的系数,保证能越过决策边界。

  • 多元分类 and 线性分类器

现在考虑多元分类情况下如何产生对抗样本,首先还是从简单的线性分类器开始考虑。

多元分类情形下,W是一个矩阵,每一行对应着其中一个类别的权重,通过W * X + b,我们最后得到的是一个score value,是一个向量,其中每一维代表每一个类别的评分。最后分类的标准就是找评分值最大的那个类别。所以我们寻找对抗样本,只需要找到一个类别k,使这个类别的评分值比X原来类别的评分值高,那么就可以达到对抗样本攻击的目的。

形式化的描述:

现在我们定义另外一个函数

因为每一个F_k(x)都是线性的,所以这个函数也是线性的,所以存在一个超平面。超平面的一侧函数值大于0,另外一侧小于0.

所以我们只需要添加扰动使这个函数值符号改变,那么我们就找到了一种产生对抗样本的方法。

因为假如现在的样本点X0(正确类别是4,这样说明了上面公式被减掉的那一项是F4(x)),带到函数中值小于0,表面当前类别4的评分值大于第k类的评分值。但是如果现在上述函数的函数值变为正号,说明第k类的评分值大于第4类,所以分类器这时候已经错误分类为第k类了,那么添加的扰动就是X0到这个函数的超平面的投影距离。

但是这个距离可能不是最小的,所以我们需要遍历所有类别k,找到最小的那个投影距离作为最后的扰动距离。

寻找这个类别k的公式

最后的最小扰动公式

  • 多元分类 and 非线性分类器

同前面二元分类问题相似,我们使用的仍然是一阶泰勒展开的思路。

前面的公式是F_k(x) - F_4(x) = 0,现在这两个函数都是非线性函数,我们在Xi这点分别使用一阶泰勒展开,可以得到下面公式:

这个公式表示的是被分类器分类为正确类别的空间。我们找投影点的思路和前面二元分类相似,也是一个不断迭代的过程。

1
2
3
我们在迭代的每一步都会使用一阶泰勒展开,将非线性的函数转为线性函数
然后将Xi投影到这个线性函数所决定的超平面上,得到X(i+1),同时计算投影距离r(i)
然后不断这样一个泰勒展开->投影->泰勒展开->投影的过程,知道最后上述公式的函数值符号发生变化

当然,为了找到最小的扰动,我们需要针对所有的类别,都运用上面的算法,最后取扰动最小的那个。

实验结果

从图中可以看出

  • DeepFool所添加的扰动较[4][FGSM]和[18][L-BFGS]都要小(ro值越小,表明添加的扰动越小,参见ro的定义函数)
  • DeepFool产生对抗样本的时间很短

上图是模型多迭代训练5个epoch,模型的鲁棒性的变化情况,可以看出:

  • 如果使用原来的干净样本,模型鲁棒性基本没有变化
  • 如果使用DeepFool产生的对抗样本(后5个epoch都是在这对抗样本上训练的),那么模型在1个epoch后的鲁棒性就大大提升
  • 使用FGSM产生的对抗样本做训练,模型的鲁棒性反而会下降!!!

然后作者们对这个奇怪的现象又做了另外一个实验。

他们将Deepfool产生的扰动放大,然后再使模型在这个放大的样本上训练,看训练后模型的鲁棒性怎么变化,结果如下图

如果只是deepfool产生的对抗样本,那么可以增加模型的鲁棒性;但是如果这个扰动太大了,反而会使模型鲁棒性降低,这就说明了FGSM算法产生的扰动很大,不是最小的扰动

然后作者们还做了一个实验,说明使用正确的方法(扰动更小的攻击方法)更能说明模型的鲁棒性,而使用那些扰动大的方法来评估模型的鲁棒性,往往会过分评估

作者首先是使用FGSM产生对抗样本,然后在这个样本上多训练了5个epoch。接着使用Deepfool在新的模型(更加的鲁棒)上产生对抗样本,计算ro的值,如蓝线所示;同时使用FGSM再重新生成对抗样本,同样也计算ro值,如红色点线所示。可以看到,后者明显过分估计了模型的鲁棒性,实际上行模型并没有其估计的那么鲁棒。

Donate comment here