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

Grad-CAM通过ReLU筛选正梯度影响,聚焦正向特征对分类的贡献。文章深入探讨了ReLU的作用,解释了正梯度与类别得分的正相关性,并通过泰勒展开式进一步阐述。内容涉及神经网络可解释性、线性关系和激活值的重要性。
摘要由CSDN通过智能技术生成

问题:为什么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附近,这样在这个小邻域内,表示出的多项式函数就是准确贴近这个原函数的
泰勒展开式及其拉格朗日余项

在这里插入图片描述
由上面一阶泰勒展开式可知,我们把J(θ)看作猫类别分数关于激活特征图某个元素的函数,J’(θ0)看作猫类得分关于激活特征图某个元素的梯度。θ和θ0是指激活特征图上这个元素的值大小,且它们的shape是相同的(因为能直接相减),θ表示这个激活值取值为变量,θ0表示激活特征图这个位置的实际取值。可以看出当对于θ0的grad为正时,这个位置的激活值变量θ是和猫类得分成正比的。

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

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

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
您可以使用Grad-CAM(Gradient-weighted Class Activation Mapping)来可视化自己的模型。Grad-CAM 是一种可视化技术,可以帮助我们理解度学习模型在做出测时关注的像区域。 下面是使用Grad-CAM的一般步骤: 1. 加载训练好的模型:首先,您需要加载自己训练好的模型。您可以使用深度学习框架(如PyTorch、TensorFlow等)提供的API来加载模型。 2. 准备输入图像:您需要准备一张输入图像,该图像将用于Grad-CAM的可视化。确保将图像进行预处理,以便与训练时使用的预处理方式相匹配。 3. 定义Grad-CAM类:您需要定义一个Grad-CAM类,该类将包含一些方法来计算Grad-CAM热力图并可视化结果。这些方法通常会通过反向传播和梯度计算来实现。 4. 前向传播:将输入图像传递给模型进行前向传播,以获取特征图。 5. 反向传播和梯度计算:使用目标类别对输出进行反向传播,并计算相对于特征图的梯度。 6. 特征图权重计算:对特征图上的梯度进行池化操作,以获取每个通道的权重。 7. 加权特征图:将特征图与相应的权重相乘,得到加权特征图。 8. 热力图生成:将加权特征图进行求和操作,得到热力图。 9. 可视化:使用热力图来可视化模型关注的图像区域。可以通过叠加热力图到原始图像上或者将其作为单独的图像进行显示。 请注意,实现Grad-CAM可能因深度学习框架而异。您可以参考相关的教程或者代码示例,以了解如何在您选择的框架中实现Grad-CAM。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值