经典对抗攻击Deepfool原理详解与代码解读

©PaperWeekly 原创 · 做者|孙裕道
算法

学校|北京邮电大学博士生微信

研究方向|GAN图像生成、情绪对抗样本生成网络

论文标题:DeepFool: a simple and accurate method to fool deep neural networks
架构

论文连接:https://arxiv.org/abs/1511.04599函数

引言学习

Deepfool 是一种经典的对抗攻击方式,它首次对样本鲁棒性和模型鲁棒性镜进行了定义,而且它能够精确计算深度分类器对大规模数据集扰动,从而可靠地量化分类器的鲁棒性。该论文通俗易懂,而且有大量细节丰富的图示,有高中的代数知识基本上就能看懂算法的核心原理。本文会对 Deepfool 算法的原理进行详解,最后一部分是对 Deepfool 核心代码的解读。测试

论文的贡献
优化

本文的贡献能够归结以下三点:人工智能

  • 做者提出了一种新的计算对抗样本的方法 DeepFool,该方法是基于梯度迭代方法中生成扰动最小的,而且能有较高的攻击准确率。spa

  • 做者用对抗样本增长训练数据,显著提升模型对对抗扰动的鲁棒性,该部分贡献对抗训练的前期研究。

  • 做者分析了 FGSM 算法来验证分类器的鲁棒性的不合理性,并提出该算法会过度的评估分类器的鲁棒性,并定义了什么是样本鲁棒性,什么是模型的鲁棒性。

模型介绍

3.1 鲁棒性定义

给定一个分类器,样本鲁棒性是使得模型出现误分类的最小扰动,具体形式以下:

其中, 为干净的样本, 为模型预测的标签。 为样本 在模型分类器 的鲁棒性。进而做者又定义出了模型在整个数据集上的鲁棒性,具体形式为:

这是一种指望的形式。这里有一个困惑,若是让我本身来定义模型的鲁棒性具体的形式为:

即表示全部样本鲁棒性的指望。可是做者的这种定义是在分母中都除以一个样本的 2 范数,做者的模型鲁棒性的定义与我理解的模型鲁棒性的定义的优劣须要往后验证。模型鲁棒性是更好地理解当前网络体系结构的局限性和设计加强健壮性的方法的关键。

3.2 DeepFool攻击二分类器

该论文写做方式是由浅入深,先介绍了 DeepFool 攻击二分类器的算法。

上图为对抗样本攻击线性分类器的图示。其中 为一个二分类器。 为干净样本点 的最短距离,即为样本点 在分类器 中的鲁棒性。 为分类超平面。

具体的有以下目标函数:

为了更好的理解上图对抗样本攻击二分类器的原理,我从新画了一个图来对其进行解释。以下图所示,在二维平面中,有一条直线 和一个点 ,其中直线的法向量为 ,由高中的点到直线的距离知识可知点 到直线 为:

若是点 移动到直线的移动的位移为(须要注意的是位移带方向):

当从二维二分类器扩展到多维二分类器即为论文中所给出的公式:

上面目标函数能够经过迭代的方式来进行求解以得到最小对抗扰动,能够从新转换成以下的优化形式:

下面为具体的推导过程:

已知,梯度 ,因此有:

又由于梯度的模长为 1,因此两边同乘以 有:

最后,移项可获得最终论文中给出的公式:

根据这个迭代公式会有以下的算法:

下图示对算法的生动的解释,以 n=2 为例, ,绿色平面是 点处的切平面为 ,则此时会投影出现迭代点 ,而后依次类推,最终将全部的扰动综合起来即为所求的对抗扰动。

3.3 DeepFool攻击多分类器

介绍完 DeepFool 攻击二分类器,这一节介绍有关 DeepFool 攻击多分类器。分类器预测标签以下公式所示:

其中, 是预测几率向量 的第 k 类的几率份量。多分类器模型误分类的优化函数以下所示:

为了更好的理解以上优化形式的含义,本身作了一个图示便于理解。以下图所示,左半部分是干净样本的几率向量的输出,预测的类别为 ,加入对抗扰动后,预测类别变成了

以下图实例所示,已知一个四分类器,干净样本 被分为第四类中。 是分类的边界超平面。绿色区域为一个凸区域能够表示为:

根据高中的点到直线的距离公式,能够推算得知点 到三条边界最短的距离的计算公式为:

与 DeepFool 攻击二分类器类似,则多分类器的对抗扰动为:

综合以上 DeepFool 攻击多分类器模型的原理得到以下的算法流程:

实验结果

做者在 MNIST、CIFAR-10 和 ImageNet 图像分类数据集上训练的深度卷积神经网络架构上测试 DeepFool 算法。下表显示了使用不一样方法计算的每一个分类器的精确度和平均鲁棒性。而且还展现了每种方法计算一个对抗性样本所需的运行时间。能够看出,DeepFool 估计的扰动比用其它方法计算的要小,而且运行的时间更短。

下表给出的是 DeepFool 和 FGSM 攻击的平均扰动状况,会发现 DeepFool 的平均扰动要远小于 FGSM,这就印证了 FGSM 过度的评估了分类器的鲁棒性。

下图表示的是不一样微调策略中平均对抗扰动的变化状况,DeepFool 生成的对抗样本的通过微调显著提升了网络模型的鲁棒性,其中 MNIST 网络的鲁棒性提升了 50%,NIN 的鲁棒性提升了约 40%。

代码解读

5.1 对抗样本库介绍

DeepFool 的源码是来自于 torchattacks 轻量级的对抗样本库,调用 API 方法很简单库中经典的对抗攻击方法有 FGSM,BIM,RFGSM,CW,PGD,DeepFool 等。下载命令:pip install torchattacks。

5.2 DeepFool代码解读

DeepFool 攻击是一种基于迭代的攻击方法。以下图所示,DeepFool 类包含两个方法,一个是超参数的初始化,另外一个生成对抗样本。

  • self.steps = steps:DeepFool 迭代的次数,默认值为 3。

  • image = images[b:b+1, :, :, :]:取出 batch 中的一张图片。

  • output = self.model(image)[0]:返回该图片的预测标签向量。

  • _, pre_0 = torch.max(output, 0):返回预测向量的最大值的索引。

  • f_0 = output[pre_0]:返回预测向量的最大值。

  • grad_f_0 = torch.autograd.grad(f_0, image):求出预测向量的最大值对图片的梯度。

  • num_classes = len(output):表示图片类别的数量。

接下来进入 DeepFool 代码的核心部分,会结合论文中的算法进行讲解。

  • if pre != pre_0::程序的终止条件,若是预测标签与原标签不符合,就输出对抗样本。

  • f_k = output[k]:计算每个类别的预测向量的份量。

  • grad_f_k = torch.autograd.grad(f_k, image):求出每个类别中预测向量的份量对图片的梯度。

  • f_prime = f_k - f_0:表示原论文中的份量差值:

  • grad_f_prime = grad_f_k - grad_f_0:表示原论文中的梯度差值:

  • value = torch.abs(f_prime)/torch.norm(grad_f_prime):为原论文中扰动量份量模长的求法:

  • r = (torch.abs(f_prime)/(torch.norm(grad_f_prime)**2))*grad_f_pre:为 DeepFool 生成的对抗扰动:

    image = torch.clamp(image + r, min=0, max=1).detach():DeepFool 生成的进行截断的对抗样本。

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许能够成为一座桥梁,促使不一样背景、不一样方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或我的,在咱们的平台上分享各种优质内容,能够是最新论文解读,也能够是学习心得技术干货。咱们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系我的原创做品,来稿需注明做者我的信息(姓名+学校/工做单位+学历/职位+研究方向) 

• 若是文章并不是首发,请在投稿时提醒并附上全部已发布连接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site 

• 全部文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便咱们在编辑发布时和做者沟通

????

如今,在「知乎」也能找到咱们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅咱们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。若是你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。