白盒攻击中著名的deep傻瓜算法是什么?
据《AI科技评论》:本文是《窦哥带你学安全》第三辑,最早发表在《AI科技评论》上,未经许可不得转载。
总结
在前面的文章“对应样本的基本原理”中,我们介绍了生成对应样本的基本思想,其中一般思想分为白盒攻击和黑盒攻击。不同的是黑箱检验把模型看成一个黑箱,只有样本可以输入才能得到预测结果。白盒还可以基于黑盒获取模型的参数、梯度等信息。本文将介绍白盒攻击中著名的DeepFool算法。
deep傻瓜的基本原则
在攻击人工智能模型的FGSM算法中,我们介绍了FGSM的基本原理。一个很好的问题是,我们对原图做了多大的修改才能欺骗AI模型?换一种说法,如何通过尽可能少的修改原图来欺骗AI模型?首先我们来看看我们对原图做了哪些改动。假设我们的原始图像是x0file,计数器样本是x1file,将原始图像保存为vector。
#原始图像数据
x0_img = image.load_img(x0_file, target_size=(299, 299))x0_img = image.load_img(x0_file,target_size=(299,299))
x0 = image.img_to_array(x0_img)x0 = image.img_to_array(x0_img)
同样,计数器样本生成的图像被保存为向量。
#计数器样本数据
x1_img = image.load_img(x1_file, target_size=(299, 299))x1_img = image.load_img(x1_file,target_size=(299,299))
x1 = image.img_to_array(x1_img)x1 = image.img_to_array(x1_img)
计算原始图像和计数器样本之间的差异,将其转换为无符号字节类型,并将其保存为图像。
#计算变化
d=x1-x0
im = image . from array(d . as type(NP . uint 8))
im.save(out)
以我们经典的小猪形象为原图,效果如下图所示。
在这里,我们需要引入linalg.norm函数,它的原型是:
x_norm=np.linalg.norm(x,ord = None,axis=None,keepdims=False)
其中顺序代表矩阵的范数。
ord=1,列和的最大值,第一范式ord=2,求特征值,然后求最大特征值得算术平方根,第二范式,也是默认值轴表示处理类型。
axis=1表示按行向量处理,求多个行向量的范数axis=0表示按列向量处理,求多个列向量的范数axis=None表示矩阵范数。经过2分钟27次迭代训练,我得到了一个家猪的新图像,但是通过机器学习模型识别为烤面包机的概率达到了86.086%。
批次:20成本:18.707792%
批次:21成本:26.560178%
批次:22成本:37.765652%
批次:23成本:50.175613%
批次:24成本:65.024394%
批次:25成本:71.812165%
批次:26成本:73.846906%
批次:27成本:86.086935%
基于deep傻瓜算法识别为烤面包机的家猪图片效果如下。
计算相对于原图的修改量,如下图所示,明显小于FGSM。
引用
S. Moosavi-Dezfooli, A. Fawzi, P. Frossard: DeepFool: a simple and accurate method to fool deep neural networks. In Computer Vision and Pattern Recognition (CVPR ’16), IEEE, 2016.刘焱,《web安全之强化学习与GAN》,机械工业出版社1.《fool 干货 | 攻击AI模型之DeepFool算法》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《fool 干货 | 攻击AI模型之DeepFool算法》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1235285.html