在图像分类问题中,为了了解神经网络学习到了什么,一个常用的方法就是找出图像中对最后分类结果影响最大的区域,这种方法在文献中有多种叫法,如sensitivity maps, saliency maps, pixel attribution maps等,这里主要讲基于梯度方法。
1.直接求梯度
考虑一个图片分类系统,将输入图片x分为C个类别中的一个,对于每个类,都有一个函数
将输入x映射到类别空间的得分,分类结果则取决于哪个映射值最大,即
如果本身就是可导的,一个简单的方法就是直接对其求x 的导数,有
这里表示x上的每个像素上的微小扰动对类别c得分的影响。
这种方法在实际操作中确实能显示出与分类结果相关的区域,但求得的saliency maps通常在视觉上有很多的噪点(对这些噪点作用目前还不清楚,有可能这些噪点看似随机,实际上对网络的运作有很大的影响,也有可能这些噪点本身就不重要),但正是因为这些噪点的存在,导致只能大致确定相关区域的位置,而不能给出符合人类理解的结果,如下图。

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

考虑到这种急剧的波动,在任何给定的像素点的直接梯度就不如局度平均梯度值来得有意义。
通过在输入图片多次加入随机噪声,对变换后图像求并求均值,达到“引入噪声”来“消除噪声”的效果。

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