本文主要是介绍attack and defense,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
深度神经网络在图像分类领域尽管有很高的正确率,但是非常容易受到对抗样本的攻击的。这些对抗样本仅有很轻微的扰动,人类视觉甚至系统无法察觉这种扰动(图片看起来几乎一样)。这样的攻击会导致神经网络完全改变它对图片的分类。此外,同样的图片扰动可以欺骗好多网络分类器。
因此,机器光有强度还不够,还需要能够应对来自人类的恶意。
Attact(攻击)
1.什么是attact
在训练好的network中,给一个input,会得到一个正确的 output (输入一个猫的图片得到猫的分类)。
Attack 是在 input 中加入一个干扰,使得最后得到的 output 与实际的结果不符合(输入一个加了干扰的猫的图片,得到鱼的分类)。
2.attact需要什么(LOSS function和Constraint)
1)在 network 的训练中,我们会寻找参数 𝜃 ,使得 loss function 的值最小,即 output与实际结果的误差最小(固定输入,找参数 𝜃)。
2)在无目标的 Attack 中,对于一个确定的 network,我们需要使得得到的 output 与实际结果偏差越大越好(参数 𝜃固定,找到符合要求的输入图片)。
3)在有目标的 Attack 中,对于一个确定的 network,我们则需要使得得到的结果与实际结果偏差越大越好,同时与想要的错误结果误差越小越好。
4)同时,我们的干扰应该与原来的 input 差距/距离不能太大,要在一定范围内,(比如说找到一张和猫很像的图片,但是会被识别成鱼)。
Constraint(怎么定义距离d)
1、L2-norm:x‘ 与 x0 差值的模值
2、L-infinity: x‘ 与 x0 差值的最大值
我们左边的图中的每个方块的颜色分别分别改变很小得到右上角的图片,人们几乎看不到两张图片之前的差距,将左边的图中的右下方的方块颜色改变较多后得到右下角的图片,人们可以看到两个图片存在明显的差距。
对于这两种差异,如果采用L2-norm来说明差距,则能得到一样的差距,但是如果采用L-infinity来说明差距,则会得到下面的图片与原图片差距较大。因此实际应用是使用哪种方法,则需要视情况而定。
3.怎么进行attack
1)在训练传统的 network 时,有不同的训练数据,我们需要使用gradient 来确定 function 的参数。
2)在做 attack 的时候,我们的function是确定的,则需要使用gradient来确定 input 的信息。
但是需要注意的是,x 是有范围的,也就是满足Constraint。在每一次 update x 的时候,需要判断 x所在的范围,如果超出范围则用距离最近的范围内的 x 代替。
attack举例
原来的输入可以得到输出为一只猫,但是 update 50次后的输入就得到了结果海星。两张图片的差值很小,我们将差值放大50倍后可以看到两张图片之间的差异。
(或许有人认为是猫和海星很像,因为它们都是生物,所以将错误结果变成键盘)
(会不会是我们的network很弱,所以导致这种错误)
(不是因为network的问题,因为我们加入的干扰干扰信息并不是随意加入的,而是经过gradient计算出来的)
在高维空间上,我们随机加一些干扰信号(普通杂讯),并不会影响识别结果,而只有在gradient的方向上,加干扰信号会改变识别结果。
在输入的多维向量中,任一维的改变都可能导致结果发生变化,且每一维对结果造成的影响的范围并不相同。
attack的方法
不用的attack方法之间的差异在于
1)使用不同的constraints(也就是不同的distance计算方式)
2)使用不同的优化方法
FGSM不是最强大的,但是非常简单,△x的每一维为+1或者-1,只需要update一次。
attack的两种方法:
白盒攻击:知道模型参数 𝜃 来找到最优的输入(上面讲到的均为白盒)。
黑盒攻击:不知道模型的参数。
黑盒攻击
当我们知道训练数据的时候,我们利用这些训练数据自己来训练一个proxy network,然后通过proxy network来计算gradient来找到一个可以成功攻击proxy的图片,然后用该图片去攻击原来的network black。
当我们不知道训练数据的时候,我们可以先上把一些数据输入到network中,然后得到输出,将该输入输出收集起来作为我们的训练数据来训练proxy network。
实验数据证明黑箱攻击是非常有可能实现的!
当proxy network和target network相同时,攻击成功率最大,network不同时,也是可以攻击成功的。
找到一个神奇的干扰信息能让所有的影像辨识错误。
现实生活中的attack
在人脸识别中,在人脸上加入一个杂讯,让机器将该人识别成另一个人。
通过佩戴眼镜对人脸识别的机器进行攻击,通过眼镜的佩戴使机器无法正确的区分本人从而达到攻击的目的。
除了图像上的attack,在语音和文字上也可以进行attack。
Defense
1、被动防御:不对network做改变
2、主动防御:在network中加入防御
被动防御
1)加防护罩
在图像输入和network之间加上一层防护(平滑)
因为一般攻击信号只是在几个方向上可以攻击成功,而当将图片进行平滑之后,该攻击信号就改变了,也就无法攻击成功。
(当平滑方式泄露之后仍然会攻击成功)
当prediction0和prediction1、prediction2之间的差距很大时,说明被攻击。
2)改变图片
主动防御
找到可能会被攻击成功的图片,将改变后的图片也加入到输入中,重新训练network,不断重复这个过程。
(只能避免一种攻击方式,当该攻击方式被泄露的话,别人换另一种方式进行攻击也会攻击成功)
这篇关于attack and defense的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!