关于Grad-CAM的自问自答(详细解释了为什么要用Relu的原因)

问题:为什么Grad-CAM最后要用Relu把加权求和后的负值变为0呢(等效于就是忽略掉负的梯度值)? 我是这样想的,因为特征图的梯度大小能看成对c类别分数的影响,梯度绝对值越大说明对c类别分数的影响越大,影响越大说明贡献度越大。相当于这取决于这只取决于梯度的绝对值,所以不明白为什么Grad-CAM要用Relu把负的加权和去掉呢?

:关于这个问题中影响越大说明贡献度越大是不成立的,c类别分数关于这个元素的梯度越大确实说明这个元素对类别c的影响越大,但这影响有可能是呈正面影响,也有可能是呈负面影响,正面影响就是指这个元素值越大,表示对类别c的贡献度越高。关于Grad-CAM的思路,可视化的规则是:所以输出值越大(越大是指的相对值,相对整张图来说)的位置,这个位置的热力图颜色越高亮,表示对类别c越有利,贡献度越高。

首先回顾下Grad-CAM的过程:
1.假设我们还是两个类别:猫和狗,我们要可视化猫这个类别的GradCAM,首先通过softmax得到猫的概率,然后对最后一层卷积层的所有激活特征图求偏导,得到大小与最后一层卷积层大小一致的偏导矩阵。
2.将这偏导特征图做GAP(全局平均池化),得到一个权重向量,向量长度就是特征图数量。
3.将权重向量与特征图对应相乘再相加,此时得到一个二维的矩阵,宽高与特征图一致。
4.将这个二维矩阵送入Relu过一遍,把负数变成0。
5.最后,进行上采样,得到GradCAM。

目前所有神经网络的可解释分析其实都是只能基于倒数网络第二层输出的特征图(即logit的输入)来分析的,因为只有这样才有线性关系(两个变量间一次函数关系叫线性)。具体来说,logit表示的是网络最后一层的输出,即最后一个全连接层的输出。因为只有在分析输入为倒数第二层特征图的时候,logit和输入才是呈线性关系的。如logit表示为y,这个线性关系的式子就是y=wx+b,其中x必须是激活值不能是特征值,因为激活函数属于非线性函数。

所以基于这个结论,因为Grad-CAM是对最后一层卷积层输出的所有激活特征图求偏导,所以输入(最后一层卷积层输出的所有激活特征图)和logit是存在线性关系的,是可以分析的。我们用y=wx+b分析,w是权重即求出的梯度,b是偏置,x是激活值,y表示c类别分数即上述所说的猫类的logit。就发现如果x的权重不变(这时权重w为正时),激活x变大的话最后的logit也会变大。如果w为负时,激活越大猫类的logit反而越小,所以是对猫类起抑制作用。

我们也可以通过泰勒展开式去分析为什么grad为正时,激活值和猫类得分是正相关的,首先类比下面损失函数的一阶泰勒展开式去展开Grad-CAM的猫类别得分函数,这里把损失换为猫类得分就可以了。Taylor公式就是在局部范围内用多项式函数去逼近一个我们不太清楚其性质的函数,从而便于了解它的性质。注意强调的是局部范围即x=x0+△x,也就是说x变量的可变范围要在x0附近,这样在这个小邻域内,表示出的多项式函数就是准确贴近这个原函数的

关于Grad-CAM的自问自答(详细解释了为什么要用Relu的原因)_第1张图片
由上面一阶泰勒展开式可知,我们把J(θ)看作猫类别分数关于激活特征图某个元素的函数,J’(θ0)看作猫类得分关于激活特征图某个元素的梯度。θ和θ0是指激活特征图上这个元素的值大小,且它们的shape是相同的(因为能直接相减),θ表示这个激活值取值为变量,θ0表示激活特征图这个位置的实际取值。可以看出当对于θ0的grad为正时,这个位置的激活值变量θ是和猫类得分成正比的。

我还想再多说几句,对于常见的ReLU函数而言,激活函数就是去“激活”正输出的那些神经节点,“忽略”负输出的神经节点,你可以理解为是为了选择一部分有用的神经元作为输出。这也是为了增加神经网络的非线性,才能去拟合复杂的关系,因为线性的神经网络不可能拟合非线性的映射关系。因为神经网络关注的是正向激活,正的特征值才被激活的,神经网络经过训练后,卷积核自然就把有用的信息通过正值表示出来。负的特征值都压缩了。

这时候可能有人会问怎么确定正的一定是有用的,负的一定是没用的?答案是:负的也是有用的,但是拿常用的ReLU来举例子,负数的输入经过ReLU都变为0了,这就意味着负数的输出能向后传播的信息十分有限(相对于正数而言)。退一步说,如果是Leaky ReLU的话,也是负数被压缩了(相对于正数而言),所以能向后传递的影响也下降了。这里只举这两个例子是因为这两个最常见的激活函数。那么结论就是负数虽然“用处”不如正数,但是还是有用的。

你可能感兴趣的:(深度学习,深度学习,计算机视觉,人工智能,1024程序员节)