1.Local Explanation: Explain the Decision
1.1 概述:看看哪个component对结果判断重要
(如果是用pixel,那么x就是一个个的像素,如果是用segment,那么就是把图片分成一块块的。)
local explanation的主要思想就是把input看成由许多components组成,然后从原来的像素x中remove or modify一个component变成x’,把x’加粗样式放到已经训练好的NN中,如果此时NN的结果与原来的结果(input为x时的结果)相差很大,那么就说明这个component对于NN进行判断有很大影响。
1.2 举例来说:
找一个图片,然后用一个灰色的方块,这个方块可以在图片中任意一个位置。当灰色图片位于某个位置导致机器判断改变,那么我们就把这个位置的方块区域看为重要的component。
蓝色区域就是重要区域,把这个区域遮住就会无法判断这是一只国美狗。同理:
1.3另一种方法:基于Gradient
把𝑥1, ⋯ , 𝑥𝑛, ⋯ , 𝑥𝑁的某一项加上一些噪声变成x1,…,xn+Δx,…,xN
看这个噪声对输出𝑦k有什么影响𝑦𝑘 + ∆y
𝑦k是模型预测为分类k的概率。如果影响越大那么越重要
影响可以用|∆𝑦/∆𝑥,计算方式就是求偏微分𝜕𝑦𝑘/𝜕𝑥𝑛
对每个pixel进行一个Δx的扰动,输出yk 是预测为类别k的概率,也会有一个Δy的改变,看看小小的扰动对输出有多大影响。其实就是看偏导数咯。有了每个pixel的偏导数,就可以画一个Saliency Map。每个点的亮度就是偏微分的绝对值,亮度越大说明偏微分的数值越大,也就是越重要的像素位置咯!
梯度方法存在的问题:
梯度可能饱和,比如判断一张图片是不是大象,对于大象鼻子长度这个因素,可能当图片中鼻子长度达到某一个值之后,都会判断为大象了,也就是输出是大象的概率很高而且不怎么改变了,这时输出对鼻子长度求偏导数,结果就很小,那么就可能判断为:鼻子长度对于图片是不是大象的判断是没有很大影响的。显然这一解释是不合理的。有两个解决办法的,自己看去把
Explanation技术也可能被恶意攻击::使用时要小心
啥意思呢?
本来得到的Saliency map挺好呀,就是目标区域对于判断结果很重要;但是这种解释方法也可能被攻击,比如在图片上进行一些小小的噪声扰动,导致解释的结果就变了呢!