Grad-CAM 与模型可解释性
本页讲解 Grad-CAM(Gradient-weighted Class Activation Mapping,梯度加权类激活映射)——一种让卷积神经网络”说出它在看哪里”的可视化技术。它把模型的分类决策与空间位置关联起来,生成一张热力图叠加在原图上,是深度学习可解释性(eXplainable AI, XAI)领域最经典、被引用最多的方法之一。理解本页内容前,建议先回顾 CNN 卷积神经网络 的卷积层与特征图概念,以及 目标检测与 YOLO 中关于”模型如何定位物体”的讨论。
可解释性(interpretability / explainability) 是指人类能否理解模型做出某个决策的原因。一个模型可能准确率很高,但如果医生无法知道它为什么判断”这张 X 光片有肺炎”,就无法信任和审计它。可解释性正是把”黑箱”变成”灰箱”甚至”白箱”的关键。
想象你带一个蹒跚学步的孩子去动物园,指着一只金毛犬问:“这是什么?“孩子脱口而出:“狗!“你好奇的是——他到底是看到了狗的脸、狗的耳朵,还是只是看到了一片草地就猜了”狗”?
Grad-CAM 就像是给 AI 戴上了一副”眼动仪”。它能记录下模型在做出”这是狗”这个判断时,它的”目光”聚焦在了图像的哪个区域。如果热力图高亮的是狗的头部和身体,说明模型确实学会了识别狗;但如果高亮的是背景里的狗窝、草地,甚至图片角落的水盆,那就说明模型可能在”走捷径”(shortcut learning,又称 Clever Hans 效应)——它并没有真正学会什么是狗,而是记住了”有草地的地方通常有狗”这种虚假的统计相关性。
这个比喻点出了 Grad-CAM 的核心价值:它不告诉你模型给出了什么答案,而是告诉你模型为什么给出了这个答案。在 AI 系统越来越多地进入医疗、自动驾驶、金融审批等高风险领域的今天,“为什么”往往比”是什么”更关键——监管机构、终端用户、工程师都需要这一层解释。
shortcut learning(捷径学习) 的经典案例来自 Lapuschkin et al. (Nature Communications 2019):一个区分”马”和”其他动物”的模型,热力图集中在图片左下角——因为训练集里大部分马图都带有”CORPSETTA”水印。模型学会了水印而不是马。这类问题在分布外(out-of-distribution)场景下会灾难性失效。
为什么选最后一个卷积层?
Section titled “为什么选最后一个卷积层?”卷积神经网络的一个关键特性是:卷积层保留了空间信息。每一次卷积操作都在图像的二维平面上滑动,输出的特征图(feature map)与输入图像存在空间对应关系——特征图的左上角对应输入图像的左上角。
相比之下,网络末端的全连接层(fully connected layer,把上一层所有神经元连接到每一个输出节点)把所有空间位置”摊平”成一维向量,空间信息彻底丢失。因此,Grad-CAM 选择最后一个卷积层的输出作为可视化的基础:它既有足够高级的语义信息(能区分”狗”和”猫”),又保留了粗糙的空间结构(能指出”物体在左边还是右边”)。
这一选择背后有一个更深的直觉:CNN 的层级表征是逐步抽象的。浅层卷积(layer1、layer2)学到的是边缘、颜色块、纹理等低级特征,空间分辨率高但语义弱;深层卷积(layer4)学到的则是”耳朵形状""眼睛轮廓”等高级语义,空间分辨率低(可能只有 7×7)但语义强。最后一层卷积恰好处于”语义足够强、空间还没丢光”的甜点位置。
四步计算流程
Section titled “四步计算流程”假设我们有一个训练好的图像分类 CNN,输入一张图片,模型输出类别”金毛犬”的得分 y^c(上标 c 表示类别 c)。Grad-CAM 的计算分为四步:
第一步:前向传播,记录最后一个卷积层的特征图。
设最后一个卷积层有 K 个通道,输出特征图记为 A。其中 A_k 是第 k 个通道的特征图,尺寸为 H 乘以 W(H 行 W 列),A_k(i, j) 表示位置 (i, j) 处的激活值。整个特征图 A 可以理解为一个厚度为 K 的”三明治”,每一层 A_k 捕捉了某种特定的视觉模式——比如某层可能对”毛茸茸的纹理”响应强烈,另一层对”圆形轮廓”响应强烈。在 ResNet50 中,最后一个卷积层 layer4 输出形状为 [2048, 7, 7],即 K=2048 个通道,空间只有 7×7。
第二步:反向传播,计算目标类别对特征图的梯度。
取目标类别 c 的得分 y^c,对特征图 A 的每一个元素求偏导数,得到梯度张量。梯度 ∂y^c / ∂A_k(i, j) 表示:位置 (i, j) 处第 k 个通道的激活值增大一点点时,类别得分会变化多少。梯度为正意味着”这个位置的这一通道对分类决策有正向贡献”,梯度为负则表示反向抑制。
反向传播(backpropagation) 原本是训练神经网络时用来更新权重的算法:从损失函数出发,按链式法则逐层计算每个参数的梯度。Grad-CAM”借”用了这个机制——不更新权重,只取出中间层特征图上的梯度作为重要性信号。这就是名字里 “Grad” 的来源。
第三步:全局平均池化,得到每个通道的权重 α_k。
将第 k 个通道的梯度图在空间维度上做全局平均池化(Global Average Pooling, GAP),得到一个标量权重:
其中 Z 是特征图的像素总数,即 H × W。这个 α_k 衡量了第 k 个通道对类别 c 的整体重要性——α_k 越大,说明这一通道的特征图对”判定为类别 c”越关键;α_k 为负或接近零,说明该通道对类别 c 贡献很小或起反向作用。
全局平均池化(GAP) 是把 H×W 的二维特征图沿空间维度取平均,压缩成一个标量。它最早由 Lin et al. (Network In Network, 2014) 引入以替代全连接层,好处是减少参数量、降低过拟合。Grad-CAM 把它用在梯度图上,效果类似”投票”:每个像素投一票,取平均得到该通道的总重要性。
第四步:加权求和并过 ReLU,得到热力图。
用每个通道的权重 α_k 对对应的特征图 A_k 加权求和,再通过 ReLU 激活函数:
ReLU(Rectified Linear Unit,修正线性单元) 定义为 ReLU(x) = max(0, x),即把所有负值截断为零。它是深度网络中最常用的激活函数,计算简单、梯度稳定。在这里,ReLU 的作用是只保留对目标类别有正向影响的区域,过滤掉属于其他类别的负向贡献。
最终得到的 L^c_Grad-CAM 是一张 H × W 的粗分辨率热力图。
第五步:上采样并叠加。
由于最后一个卷积层的特征图分辨率远小于原图(通常只有原图的 1/16 或 1/32),需要将热力图用双线性插值(bilinear interpolation,用周围 4 个已知点的加权平均估算未知位置)上采样到原图大小,再做 min-max 归一化到 [0, 1],最后以半透明色块(常使用 jet 色谱:红高蓝低)叠加在原图上——红色(高值)表示模型重点关注的区域,蓝色(低值)表示被忽略的区域。
为什么用全局平均池化而不是求和或最大值?
Section titled “为什么用全局平均池化而不是求和或最大值?”全局平均池化给出的是梯度的”平均重要性”,相比最大池化更稳健(不会被个别异常大的梯度主导),相比直接求和则做了归一化(除以 Z),让权重的大小不依赖于特征图的尺寸。这是一个简单但关键的设计选择。
可以把它理解为一种”注意力先验”:我们不再问”哪个像素最重要”(那是像素级归因方法的事),而是问”哪个通道最重要”,然后让该通道整张特征图都参与贡献。这牺牲了空间精度,换来了语义稳定——这正是 Grad-CAM 热力图看起来平滑、聚焦的原因,也是它比像素级梯度(vanilla gradient / saliency map)更实用的根本所在。
从 CAM 到 Grad-CAM:为什么要引入梯度?
Section titled “从 CAM 到 Grad-CAM:为什么要引入梯度?”原始 CAM(Zhou et al., CVPR 2016)要求网络最后一层必须是全局平均池化 + 单层全连接分类头。它直接用分类头的权重 w^c_k 作为通道权重:L^c = ReLU(Σ_k w^c_k · A_k)。这很优雅,但有两个致命限制:(1) 不能用于带多个全连接层的网络(如 VGG、AlexNet);(2) 不能用于非分类任务(目标检测、分割、问答)。
Grad-CAM 的核心贡献就是把权重从”分类头参数”换成”梯度”,从而绕开了对网络结构的假设——任何可微的输出(分类得分、检测置信度、分割 logits、甚至 caption 的 BLEU 分数)都可以作为 y^c,对任意中间层求梯度即可。这一推广让它几乎适用于所有卷积网络架构和几乎所有下游任务,也是它被引用过万次的关键原因。
Grad-CAM 家族:从 ++ 到 LayerCAM、Score-CAM
Section titled “Grad-CAM 家族:从 ++ 到 LayerCAM、Score-CAM”原始 Grad-CAM 不是终点,后续工作针对不同场景做了改进:
- Grad-CAM++(Chattopadhyay et al., WACV 2018):原始 Grad-CAM 在一张图中有多个同类目标时表现不佳(例如一群鸟、多辆车),因为全局平均池化会把多个目标的梯度混合在一起,热力图往往只高亮最显著的那一个。Grad-CAM++ 为每个空间位置 (i, j) 引入额外加权系数,由二阶和三阶梯度(∂²y / ∂A²、∂³y / ∂A³)决定,能自适应地增强被”淹没”的次要目标区域。代价是计算更复杂、需要更高的数值精度。
- XGrad-CAM(Fu et al., 2020):强调”推论一致性”(axiomatic attribution),要求归因权重满足几个公理(完整性、实现不变性等),在理论性质和经验表现上都优于 Grad-CAM。
- LayerCAM(Wang et al., 2021):把通道权重从 GAP 后的标量换成逐元素的正梯度乘积——只在梯度为正的位置保留贡献,从而得到空间分辨率更高、边界更清晰的热力图,尤其适合细粒度定位。
- Score-CAM(Wang et al., CVPR 2020 workshop):完全抛弃梯度。它把每个通道特征图 A_k 上采样后当掩码乘到原图上,重新前向传播得到新得分 Δy^c_k,用这个”因果扰动”得分作为权重。优点是稳定(不依赖梯度噪声)、可解释性更强(真正的因果贡献);缺点是每个通道都要跑一次前向,K=2048 时非常慢。Faster Score-CAM 用通道降采样把它加速到可用。
- EigenCAM(Mu & Hassan, 2023):对特征图做 PCA / SVD 分解,取主成分作为热力图,不依赖类别标签也不依赖梯度,适合无监督快速筛查。
- Abstract Score-CAM / Hires-CAM(2022-2023):进一步提升空间分辨率或语义抽象层级,是 Score-CAM 的延伸。
归因方法公理化(axiomatic attribution) 是 Sundararajan et al. (ICML 2017) 提出的评估框架:一个好的归因方法应该满足”完整性”(所有特征归因之和等于输出变化)、“实现不变性”(等价网络给出相同归因)、“对称性”等公理。Grad-CAM 不满足完整性(ReLU 会截断负贡献),这是 XGrad-CAM、Integrated Gradients 等方法被提出的理论动机之一。
Transformer 的可解释性:另一条路径
Section titled “Transformer 的可解释性:另一条路径”需要特别强调:Grad-CAM 不直接适用于 Transformer 架构。原因在于 Transformer(如 ViT 视觉 Transformer)内部没有卷积层,最后一个特征表示也不是空间意义上的特征图,而是经过多层自注意力(self-attention)机制混合后的序列表示——每个 patch 的特征已经被全局长程依赖重新组合,空间对应关系远不如卷积特征图直观。
自注意力机制(self-attention) 是 Transformer 的核心:输入序列的每个位置都计算与所有其他位置的相似度(query · key),用 softmax 归一化为注意力权重,再对 value 做加权求和。输出的是”每个位置聚合了全局信息后”的新表示,因此空间位置信息被全局稀释。
对于 Transformer,主流的可视化方法有:
- 注意力图直接绘制:取出某一层某一头的注意力权重,以 query patch 为中心绘制它对其他所有 patch 的注意力分布。简单直观,但单层单头只反映局部信息。
- Attention Rollout(注意力展开)(Abnar & Zuidema, ACL 2020):将多层注意力的效果逐层相乘累积,得到从输入到输出的整体注意力流向,揭示”信息是如何从底层逐步汇聚的”。能解决单层图碎片化的问题。
- Attention Flow:在网络中添加特殊的残差连接路径,用最大流算法估计每个输入 token 对最终表示的贡献,理论更严格但计算昂贵。
- Generic Attention-model Explainability(Chefer et al., ICML 2021):目前 Transformer 归因的标杆方法之一。它结合注意力权重和梯度,为每个 token 分配满足公理的归因分数,既适用于 ViT 也适用于 BERT/Swin/MobileViT 等。许多 2024-2025 年的 ViT 可解释性工作都以它为基线。
- B-COS / Concept Bottleneck on ViT(2023-2025 新兴方向):直接在训练阶段把网络约束成”可解释表示”,让每个神经元对应一个可读概念,绕过事后归因。
简而言之:卷积网络用 Grad-CAM,Transformer 用注意力 / 梯度混合归因,两者是不同架构下的可解释性工具。对 ViT 强行套 Grad-CAM(把 patch embedding 前的 conv 当成”最后一个卷积层”)也可以跑,但热力图语义模糊、分辨率极低,不推荐作为严肃审计依据。
模型调试的三大价值
Section titled “模型调试的三大价值”Grad-CAM 在工程实践中最直接的用途是模型调试与审计:
- 发现 shortcut learning:模型可能学到虚假的统计捷径——比如靠背景(草地、雪地)而非物体本身来判断类别。Grad-CAM 热力图若集中在背景区域,就是危险信号。在自动驾驶、医疗影像等高风险场景下,这类问题可能导致灾难性后果。
- 偏见检测(bias detection):在人脸属性分类任务中,如果热力图总是高亮某个性别或肤色的特定区域,说明模型可能引入了 demographic(人口统计学)偏见。这与 2024-2025 年愈演愈烈的负责任 AI(Responsible AI) 合规要求直接相关。
- 验证决策逻辑:在医疗影像诊断中,热力图应高亮病灶区域(如肺结节、视网膜病变),而非无关的健康组织——这是模型可信赖的必要条件,也是 FDA、EMA 等医疗监管审批的关注点。
下图展示了 Grad-CAM 的完整计算流程,从输入图像到最终热力图:
下图对比卷积网络与 Transformer 两种架构的可视化路径:
下图对比 Grad-CAM 家族几种主流方法的差异:
下面用 PyTorch 和 torchvision 的预训练 ResNet50 演示 Grad-CAM 的核心计算。代码省略了模型加载细节,聚焦于热力图的五步计算逻辑。ResNet50 的 layer4 是最后一个卷积块,输出形状为 [B, 2048, 7, 7]。
import torch, torch.nn.functional as Fimport numpy as npfrom PIL import Imagefrom torchvision import models, transformsimport matplotlib.cm as cm
# 1. 加载预训练 ResNet50 并准备标准预处理model = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V2).eval()preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),])img = Image.open("dog.jpg").convert("RGB")img_tensor = preprocess(img).unsqueeze(0) # [1, 3, 224, 224]
# 2. 注册钩子,前向传播时抓取最后卷积层特征图 A 和反向梯度features = {}def hook(module, inp, out): features["A"] = out # [1, 2048, 7, 7] out.register_hook(lambda g: features.update(g=g)) # 抓取反向梯度handle = model.layer4.register_forward_hook(hook)
# 3. 前向传播 + 选目标类别(也可以手动指定真实标签)out = model(img_tensor)target_class = out.argmax(dim=1).item() # 如 207 对应 golden retriever
# 4. 反向传播拿到梯度,做全局平均池化得到 alpha_kmodel.zero_grad()out[0, target_class].backward()gradients = features["g"] # [1, 2048, 7, 7]alpha_k = gradients.mean(dim=(2, 3)) # GAP,形状 [1, 2048]
# 5. 加权求和 + ReLU,再归一化到 [0, 1]heatmap = F.relu((alpha_k[..., None, None] * features["A"]).sum(dim=1))[0]heatmap = (heatmap - heatmap.min()) / (heatmap.max() - heatmap.min())
# 6. 双线性上采样到原图大小并叠加显示heatmap = F.interpolate(heatmap[None, None], size=(224, 224), mode="bilinear", align_corners=False)[0, 0]orig = np.array(img.resize((224, 224))) / 255overlay = 0.5 * orig + 0.5 * cm.jet(heatmap.detach().numpy())[..., :3]handle.remove() # 用完即移除钩子钩子(hook) 是 PyTorch 提供的一种回调机制:
register_forward_hook在某个模块前向传播完成后触发,可以拿到它的输出;register_full_backward_hook在反向传播时触发。Grad-CAM 同时需要这两类信息——前向输出是特征图 A,反向梯度是 ∂y/∂A,二者缺一不可。钩子是理解 PyTorch 内部机制的重要概念,也是几乎所有可解释性工具(Captum、jacobgil/grad-cam 等)的底层实现方式。
生产环境推荐:与其手写,直接用 jacobgil/pytorch-grad-cam 一行调用:
from pytorch_grad_cam import GradCAM, ScoreCAM, LayerCAMfrom pytorch_grad_cam.utils.image import show_cam_on_imagecam = LayerCAM(model, target_layers=[model.layer4[-1]])grayscale = cam(input_tensor=img_tensor, targets=None) # None = 取预测类它内置 Grad-CAM、Grad-CAM++、Score-CAM、LayerCAM、XGrad-CAM、EigenCAM 等十余种方法,支持分类、检测、分割等多种任务,是 2025 年 CV 可解释性的事实标准库。
- 选择正确的卷积层:始终用最后一个卷积层(如 ResNet 的 layer4、VGG 的最后一组卷积、EfficientNet 的最后一个 MBConv 块)。太靠前的层语义太低层(边缘、纹理),热力图会散乱无焦点;太靠后则空间分辨率太低,热力图变成糊状色块。
- 始终对比目标类与最高概率类:当真实标签和模型预测不一致时,分别对两者生成 Grad-CAM,对比差异往往能直接暴露模型的错误模式(比如模型其实在”看”另一块区域来做判断)。这种”对照组”思维是模型审计的核心。
- Grad-CAM 是定性的而非定量的:热力图颜色深浅没有严格的统计意义,只能用于”模型在看哪里”的定性判断,不能当作因果归因的证据。需要定量归因时考虑 Integrated Gradients(满足公理性的路径方法)或 SHAP(基于博弈论的 Shapley 值)。Adebayo et al. (NeurIPS 2018) 的”健全性检验”(sanity checks)表明,部分热力图方法在随机化权重后仍给出类似结果,提醒我们不可盲目信任。
- 注意 ReLU 的方向性:Grad-CAM 只显示对目标类别的正向贡献。如果要看”哪些区域反对这个分类”,去掉 ReLU 会得到正负双向的热力图(正贡献红、负贡献蓝),信息更完整。这种双向图在多类竞争场景下特别有用。
- 多目标场景升级到 Grad-CAM++ / LayerCAM:当一张图中存在多个同类实例时,普通 Grad-CAM 往往遗漏次要目标,直接用 Grad-CAM++ 或 LayerCAM 能更全面地覆盖。LayerCAM 在细粒度定位上通常优于 ++。
- 梯度不稳定时换 Score-CAM:对训练不足、梯度爆炸/消失的网络,梯度信号噪声大,热力图会闪烁不可复现。此时用无梯度的 Score-CAM 更稳定,代价是推理时间增加约 K 倍(K=通道数)。
- Transformer 别套 Grad-CAM:对 ViT、Swin、MobileViT 等架构应使用 Chefer et al. 的 Generic Attention Explainability 或 Attention Rollout,强行套用 Grad-CAM 得到的热力图分辨率极低且语义模糊。如确需在 ViT 上做归因,pytorch-grad-cam 库对部分 ViT 变体提供了适配。
- 医疗等高风险场景必须做:在医疗影像、自动驾驶、信贷评估等高风险领域,模型部署前应例行生成 Grad-CAM 审计报告,确认模型关注的是临床/业务上合理的区域。2024 年生效的 EU AI Act(欧盟人工智能法案) 明确将高风险 AI 系统的可解释性列为合规义务,这让热力图等归因工具从”锦上添花”变为”法律必需”。
- 热力图不等于因果:Grad-CAM 反映的是”模型对哪些输入特征敏感”,而不是”改变这些特征一定会改变输出”。若需要因果结论,需结合反事实(counterfactual)实验——直接遮挡热力图高亮区域,看预测是否变化。
- Google Cloud Vision API / AWS Rekognition / Azure Computer Vision:在图像分类和目标检测的调试阶段,工程师用 Grad-CAM 类方法验证模型是否关注正确区域,是内部模型审计的标准环节。2024-2025 年随着多模态大模型(如 GPT-4V、Gemini)兴起,这些平台的审计工具也开始向跨模态归因扩展。
- 医疗影像诊断系统(如 Google Health 糖尿病视网膜病变检测、IDx-DR):发布前用热力图确认模型聚焦在视网膜病变特征(微动脉瘤、出血点)上,而非图像边缘的设备标识或患者信息,是获得 FDA 510(k) 批准的关键证据之一。2024 年起,越来越多 AI 医疗器械提交材料中明确包含 saliency map 审计章节。
- 自动驾驶感知(Waymo、Zoox、Tesla):感知模型的可解释性分析中,Grad-CAM 用于诊断”模型是否真正看到了行人,还是根据上下文猜测”。在事故复现和监管调查中,可解释性日志已成为重要的取证材料。
- Hugging Face Spaces 与 Captum / pytorch-grad-cam 教程:大量社区 Demo 把 Grad-CAM 包装成交互式可视化工具,上传图片即可看到预训练模型的关注区域,是可解释性教育的主流示例。Hugging Face 的 Transformers Interpret 库进一步把归因扩展到 NLP 与多模态模型。
- 内容审核系统(Meta / YouTube / TikTok):在 NSFW 或暴力内容识别模型的迭代中,用 Grad-CAM 复查误判样本,定位模型是否被背景水印、边角元素或压缩伪影误导。
- AI 合规与第三方审计(2024-2025 新兴):随着 EU AI Act、美国 NIST AI RMF(AI 风险管理框架)落地,一批第三方审计公司(如 Bavarian、Robust Intelligence、Arthur.ai)把 Grad-CAM 等归因方法纳入其标准合规报告流水线,作为”模型行为透明度”的证据材料。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| Captum | Python | Meta 官方 PyTorch 可解释性库,内置 GradCAM、IntegratedGradients、DeepLIFT、LayerGradAM 等数十种归因方法,2024-2025 仍持续更新 |
| pytorch-grad-cam (jacobgil) | Python | GitHub 高星项目,封装了 Grad-CAM、Grad-CAM++、Score-CAM、LayerCAM、XGrad-CAM、EigenCAM、HiResCAM 等十余种变体,支持分类/检测/分割,是 CV 归因的事实标准库 |
| tf-keras-vis | Python | TensorFlow/Keras 版可视化工具包,提供 GradCAM、SmoothGrad、FasterScoreCam |
| PyTorch Hook | Python | 手写 forward/backward hook 是理解原理的最佳方式,本页代码即是范例 |
| OmniXAI (Salesforce) | Python | 统一可解释性框架,支持 CV/NLP/表格数据,集成 Grad-CAM 等数十种方法,适合一站式部署 |
| Transformers Interpret | Python | 基于 Captum,为 Hugging Face Transformers(BERT、ViT、BLIP 等)提供即插即用归因 |
| lucid / lunzi | Python | 老牌可视化工具,偏向 feature visualization 与 activation atlas |
| bertviz / AttentionViz | JS/Python | Transformer 注意力可视化专用工具,适合 Attention Rollout 探索 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 类激活映射 | Class Activation Mapping (CAM) | 通过卷积特征图生成类别相关热力图的方法家族,Grad-CAM 是其梯度版本 |
| 梯度加权类激活映射 | Grad-CAM | 利用目标类别对最后卷积层特征图的梯度生成热力图,适用于任何卷积分类网络 |
| 全局平均池化 | Global Average Pooling (GAP) | 在整个空间维度上取平均,把 H×W 的特征图压缩成一个标量 |
| 热力图 / 显著性图 | Heatmap / Saliency Map | 用颜色深浅表示每个像素对模型决策贡献大小的二维可视化 |
| 反向传播 | Backpropagation | 从损失或输出出发,逐层计算梯度的算法,Grad-CAM 借用它取特征图梯度 |
| ReLU | Rectified Linear Unit | max(0, x) 激活函数,Grad-CAM 用它过滤负向贡献 |
| 双线性插值 | Bilinear Interpolation | 用周围 4 个已知点的加权平均估算未知位置值,用于把低分辨率热力图放大 |
| 捷径学习 | Shortcut Learning | 模型学到训练集里的虚假统计相关性(如靠背景猜类别),而非真正任务逻辑 |
| Grad-CAM++ | Grad-CAM Plus Plus | Grad-CAM 改进版,引入逐像素二/三阶加权以处理多目标场景 |
| LayerCAM | LayerCAM | 用逐元素正梯度替代 GAP 权重,得到空间分辨率更高的热力图 |
| XGrad-CAM | XGrad-CAM | 满足公理的 Grad-CAM 变体,理论性质更强 |
| Score-CAM | Score-CAM | 不依赖梯度的 CAM 变体,用每个通道特征图扰动输入后的分类得分作为权重,更稳定但更慢 |
| EigenCAM | EigenCAM | 对特征图做 SVD 分解取主成分,无需类别标签也无需梯度 |
| 归因方法 | Attribution Method | 给输入的每个特征(像素、token)分配”重要性分数”的可解释性方法统称 |
| 公理化归因 | Axiomatic Attribution | 要求归因方法满足完整性、实现不变性等公理的理论框架,代表方法为 Integrated Gradients |
| 注意力展开 | Attention Rollout | 将 Transformer 多层注意力逐层相乘累积,得到输入到输出的整体注意力流 |
| Generic Attention Explainability | Generic Attention Explainability | Chefer et al. 提出的结合注意力与梯度的 Transformer 归因方法,是 ViT/BERT 的标杆基线 |
| 钩子 | Hook | 在前向或反向传播中插入的回调函数,用于抓取中间层特征或梯度 |
| 可解释 AI | eXplainable AI (XAI) | 让人类理解模型决策原因的方法论总称,涵盖归因、蒸馏、概念瓶颈、机制可解释性等 |
| 负责任 AI | Responsible AI | 涵盖公平性、可解释性、隐私、安全的工程框架,与 EU AI Act / NIST AI RMF 等合规标准对接 |
| 反事实 | Counterfactual | 通过”若输入改变一点,输出会怎样”来建立因果证据,比热力图更强的解释手段 |
奠基与核心方法
Section titled “奠基与核心方法”- Selvaraju et al. “Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization.” ICCV 2017. — Grad-CAM 原始论文,提出梯度加权类激活映射,被引用过万次,是可解释 CV 的奠基工作。
- Zhou et al. “Learning Deep Features for Discriminative Localization.” CVPR 2016. — 原始 CAM 论文,用全局平均池化 + 重训练分类层得到类激活图,是 Grad-CAM 的前身。
- Chattopadhyay et al. “Grad-CAM++: Generalized Gradient-based Visual Explanation for Deep Convolutional Networks.” WACV 2018. — 改进版,引入逐像素二阶/三阶加权,解决多目标和多实例场景。
- Wang et al. “Score-CAM: Score-Weighted Visual Explanations for Convolutional Neural Networks.” CVPR-W 2020. — 无梯度的 CAM 变体,用因果扰动得分替代梯度,更稳定。
- Wang et al. “LayerCAM: Exploring Hierarchical Class Activation Maps for Localization.” IEEE TIP 2021. — 逐元素正梯度替代 GAP,空间分辨率更高。
- Fu et al. “Axiom-based Grad-CAM: Towards Accurate Visualization of CNNs.” 2020. — XGrad-CAM,满足归因公理的改进版。
Transformer 可解释性
Section titled “Transformer 可解释性”- Abnar & Zuidema “Quantifying Attention Flow in Transformers.” ACL 2020. — Attention Rollout 论文,系统方法量化多层 Transformer 的注意力累积流。
- Chefer et al. “Generic Attention-model Explainability for Interpreting Bi-Modal and Encoder-Decoder Transformers.” ICCV 2021 / ICML 2021. — Transformer 归因的标杆方法,结合注意力与梯度,适用于 ViT、BERT、Swin 等。
- Clark et al. “What Does BERT Look at? An Analysis of BERT’s Attention.” BlackboxNLP 2019. — 用注意力可视化分析 BERT 学到的语言结构,是 Attention 可解释性的经典研究。
评估、审计与风险
Section titled “评估、审计与风险”- Lapuschkin et al. “Unmasking Clever Hans Predictors and Assessing What Machines Really Learn.” Nature Communications 2019. — 用 Layer-wise Relevance Propagation(与 Grad-CAM 同类)揭露模型的 shortcut learning,著名案例为”靠背景判断马”。
- Adebayo et al. “Sanity Checks for Saliency Maps.” NeurIPS 2018. — 对包括 Grad-CAM 在内的多种归因方法做系统性”健全性检验”,提醒不可盲目信任热力图。
- Sundararajan et al. “Axiomatic Attribution for Deep Networks.” ICML 2017. — 提出公理化归因框架与 Integrated Gradients,是 XGrad-CAM 的理论基础。
- Mundler et al. — Captum 官方可解释性库,含 GradCAM、Integrated Gradients 等完整示例,参考 Captum 官方教程。
- jacobgil/pytorch-grad-cam — GitHub 高星实现,支持十余种 CAM 变体与多任务,项目地址。
- 欧盟 AI 法案 (EU AI Act) 与 NIST AI RMF — 2024-2025 年落地的合规框架,明确高风险 AI 系统的可解释性义务,是推动工业界采用归因工具的外部动力,参考 EU AI Act 官方页面。
- 想了解 CNN 的卷积层与特征图如何工作,参见 CNN 卷积神经网络。
- 想了解 Transformer 的自注意力机制为什么会让空间信息全局混合,参见 ViT 视觉 Transformer。
- 想了解模型如何基于特征图定位物体边界框,参见 目标检测与 YOLO。