美文网首页
SmoothGrad

SmoothGrad

作者: 晓话一下 | 来源:发表于2019-11-14 16:18 被阅读0次

在图像分类问题中,为了了解神经网络学习到了什么,一个常用的方法就是找出图像中对最后分类结果影响最大的区域,这种方法在文献中有多种叫法,如sensitivity maps, saliency maps, pixel attribution maps等,这里主要讲基于梯度方法。

1.直接求梯度

考虑一个图片分类系统,将输入图片x分为C个类别中的一个,对于每个类c\in C,都有一个函数S_c(x)将输入x映射到类别空间的得分,分类结果则取决于哪个映射值最大,即class(x) = \mathop{ \arg \max}_{c \in C}S_c(x)

如果S_c(x)本身就是可导的,一个简单的方法就是直接对其求x 的导数,有
M_c(x) = \partial{S_c(x)}/\partial{x}

这里M_c(x)表示x上的每个像素上的微小扰动对类别c得分的影响。

这种方法在实际操作中确实能显示出与分类结果相关的区域,但求得的saliency maps通常在视觉上有很多的噪点(对这些噪点作用目前还不清楚,有可能这些噪点看似随机,实际上对网络的运作有很大的影响,也有可能这些噪点本身就不重要),但正是因为这些噪点的存在,导致只能大致确定相关区域的位置,而不能给出符合人类理解的结果,如下图。

直接求导

2.平滑噪声梯度

产生噪点的可能原因在于S_c函数的导数在小范围内有很大的波动,毕竟没有任何理由要求该函数是平滑的,而且由于网络通常采用ReLU作为非线性激活函数,所以S_x甚至不是连续可导的。
下面给一特定图片加一微小的扰动,观察其中一个像素的偏导数的变化情况(为说明波动的程度,取变化最大的像素)。

当输入x有微小变化时, 特定像素的偏导值的相对变化(黑色为基准线)
考虑到这种急剧的波动,在任何给定的像素点的直接梯度就不如局度平均梯度值来得有意义。
通过在输入图片多次加入随机噪声,对变换后图像求并求均值,达到“引入噪声”来“消除噪声”的效果。
加入不同程度噪声后的可视化结果

3.其他技巧

3.1 梯度取绝对值(符号仅代表方向,正负梯度处于同等地位)
3.2 限制异常像素值(例如将像素值最高的1%部分设为0)
3.3 将图像与梯度相乘(缺点是当图像像素为零时,则结果永远是零)
3.4 将smoothGrad方法(多次加噪求敏感图,取平均)与其它基于梯度的方法结合
3.5 训练模型时数据加噪

references

APASmilkov, D. , Thorat, N. , Kim, B. , Viégas, Fernanda, & Wattenberg, M. . (2017). Smoothgrad: removing noise by adding noise.

相关文章

  • SmoothGrad

    在图像分类问题中,为了了解神经网络学习到了什么,一个常用的方法就是找出图像中对最后分类结果影响最大的区域,这种方法...

网友评论

      本文标题:SmoothGrad

      本文链接:https://www.haomeiwen.com/subject/xeurictx.html