Grad-CAM 热区为何不等于逐像素贡献:先算通道权重再看图

昨天 3阅读

看到一张红色热图,人很容易把亮区读成“每个像素给预测贡献了多少”。Grad-CAM的计算实际先把目标梯度压成每个通道一个权重,再对特征图加权。用两张小图走完这一过程,可以检查AI是否把粗粒度定位、逐位置敏感性和精确贡献分摊混在一起。

Grad-CAM 热区为何不等于逐像素贡献:先算通道权重再看图

AI生成的概念示意图:多张特征平面组合成粗略热区;这不是实际模型热图,不表示植物的真实识别依据。

从一个完全写得出的读出函数开始

设第一通道A₁的两行为(1,0)、(2,1),第二通道A₂为(0,2)、(1,3)。定义目标分数s为各位置激活与对应系数相乘后相加。第一通道系数的两行为(1,3)、(0,0),第二通道为(-2,0)、(-1,-1),没有偏置。

这个线性读出给出分数s=-3。它是可以为负的目标分数,不是概率。由于读出是线性的,分数对每个激活的梯度恰好就是对应系数;本地程序也以有限差分逐项检查了八个导数。这里没有声称这些特征来自已经训练的图像网络。

每个通道先得到一个平均梯度

Grad-CAM对同一通道的四个空间梯度取平均。于是α₁=(1+3+0+0)/4=1,α₂=(-2+0-1-1)/4=-1。这里平均的是梯度,不是激活,也不是跨通道把每个位置的梯度混在一起。

接着用这两个标量组合特征图:H=α₁A₁+α₂A₂=A₁-A₂。H的两行为(1,-2)、(1,-2)。最后逐位置做ReLU,把负值置零,热图成为(1,0)、(1,0)。两处正值均为1,是这份构造输入上的精确结果。

另一条看似相近的计算会得到不同图

若不先求通道平均,而是在每个位置直接计算“当地梯度乘当地激活”,再跨通道相加,两行会变成(1,0)、(-1,-3)。它的左下位置是-1,而Grad-CAM未截断的左下位置是1,连符号都不同。

原因是Grad-CAM把一个通道各处不同的梯度换成了共同权重。第一通道左下方原本梯度为0,但它仍会使用通道平均权重1。不能把这一步产生的定位图解释成每个位置的精确加性贡献;截断后热图之和为2,也不等于目标分数-3。

ReLU的顺序同样重要。如果先把两个加权通道分别截断再相加,负权重通道会被整体清除,结果变成A₁,即(1,0)、(2,1),与正确顺序不符。应先允许通道之间相加和抵消,最后再保留正部分。

显示热图之前保存原始数值

可以让AI交付通道激活、目标标量、完整梯度、平均权重、截断前结果和截断后结果,而不是只交一张彩色图片。用本文小例逐项断言,再接真实模型的指定层,能发现维度平均错误、取错目标以及激活和梯度配错批次的问题。

换目标类别通常会改变梯度权重。使用类别logit还是softmax后的概率,也会改变导数含义,应在报告中固定。若批次内有多张图,要核对取的是每张图对应的目标,不能无意把其他样本的信号混进来。

把二乘二热图放大成高清叠加图,只改变了显示分辨率,没有补回细边缘证据。每张图单独做最小最大归一化还会丢掉绝对尺度:很小的信号也能被画得鲜红。保存未经归一化的范围,并明确全零热图怎样处理,才便于比较与复核。

最终读者得到的是检查解释工具的步骤。某区域高亮可以提供排查线索,却不足以单独证明模型学到了正确因果关系。需要时再结合受控遮挡、错误案例和其他验证,且说明这些验证各自改变了什么输入条件。

资料核对日期:2026年10月3日。本文数值为原创教学设定,已用本地程序复算,未训练真实模型或验证生产效果。

参考资料

Selvaraju等:Grad-CAM,第3节公式1与公式2


文章版权声明:除非注明,否则均为云鹊BLOG原创文章,转载或复制请以超链接形式并注明出处。