赞
踩
本篇博客出于学习交流目的,主要是用来记录自己学习中遇到的问题和心路历程,方便之后回顾。过程中可能引用其他大牛的博客,文末会给出相应链接,侵删!
FGSM(Fast Gradient Sign Method)算法
特点:白盒攻击、
论文原文:Explaining and Harnessing Adversarial Examples
大牛们在2014年提出了神经网络可以很容易被轻微的扰动的样本所欺骗之后,又对产生对抗样本的原因进行了分析,Goodfellow等人认为高维空间下的线性行为足以产生对抗样本。
对抗样本的线性解释
常见的数据图像大部分表示成1-255,8bit/像素点的形式,所以能够表示样本的精度十分有限,由于这种有限的表达能力,可能在原始样本上加小小的扰动就被误分类。现在我们有:
原始图像:
扰动:
对抗样本:
当存在一个小到可忽略的
现在考虑加入权值向量
对抗扰动通过
非线性模型的线性扰动
我们假设神经网络都太线性了以至于不能抵抗对抗样本。常见的LSTM、ReLU和maxout网络都趋向于线性表现,而类似sigmod这种非线性性模型也把大量的时间花在非饱和和线性系统中。(这里我也不怎么理解,望大神讲解)
我们从公式开始理解(fast gradient sign method):
模型参数:
模型输入,即图像:
结果标签:
损失函数:
符号函数:
我们可以线性化代价函数的当前值θ,获得最优max-norm
算法的主要思想:让我们的变化量与梯度的变化方向完全一致,那么我们的误差函数就会增大,那么将会对分类结果产生最大化的变化。sign函数保证了变化方法同梯度方向一致。对损失函数求偏导,即得到权值向量
画个可能不是很贴切,但是可以帮助理解的图(个人理解,有错误欢迎指出)
首先明确,横坐标表示单维x输入值,纵坐标表示损失值,函数图像是损失函数
线性模型与权值衰减的对抗性训练
如果我们可以考虑的最简单的模型是逻辑回归。在这种情况下,FGSM是准确的。
这部分没看懂,贴原文
代码实现主要参考链接:Python3环境下cleverhans对抗样本防护编译与测试(含FGSM攻击与ADV防护),但是原博客没有直接给出可运行的代码,所以自己基于基础代码改了一下,在博客最后附下载链接。
工程如下:
fgsm.py 可直接运行主程序,实现FGSM算法生成对抗样本,也能实现防御
eval_on_adversarisl.py 实现防御训练模型
checkpoint 两个防御模型
input 原始输入图像
output 对抗样本
通过修改checkpoint_path来实现调用不同模型:
inception_v3.ckpt 是原始经典模型
adv_inception_v3.ckpt 是Step L.L.防御训练后的模型
ens4_adv_inception_v3.ckpt 是集成四个模型Step L.L.防御训练后的模型
结果展示函数:
classify() 展示预测结果最高的类别
show_classify() 展示图像以及预测结果最高的前十个结果,如下图:
代码主要调用cleverhans集成库,里头还有许多现成的攻击算法可以调用。
代码下载:由于上传大小受限,分三部分上传,将三个分卷下载后同时解压即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。