寻找对抗样本的过程就是最优化下面的目标函数:
其中k
表示分类器,r
表示添加的扰动,delta
文中表示的含义是分类器在x
这个样本点处的robustness
,其实就是扰动的L-2 norm
。
分类器在整个数据集上的robustness
计算公式如下:
从公式中可以看出,如果添加的扰动越小,计算到的ro
值就越小,相应的根据文中的定义,分类器的robustness
就越好。
- 提出了一种新的计算对抗样本的方法
DeepFool
- 从实验中验证了:新的攻击算法所添加的扰动更小,同时计算对抗样本所消耗的时间更少
- 实验中说明了:如果使用不恰当的算法(FGSM算法)来验证分类器的鲁棒性,那么很可能会过分的评估分类器的
robustness
。
攻击算法细节
- 二元分类 and 线性分类器
这是最简单的一种情况。我们有一个线性分类器,那么可以得到一个超平面将两个类别却分开来。
现在X属于其中一个类别,也就是在直线(或者超平面)的一侧,想要添加扰动使分类器将其分类为另一个类别,那么只需要将X更新到直线(或者超平面)另外一侧就可以了。
现在优化算法的约束条件是最小扰动,那么就只需要找到X到直线(超平面)的最短距离,使X加上这个距离后转换到直线另外一侧,那么就算是找到了对抗样本,同时也就找到了最小的扰动r
(投影距离)。
这时候处理起来就很简单了,只需要使用一次距离公式即可:
分类器:
投影距离:
- 二元分类 and 非线性分类器
现在考虑一种更为普遍的setting。分类器的决策边界是非线性的。
这种情况等价于:寻找X到曲线的最短距离,然后将X加上这个最短距离,即可导致X转移到决策边界的另外一侧,从而被错误分类。
但是直接找这个投影点是不好找的。我们需要用到一种迭代的算法。下面简单描叙一下如何寻找一个点到一个曲线(或者是高维空间中的曲面)的最短距离。
1 | 假设当前是第 i 次迭代 |
注:最后找到的扰动只能保证我们能将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 | 我们在迭代的每一步都会使用一阶泰勒展开,将非线性的函数转为线性函数 |
当然,为了找到最小的扰动,我们需要针对所有的类别,都运用上面的算法,最后取扰动最小的那个。
实验结果
从图中可以看出
- 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值,如红色点线所示。可以看到,后者明显过分估计了模型的鲁棒性,实际上行模型并没有其估计的那么鲁棒。