现在希望machine learning model不仅能够对抗一般的杂讯,还希望其能对抗一些人类恶意制造出来的想要骗过机器的恶意的攻击
- 对噪声鲁棒且“大部分时间”工作的分类器是不够的
- 我们希望分类器是健壮的可以应付带有恶意的输入讯息的
那真的有一些恶意的信息想要骗过机器的吗?其实生活上还是有的,比如一些垃圾信息,恶意软件,还有一些网络入侵。就以垃圾信息为例,普通的垃圾信息是可以被机器拦截的,但是如果其带有一些恶意的杂讯,骗过了机器,这就是一种恶意的攻击。
现在发现,攻击是比较容易的,而防御是比较困难的
一、攻击
1.对抗攻击基本概念
对于一张图片使其带有一些特殊的认为的信息,而不是一些随机高斯分布的信息,因为这些随机高斯分布的信息是不能对机器造成太大的影响的。而将这加了特殊信息的图片,丢带机器中去识别,便会得到不一样的结果。这个就是所谓攻击要去做的事情。
而现在的问题就变成了如何找出这个特别的信息△x
- Training:
一般的过程就是,通过调整一个神经网络的参数,使得输入一张图片后得到的结果与真实的结果相似,不断训练的使得输出值与真实值的交叉熵越小越好。
- Non-targeted Attack(无目标攻击):
对于无目标攻击中,现在想要找到一个杂讯的信息,让其添加到原来的图片上,并借此希望骗过机器,使得这个输出与原来的真实值可以差距越大越好。与上面的训练方式是不一样的,对于正常的训练来说,其输入是固定的,并希望通过改变网络的参数来调整输出。而对于无目标攻击来说,其网络的参数是固定的,因为这是我们想要骗过的机器,然后我们需要调整输入使得可以得到一个不一样的结果。
- Targeted Attack(有目标攻击):
如果是有目标的攻击,就不仅仅希望加入了杂讯的输出值可以与真实值的差距越大越好,同时还希望其可以与一个错误的答案越近越好。这个错误的答案是自己设计的,是为了让攻击的目标想让输入的图片变成什么的东西。注意这个Ytrue与Yfalse都是一个独热编码,其中一位是1,其他都是0
- Constraint:
但是现在会有一个新的限制,会希望杂讯与输入越接近越好,直到人没有办法发现其中的差异就最好了,但是实际上是有一点点的不同。也就是这个原输入与杂讯的某种距离是小于某一个阈值的。
大概的流程:
对于上面这两者的距离,有两种方法可以计算出来:
1)L2-norm
也就是将相减后的结果求一个平方和
2)L-infinity
也就是去相减之后最大的那个值
其实,也就是有很多种的distance,可以根据不同的任务进行不同的设计,取决于人类的感知来定义这个L。不过在影像的攻击上面,L-infinity可能是比较好的。举一个例子:
在上面的这个图像中,其中一个是对每一个像素稍稍调整的结果,而另外一个是对其中的一个像素调整的结果。这两个输出与输入的原图的L2-norm的distance是一样的,但是对人眼来说,这两者看起来的不一样的,因为觉得第一个输出甚至都没有啥变化。而如果用L-infinity来计算,上面的两张距离是比较小的,而下面的两张图片的L-infinity是比较大的。
现在定义了distance的计算公式,然后可以得到一个优化函数:
现在是希望能够找到一个杂讯可以使得输出值与真实值差距越大越好,并且希望这个杂讯与原输入的L-infinity不能超过某一个阈值。就像训练一个神经网络,只是网络参数𝜃被替换为输入𝑥` ,但是由于其还有后面的一个现在,不能超过某一个阈值,所以可以将问题进行拆解。
1)不考虑阈值的限制
对于这个问题,可以直接用梯度下降来求解,然后初始值就是原输入x0,让后通过求梯度进行一个更新
2)考虑阈值的限制
考虑了阈值之后,只需要对更新好的内容进行一个判断,如果此时超过了阈值,那么就对其进行一个修正,也就是定义一个fix函数而已。具体的操作是,对于这个更新好的杂讯x0与原输入x求L-infinity或者是L2-norm,如果超过了阈值之后,就选择限定范围内最接近阈值的那个xt值,让其替代杂讯x0。
如图所示:
超过了圆域或者是矩形的区域,就将其拉到限制内最近的那个点值,来替换x0
以上的操作,可以使得添加在图片上的杂讯是一些特殊的杂讯,因为其是经过梯度训练的。而一般的高斯分布噪声是不能骗过机器的
而加入了经过训练的噪声,其实人眼确实基本看不出来
所以,可以看见,神经网络其实是可以轻易的被攻击的。而且被攻击了之后人眼还比较难以观察。其中一个比较合理的解释是,在一个高维的空间中,比较高的置信度分数在存在与一个比较狭窄的范围,超过了这个范围就会突变成另外一个物品。这与神经网络是无关的,其他的一些比较传统的方法其实也是可以被攻击的。
其实attack的方法是非常多的,下面这些方法是一些参考:
Attack Approaches
- FGSM (https://arxiv.org/abs/1412.6572)
- Basic iterative method (https://arxiv.org/abs/1607.02533)
- L-BFGS (https://arxiv.org/abs/1312.6199)
- Deepfool(https://arxiv.org/abs/1511.04599)
- JSMA (https://arxiv.org/abs/1511.07528)
- C&W (https://arxiv.org/abs/1608.04644)
- Elastic net attack (https://arxiv.org/abs/1709.04114)
- Spatially Transformed (https://arxiv.org/abs/1801.02612)
- One Pixel Attack(htps://arxiv.org/abs/1710.08864)
这些五花八门的攻击手段,其实只是用了不同的distance作为限制;然后用了不同的优化方法optimization methods来minimize这个损失函数,同时符合那个限制。
2.对抗攻击类型
1)白盒攻击
下面介绍其中的一种攻击方法:FGSM
步骤:首先计算出损失值,然后对输入x每一个数值进行求梯度,如果梯度<0,△x=1;如果是梯度>0,△x=-1;也就说,只需要对x0-ε 或者是x0+ε,就可以了。FGSM不在意梯度的值,其只在意梯度的方向。只要是梯度是指向左下角的那个区域,x*都是会跑到右上角去的。原理就是设置了一个比较大的学习率,所以只需要update一次就足够了。
在之前的攻击中,我们固定网络参数𝜃以找到最优𝑥`。 要进行攻击,我们需要知道网络参数𝜃,这称为白盒攻击。而既然攻击的时候需要知道神经网络的参数,那其实保护一下网络的参数,就是安全的了。其实这样是不够的,其实还有一种攻击方法为黑箱攻击,也就是无需知道神经网络的参数情况下,也是有办法对一个machine learning的model进行攻击的。
2)黑盒攻击
现在对于一个网络来说,我们不知道他的架构是什么样的,对我来说就是相当于一个黑盒。但是如果知道了这个网络是用什么样的训练集去训练出来的,那么就可以根据这个训练集去训练一个我们自己的网络,将其称为proxy network。然后我们用之前用到的方法去攻击这个proxy network,然后得到了一个可以成功攻击proxy network的图片,那么将这个图片再去攻击原来的黑盒,往往是可以成功的。
那么另外的一个保存措施是需要保护好训练资料,从保护网络参数---->变成了保护训练资料,但是其实这样做还是没有用的。因为别人只需要丢大量的图片进去,得到一个输出结果,然后收集这些训练结果,同样还是可以得到一个proxy network的。这时候过程就与上述的一样了,再次可以采用定向攻击的方式来攻击一个pretrain的model。
ps:利用神经网络去SVM模型还是可以会成功的。
3.对抗攻击例子
1)Universal Adversarial Attack(通用对抗性攻击)
刚刚所提到的攻击思路,是要为每一张的image找到不同的attack的,因为不同的图片做出梯度更新往往是不一样的,杂讯添加上去也是不一样的,也就是说是各自独立的训练更新的。也就是每张不同的image都需要加上不同的ε用来攻击。但是,有人尝试了一个得到了通用的杂讯,将其添加到数据集的每一张照片上,多数的时候都可以辨识错误。
如果有人贴这样的一张杂讯到监视摄影机上,就可以让这个监视摄影机辨识的结果通通都是错的。 最后达到的效果就是不需要为每张不同的影响找到不同的杂讯;找到一个神奇的杂讯,可以让以上的辨识结果几乎都是错的。黑箱攻击还是可以成功的。(参考:https://arxiv.org/abs/1610.08401)
2)Adversarial Reprogramming(对抗性重编程)
这个内容的脑洞就是,现在本来一个训练好的网络,是可以正常的分辨动物这样子的功能的。但是,现在可以不需要整个这个网络的参数,也就是固定住这个网络,然后让其做到数图片上方格的个数。
具体就是将有不同个数方格的图片,丢到一张杂讯图像的中间,而本来是用于分辨动物的网络现在还可以进行对方格个数的分辨,这个是比较好玩的。只需要给他看一些特殊的杂讯信息就改变了神经网络原来要做的事情。(参考:GamaleldinF.Elsayed,IanGoodfellow,JaschaSohl-Dickstein,“Adversarial Reprogramming of Neural Networks”,ICLR,2019)
3)Attack in the Real World
对于上述的攻击,将图片打印出来之后,透过镜头,网络还是会辨认出错的,也就是说,这些的攻击方式其实是可以在现实的生活中做到的。比如说,人脸辨识系统,是有安全漏洞的。这直接让机器看杂讯不太合理,所以有人的想法就是将杂讯全部集中在一副眼镜镜框上面,然后其他的人可以通过带一副这样的眼镜镜框去骗过机器的识别。然后这个团队在现实的生活中还真的做出了这样的一个眼睛,然后还真的在现实世界中做了实验,实验结果却是是可以成功的扰乱了机器的判断。
这个攻击需要考虑比较多的因素:
- 需要的绝大多数的角度上的攻击都是成功的
- 杂讯的强度太弱,打印机可能印不出来,或者摄像头可能捕捉不到这样的杂讯解析不到效果
- 杂讯不能用那些印表机印不出来的颜色
(参考:https://www.cs.cmu.edu/~sbhagava/papers/face-rec-ccs16.pdf)
二、防御
对抗性攻击无法通过权重正则化、dropout 和模型集成来防御。
两种类型的防御:
- Passive defense被动防御:
- 在不修改模型的情况下查找附加图像
- 异常检测的特殊情况
- Proactive defense主动防御:
- 训练对对抗性攻击具有鲁棒性的模型
1.Passive defense
被动攻击的概念大概是这样的,现在有一个神经网络,然后其看到了一张有被攻击过的图片然后会将这只猫看做是一个键盘。那现在在这个network前加上一个filter,这个filter就像是一个防护罩,一般没被攻击过的图像通过这个filter之后不会有什么事情,但是如果是有被攻击过的图像,其伤害希望可以减轻。(将图像做平滑处理就是一个有用的filter,smoothing是不会伤害原来的图像的)
1)Feature Squeeze
squeeze1,squeeze2其实就是不同的filter。如果发现做了squeeze之后的图像与没有做squeeze之前的差别比较大的话,那就说明这张图像可能是被攻击过的。
2)Randomization at Inference Phase
同样的,简单的对输入的图像做一系列比较简单的改动,比如随机缩放一下增加补丁等等,如果改动后与改动前的差距比较大,那么图像也可能是被攻击过的。(参考:https://arxiv.org/abs/1711.01991)
2.Proactive defense
主要思想就是:找到漏洞,然后补起来
需要再次迭代T次,在每一个iteration中对每一张图片,用某一张攻击算法去找到他的attack image;然后将这些attack成功的图像当成是训练data,然后将这些训练data重新打上跟原来image一样的标签,然后再将这些新的资料拿去训练神经网络。这个过程有点像是数据增强。后来这种方式称为自对抗训练,称为了数据增强的一种方法。
但是,需要注意的是,如果在找漏洞的过程中用的是攻击算法A;但是实际上人家采用攻击算法B你还是防御不了的。所以找漏洞的方法不可以被泄漏出去。
所以如何有效防御还是一个尚待解决的问题。