经典对抗攻击Deepfool原理详解与代码解读
©PaperWeekly 原创 · 作者|孙裕道
学校|北京邮电大学博士生
研究方向|GAN图像生成、情绪对抗样本生成
论文标题:DeepFool: a simple and accurate method to fool deep neural
networks
论文链接:https://arxiv.org/abs/1511.04599
引言
本文的贡献可以归结如下三点:
作者提出了一种新的计算对抗样本的方法 DeepFool,该方法是基于梯度迭代方法中生成扰动最小的,并且能有较高的攻击准确率。 作者用对抗样本增加训练数据,显著提高模型对对抗扰动的鲁棒性,该部分贡献对抗训练的前期研究。 作者分析了 FGSM 算法来验证分类器的鲁棒性的不合理性,并提出该算法会过分的评估分类器的鲁棒性,并定义了什么是样本鲁棒性,什么是模型的鲁棒性。
3.2 DeepFool攻击二分类器
3.3 DeepFool攻击多分类器
代码解读
5.1 对抗样本库介绍
5.2 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):表示图片类别的数量。
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 的交流群里。