One Pixel Attack(对抗攻击) —— 使用差分进化算法寻找最优解
论文原文:One pixel attack for fooling deep neural networks
论文链接:https://arxiv.org/abs/1710.08864
代码:https://github.com/Hyperparticle/one-pixel-attack-keras
Adversarial Attack
对抗攻击不过多阐述,如上图所示,在原图像x0上加上一些perturbations得到x`,可以误导识别网络的识别结果。
AdvGAN
论文链接:https://arxiv.org/abs/1801.02610
简单回顾一下对抗样本领域经典之作——advGAN,将origin image x放入生成器g产生perturbations即g(x),产生的perturbations加在x上从而产生对抗样本用来误导识别网络。
在实际的训练过程中:
advGAN的损失函数:
Ladv是误导错误分类损失,值越小,说明误导对抗样本的误导性越强;Lgan是GAN的损失函数,用来提升图像的质量;Lhinge是用来控制稳定性,将perturbations限制在一定范围内。通过选取合适的α和β的值,D与G之间博弈进行梯度下降。
One Pixel Attack
可以看到,图像的实用性很强,肉眼难以察觉。
如图所示,这个4×4的表格代表着加在origin image上的perturbations,一般的attack是相当于改变整张图片的像素值来产生对抗样本,而该方法仅改变one pixel即可实现对抗攻击。如果改变的这一个pixel整好与背景颜色相差不大,那图像会非常棒。
通过损失函数来看,两者区别就是约束部分:
一般的attack:
是让产生的perturbations小于L或者L-infinity normal必须要小于某个值
而one pixel attack:
是让产生的perturbations的L0范数小于d(d=1),即perturbations种只有一个像素点不为0,也就是对抗样本实际上只改变了一个像素点。
现在问题来了,How do we find the exact pixel and value?有一种笨拙的办法,将224*224个像素点一一更改,找到最优的那个值。但是时间会很长,因为你每次改变你的像素值,都要放到model里去检测一下。下面作者很聪明,将差分进化算法应用了进来。
Differential Evolution
差分进化算法一共分为4部分:
初始化种群:
变异:
交叉:
挑选:
初始化种群之后,变异-挑选三个过程反复进行。初始种群内产生变异,变异种群与原种群进行交叉,再对交叉后产生的种群与原种群进行对比。会使种群不断的淘汰差的个体,留下优良个体,由优良个体组成的新一代种群继续进行此操作。大约进行6次,即可得到较好的种群,可从中挑选最优的值作为最终的结果。
使用DE 有什么好处:
1.有更高的几率可以找到全局最优点。因为变异产生的种群具有多样性的特点且至少使用了一组候选方案。
2.需要目标模型很少的信息,相比于FGSM来说,DE不需要梯度信息,因此不需要model太多细节。
DE具体到one pixel attack上要如何应用?
即初始化种群的时候,我们种群中的每个个体都是(x,y,R,G,B)这样一个5维的向量,去进行种群的一代又一代的进化。
文章图片部分来源于李宏毅YouTube视频。
如有问题,或论文下载,请关注公众号和qq群,欢迎大家进行技术交流,我们还有一些”黑“技术待你探索: