一句话定义
显著性图(Saliency Map)是一张和输入同尺寸的热力图,颜色越"烫"的位置,表示该位置的像素(或文本里的 token)对模型当前这个输出影响越大。
它怎么来的:把"轻推一下"做成图
想象一台看不懂内部结构的机器,你只想知道面板上一排旋钮哪个最关键。办法很土但有效:别的都不动,只把某个旋钮轻轻拧一点点,看指针摆多少。摆得多的,就是重要的旋钮。
显著性图用的就是这个思路,只是把"拧旋钮"换成了求导。以图像分类为例:模型对"猫"这个类别给了一个分数,我们把这个分数对输入的每一个像素求偏导(梯度)。某个像素的梯度绝对值大,意味着"这个像素稍微变一点,猫的分数就会明显变化"——它很重要。把全图每个像素的梯度绝对值画成灰度或彩色,就得到了显著性图。这套做法常被称为"基于梯度的解释"或 vanilla gradient。
一张猫的照片,显著区域通常落在耳朵、眼睛、胡须上,而背景的草地往往一片冷色。这符合人的直觉,也是它流行的原因:朴素、便宜、不用改模型结构,前向反向各跑一次就出图。
和几个"亲戚"的区别
| 方法 | 依据什么 | 粒度 | 典型特点 |
|---|---|---|---|
| 显著性图 | 输出对输入的梯度 | 像素/token 级 | 最朴素,噪声较大 |
| 注意力图 Attention Map | 模型内部的注意力权重 | token/区域级 | 反映"信息怎么流动",不等于重要性 |
| Grad-CAM / CAM | 中间层特征图的梯度加权 | 区域级(较粗) | 更平滑、更稳,常用于 CNN |
| LIME / SHAP | 反复遮挡、扰动输入看输出变化 | 超像素/特征级 | 与模型无关,但计算量大 |
这里有个常见误解值得点破:注意力高不等于影响大。注意力权重是模型的中间产物,可能被后续层"忽略";而且注意力在所有位置上归一化,天然不能跨样本比较大小。显著性图直接问"输出对谁敏感",方向上更贴近"重要性",代价是噪声大、容易被高频纹理带偏。
它有什么用,以及不能当什么用
对做模型的人,显著性图是廉价的听诊器:模型号称学会了"认哈士奇",结果热力图全打在雪地上,你立刻知道它学的是背景这条捷径(shortcut learning);训练数据里如果有水印、边框、标注残留,热力图往往第一个把它们指出来,可以直接用来做数据质检。做文本任务时,把粒度换成 token,就能看到是哪几个词把回答推向了某个方向,对调 prompt 有帮助。
对不做模型的人,它是最容易拿给业务方看的一张图:不用讲公式,指着一片红色说"这里决定了结果"就够了。
但要守住两条底线:第一,它是线索,不是判决——梯度饱和时(比如某些激活函数进入平坦区)重要区域可能被画成冷的,所以实践中常配合平滑、多次采样或换成 Grad-CAM 之类更稳的变体;第二,它回答的是"模型看了哪里",不回答"模型为什么这样想",更不构成因果证据。
一句话收尾:显著性图是打开黑箱时最先摸到的那盏手电筒,光不算亮,但便宜、好使,用对了能省下大量排查时间。具体工具与接口以官方页面为准。
