本文是李宏毅机器学习的笔记,这是第十一节,介绍了深度学习的可解释性和模型的攻击和防御。
文章目录
1. AI的可解释性
为什么我们需要可解释性的AI,因为回答正确不一定代表它学到了东西,例如神马汉斯,宝可梦、数码宝贝分类器最初版。
下图是为什么AI需要可解释的一些其它原因,另外如果AI有了可解释性,当它预测错误时,我们就知道了它为什么预测错误,更方便进行改进。
对于模型的可解释性和性能,二者都是很重要的。
人脑其实也是一个黑盒子,为什么人可以相信人脑做出的判断,而不相信机器学习这个黑盒子做出的判断呢?也许对人类来说,一个理由对于人类来说是十分重要的,例如下面的一个心理学实验,同样的事情,都是要插队,但是不同的话,可能会让产生不同的想法,所以机器学习需要给人们一个可以让其相信的解释,即使,机器并不是根据此做出判断的。
所以我们需要给出一个理由,让这些人感到合理。
机器学习的可解释性可以分为两部分,分别是Local Explanation和Global Explanation
Local Explanation
Local Explanation也就是判断Why do you think this image is ***的问题,我们可以将图片拆分成很多个component,然后判断哪个component比较重要,去掉之后,network就不工作了。
一种比较简答的方法就是,把每个component都盖住,然后判断network是否还能正常工作。
首先e代表预测结果与真实结果之间的差距,当输入数据有微小变动时,相应的损失也会有变化,然后二者做除法,就可以近似为微分,对每个数据作微分,就可以得到Saliency Map。根据Saliency Map就可以判断模型认为图片的那一部分是很重要的。
在下图的例子中,如果只是简单的得到Saliency Map,会发现有很多"杂讯",草地、天空的因素可能也被考虑了进去,这不具备一个较好的解释性,所以采用SmoothGrad操作,之后就可以突出Gazelle,这样的解释性会更容易让人接受。
不过saliency map会有一些限制,例如大象的鼻子长度很重要,但是并不是鼻子越长越重要,IG对此做了改进。
下面介绍一些常见的网络数据处理过程,我们如何观察这个过程
将每一层的输出通过降维画出来进行分析。
语音数据经过第八个隐藏层之后的输出,就可以发现具有相同内容信息的不同演讲者的数据都聚在一起了。
Bert每一层的输出,将他视为embedding,然后训练分类器,提取其中的信息,例如图中训练一个词性分类器。
语音信息输入之后,发现不同层处理之后,再听其语音信息,会有一些不同。
Global Explanation
解决what does *** look like的问题
以CNN处理手写数字识别为例,把每个filter侦测的内容拿出来
X
∗
X^*
X∗就是filter1可以侦测到的图片包含的样式
做一些操作,使其可以尽可能的像数字
为了得到更清楚的图片,我们采用生成器,根据提取出的信息进行生成图像。
效果如下所示:
也有一种想法,就是根据输入输出,训练一个线性模型,线性模型解释性很强,LIME就是这样的作法。
2. Adversarial Attack
How to Attack
攻击的方式有两种,一种是定向攻击,也就是让图片的类别输出为我们想要的,另一种是非定向统计,也就是只要让模型判断错误即可。
攻击的方法就是加一个微小噪声。
一种简单的防御手段就是在原图片加上一些噪声,这样就可以减小攻击噪声产生的影响。但是这样也会让模型的识别正确率降低。
How to Attack
我们希望生成另一张图片x,x产生的输出y,在非定向攻击时希望与真实标签
y
^
\hat{y}
y^尽可能远,然后再定向攻击,与设定的标签尽可能近,与真实标签尽可能远。两种方式的损失函数如图所示
另外我们希望产生的x与原始图片
x
0
x_0
x0的变化要尽可能小,这样才可以让攻击不被人看出来。
所以我们希望满足
d
(
x
0
,
x
)
<
=
ϵ
d(x_0, x)<=\epsilon
d(x0,x)<=ϵ,计算距离的方式有很多种,例如L2-norm,将数据的差距的平方和,L-infinity计算最大的差距,右图展示的是相同的L2值,改变一个像素或多个像素的结果,从图中可以看出,L-infinity更合适,因为他是计算最大的差距,如果最大的差距都看不出来,就可以了。
下面是计算方法:
还有FGSM这种方法,可以实现一次就可以生成可以进行攻击的数据。
白箱攻击指的是我们知道要攻击的模型的参数。黑箱攻击指的是我们不知道模型的参数。
在黑箱攻击中,如果我们拥有训练数据,我们就可以训练一个代理网络,然后使用这个代理网络生成攻击的图片。
下面是这样做的结果,表一表示只使用一种模型攻击,攻击之后剩余的准去率,如果模型选择的与被攻击的模型相同,我们可以发现,几乎是100%模型的准确率降为0。表2代表了集成模型,每次减少一种模型。
下面的图片介绍了为什么攻击是简单的。有相应的论文链接。
下图展示的只攻击一个像素点的结果
还有一种通用攻击,只要在图片加上这种攻击,任何图片都可以让模型认不出来。
一些攻击的例子
攻击还可以发生在训练阶段,也就是如果在训练数据中加入攻击后的图片,就可以让模型识别某种东西犯错。
Defense
下面介绍下如何进行防御,防御分为主动防御和被动防御。
一种被动防御就加一层filter处理输入的图片,利用Smoothing让图片稍微模糊一些,之后就可以让攻击失效。
不过这会产生一些负面效应,会让模型给出的信心分数降低。
下面是其他的被动防御,一种是将图片进行压缩,如果失真了,则可能存在攻击。另一种是利用生成器生成与输入的图片一模一样的图片,生成器不会生成噪声。
上述方法如果被攻击者知道防御手段,就会又被针对攻击,所以采用随机化防御手段进行防御。
主动防御采用的是Adversarial Training的训练方式,就是一开始就训练一个鲁棒性比较强的模型,使其不会轻易收到攻击。整体思路就是先训练一个模型,然后看它有没有什么漏洞,如果有漏洞,就把他修复。也就是将攻击的数据输入模型在进行训练,可以当作数据增强的一种方式。但是因为我们是根据现有的攻击算法,生成攻击的数据,进行修复,如果有一种新的算法,那么模型依旧不能进行防御。另外这种方式也会消耗很大计算资源