为图像分类生成没有针对性和有针对性的对抗的例子
这个例子展示了如何使用快速梯度信号方法(FGSM)和基本迭代法(BIM) pretrained神经网络产生敌对的例子。
神经网络可以容易的现象称为敌对的例子[1],很小的更改输入分类错误是会导致输入。这些变化通常是人类察觉不到的。
在这个例子中,您将创建两种类型的敌对的例子:
没有针对性,修改一个图像,并被错误地归类为任何不正确的类。
目标——修改图像,并被错误地归类为一个特定的类。
负载网络和图像
负载的网络一直在训练ImageNet[2]数据集,将它转换成一个dlnetwork
。
网=squeezenet;lgraph = layerGraph(净);lgraph = removeLayers (lgraph lgraph.Layers(结束). name);dlnet = dlnetwork (lgraph);
提取类标签。
类=类别(net.Layers(结束). class);
加载图像用于生成一个敌对的例子。图像是一个金毛猎犬的照片。
img = imread (“sherlock.jpg”);T =“金毛猎犬”;
调整图像大小来匹配输入的网络。
inputSize = dlnet.Layers (1) .InputSize;img = imresize (img inputSize (1:2));图imshow (img)标题(“地面实况:“+ T)
准备将它转换为图像dlarray
。
X = dlarray(单(img),“SSCB”);
准备一个炎热的编码的标签。
T = onehotencode (T, 1“类名”、类);T = dlarray(单(T)“CB”);
没有针对性快速梯度信号方法
创建一个敌对的例子使用的诸多FGSM [3]。该方法计算梯度 的损失函数 关于图像 你想找一个敌对的例子,和类标签 。这个梯度描述“推”图像的方向增加分类错误的机会。然后,您可以添加或减去一个小错误每个像素提高图像分类错误的可能性。
敌对的例子是计算如下:
。
参数 控件的大小。一个更大的 值生成一个图像分类错误的可能性增加,但使图像的变化更明显。该方法没有针对性,目的是使图像,因为不管哪个类。
计算图像的梯度对金毛猎犬类。
梯度= dlfeval (@untargetedGradients dlnet X T);
集ε
1和产生敌对的例子。
ε= 1;XAdv = X +ε*标志(梯度);
预测的类原始图像和敌对的形象。
YPred =预测(dlnet X);YPred = onehotdecode(挤压(YPred)类,1)
YPred =分类金毛猎犬
YPredAdv =预测(dlnet XAdv);YPredAdv = onehotdecode(挤压(YPredAdv)类,1)
YPredAdv =分类拉布拉多寻回犬
显示原始图像,扰动添加到图像和对抗的形象。如果ε
值是足够大的,对抗性的图像从原始图像有不同的类标签。
showAdversarialImage (X, YPred XAdv YPredAdv,ε);
网络的正确分类的金毛猎犬的形象。然而,由于扰动,网络分类敌对的拉布拉多寻回犬的形象。一旦添加到图像,扰动是听不清,展示如何对抗的例子可以利用在一个网络的鲁棒性问题。
有针对性的对抗的例子
一个简单的改进FGSM是执行多个迭代。这种方法被称为基本迭代法(BIM)[4]或投影梯度下降[5]。荡妇,扰动的大小由参数控制 代表每个迭代的步长。这是随着BIM通常需要很多,小,FGSM步骤的方向梯度。每一次迭代后,剪辑扰动,确保不超过级 。这种方法可以产生敌对的例子不如FGSM失真。
当你使用没有针对性FGSM,预测的标签的对抗性的例子非常类似于原始图像的标签。例如,狗可能会被误诊为一种不同的狗。然而,您可以很容易地修改这些方法来分类一个图像作为一个特定的类。而不是最大化熵损失,可以减少网络的输出之间的均方误差和期望的目标输出。
生成一个目标对抗的例子使用BIM和大白鲨目标类。
targetClass =“大白鲨”;targetClass = onehotencode (targetClass 1“类名”、类);
增加了ε
值5,设置步长α
25至0.2,并执行迭代。请注意,您可能需要调整这些设置为其他网络。
ε= 5;α= 0.2;numIterations = 25;
跟踪扰动和剪辑超过任何值ε
。
δ= 0(大小(X),“喜欢”,X);为i = 1: numIterations梯度= dlfeval (@targetedGradients dlnet X +δ,targetClass);δ=δ-α*标志(梯度);三角洲(三角洲>ε)=ε;三角洲(三角洲< -ε)= -ε;结束XAdvTarget = X +δ;
预测目标的阶级对抗的例子。
YPredAdvTarget =预测(dlnet XAdvTarget);YPredAdvTarget = onehotdecode(挤压(YPredAdvTarget)类,1)
YPredAdvTarget =分类大白鲨
显示原始图像,扰动添加到图像和目标对抗的形象。
showAdversarialImage (X, YPred XAdvTarget YPredAdvTarget,ε);
因为听不清微扰,网络分类敌对的大白鲨的形象。
对敌对的例子使网络更加健壮,可以使用对抗训练。为一个例子,演示如何训练一个网络健壮的敌对的例子,看看训练图像分类网络健壮的敌对的例子。
万博1manbetx支持功能
没有针对性输入梯度函数
计算梯度用来创建一个没有针对性敌对的例子。这个梯度的梯度叉损失。
函数梯度= untargetedGradients (dlnet X,目标)Y =预测(dlnet X);Y = stripdims(挤压(Y));损失= crossentropy (Y,目标,“DataFormat”,“CB”);梯度= dlgradient(损失,X);结束
目标输入梯度函数
计算梯度用来创建一个目标对抗的例子。这个梯度的梯度均方误差。
函数梯度= targetedGradients (dlnet X,目标)Y =预测(dlnet X);Y = stripdims(挤压(Y));损失= mse (Y,目标,“DataFormat”,“CB”);梯度= dlgradient(损失,X);结束
显示敌对的形象
显示一个图像,对应的敌对的形象,两者的区别(扰动)。
函数showAdversarialImage(图片,标签,imageAdv labelAdv,ε)图次要情节(1、3、1)imgTrue = uint8 (extractdata(图片);imshow (imgTrue)标题(的“原始图像”+换行符+”类:“+字符串(标签)次要情节(1、3、2)扰动= uint8 (extractdata (imageAdv-image + 127.5));imshow(扰动)标题(“微扰”次要情节(1,3,3)advImg = uint8 (extractdata (imageAdv));imshow (advImg)标题(“敌对的形象(ε= "字符串(ε)+ +“)”+换行符+…”类:“+字符串(labelAdv))结束
引用
[1]格拉汉姆·古德费勒,伊恩·J。,Jonathon Shlens, and Christian Szegedy. “Explaining and Harnessing Adversarial Examples.” Preprint, submitted March 20, 2015. https://arxiv.org/abs/1412.6572.
[2]ImageNet。http://www.image-net.org。
[3]Szegedy,基督徒,Wojciech伦巴,Ilya Sutskever,琼·布鲁纳Dumitru Erhan,伊恩·格拉汉姆·古德费勒和罗伯·费格斯。“有趣的神经网络的性质。“预印本,提交2014年2月19日。https://arxiv.org/abs/1312.6199。
[4]Kurakin阿列克谢,伊恩·格拉汉姆·古德费勒和萨米Bengio。“敌对的例子在现实世界。“预印本,提交2017年2月10日。https://arxiv.org/abs/1607.02533。
[5]Madry,亚历山大,亚历山大Makelov,路德维希·施密特,Dimitris齐和Adrian Vladu。“向深度学习模型对对手的攻击。“预印本,提交2019年9月4日。https://arxiv.org/abs/1706.06083。
另请参阅
dlnetwork
|onehotdecode
|onehotencode
|预测
|dlfeval
|dlgradient
|estimateNetworkOutputBounds
|verifyNetworkRobustness