封面图

系列:开源 AI 论文复现实验与代码解读
日期:2026-08-25
适合读者:研究生、科研新人、希望把 Transformer 内部诊断做扎实的工程读者
检索日期:2026-08-25

摘要

Attention 热力图很容易让人产生一种错觉:颜色越亮,那个 token 就“解释”了模型为什么这样预测。这个说法只对了一半。热力图确实展示了某一层、某个 head 在 softmax 后给不同 Key 位置分配的权重;但它通常不能单独证明输入特征对最终输出的因果贡献。本文的复现目标不是下载一个大模型展示漂亮截图,而是把注意力矩阵的来源、形状、可视化协议和解释边界拆清楚:先用最小脚本生成可检查的 toy attention,再对照 BERTViz、Hugging Face 输出格式和解释性论文,建立一套“能看、会疑、可复查”的实验记录。

本次实际验证受限于本地环境:torchnumpymatplotlib 均未安装,因此没有运行真实 BERT 或导出 toy PNG 热力图;配套脚本的标准库形状与 mask 检查已通过,图像导出路径需安装依赖后人工核验。文章所需的正式封面和方法图已用内置 imagegen 补齐,并完成视觉检查。

目录

  1. 为什么 Attention 图值得复现
  2. 热力图到底画的是什么
  3. 最小代码:从 score 到矩阵
  4. 官方工具怎么读:BERTViz 与 Transformers
  5. 解释边界:诊断不等于因果
  6. 评测协议与失败排查
  7. 可以继续研究的问题
  8. 总结与参考资料

为什么 Attention 图值得复现

注意力机制最初的吸引力之一,是它把序列中“谁看谁”的关系变成了一个概率分布。《Attention Is All You Need》中的 scaled dot-product attention 会对 Query 与所有 Key 的相似度做归一化,再用这些权重加权 Value。于是研究者自然想把权重画成矩阵:行是 Query token,列是 Key token,颜色越深表示该 Query 越多地使用该 Key 的 Value。

这张图的复现价值在于调试,而不是美化论文。对工程读者来说,它能快速暴露三类问题:mask 是否写反,padding 位置是否仍被关注,某些 head 是否退化为只看自己或只看特殊符号。对研究生来说,它是一种提出假设的入口:如果某个 head 总是关注分隔符,它可能承担句边界聚合;如果某个 head 常看相邻位置,它可能近似局部卷积。但这些都只是可检验假设,不是最终解释。

本文把目标限定为“可视化协议复现”。我们不声称复现 BERT 论文中的语法 head 数字,也不把 toy 结果外推到真实语言模型。可信的复现记录应先回答:矩阵从哪里取、形状是什么、softmax 维度是否正确、图中颜色是否保留了数值含义、结论是否经过替代归因方法或干预实验对照。

热力图到底画的是什么

Transformer 自注意力的核心公式是:

$$ A=softmax\left(\frac{QK^T}{\sqrt{d_k}}+M\right) $$

$$ O=AV $$

其中 QKV 分别是 Query、Key、Value;若 batch 大小为 B,序列长度为 T,head 数为 H,每个 head 维度为 D,则 QK^T 的形状是 [B,H,T,T]。最后两个维度最重要:第一个 T 是正在提问的 Query 位置,第二个 T 是可被查看的 Key 位置。M 是 mask,通常在 softmax 前把不可见或 padding 的 Key 加上极小值。

热力图画的是 A 中某一层、某个 head、某个样本的 [T,T] 切片。它不是 embedding 相似度图,也不是梯度图,更不是 token 重要性排行榜。因为最终输出 O 还会经过 Value 向量、输出投影、残差连接、LayerNorm、前馈网络以及后续层。一个 Key 获得高权重,只说明它的 Value 被当前 Query 位置较多混入;它是否推动了最终分类 logit,还要看后续计算。

Hugging Face Transformers 的模型输出文档也把 attentions 描述为每层一个张量,形状为 [batch_size, num_heads, sequence_length, sequence_length],并说明它是 attention softmax 后用于加权平均的权重。这一定义适合作为工程复现实验的接口契约:若你的可视化工具期望同样布局,就能和大多数 Hugging Face 模型对接。

Attention 可视化复现实验流程

最小代码:从 score 到矩阵

配套脚本位于 code/attention_visualization_toy.py。它不下载模型,也不依赖 PyTorch 计算图,只用标准库构造一组 token、手写 Q/K 向量、计算 scaled dot-product score,并对 [PAD] 列施加 mask。默认检查命令是:

python3 code/attention_visualization_toy.py --check-only

脚本会打印 token 列表、矩阵形状、每行 softmax 是否求和为 1、被屏蔽的 [PAD] 列最大概率是否为 0。这个检查比一张图更基础:如果行和不是 1,说明 softmax 维度或数值稳定性有问题;如果 padding 列不是 0,说明 mask 语义可能写反;如果形状不是 [T,T],说明 Query/Key 维度已经混乱。

安装 matplotlib 后可以导出一个教学热力图:

python3 -m pip install -r code/requirements.txt
python3 code/attention_visualization_toy.py --out-dir code/outputs --save-png

这张图只能说明绘图管线可用,不能说明任何真实模型行为。真实复现时,应把 toy 矩阵替换为模型返回的 outputs.attentions[layer][batch, head],同时保存模型名、revision、tokenizer 版本、输入文本、特殊 token、是否启用 dropout、设备和随机种子。

官方工具怎么读:BERTViz 与 Transformers

BERTViz 是 Jesse Vig 发布的开源 Transformer attention 可视化工具,对应 ACL 2019 系统演示论文。它提供 head view、model view 和 neuron view:head view 适合看单层单头的 token 对齐,model view 适合概览多层多头,neuron view 则进一步追踪 Query 与 Key 向量中特定维度如何贡献 attention score。阅读它的官方仓库时,应先看 README 的数据流:加载 Hugging Face 模型,设置 output_attentions=True,tokenize 输入,运行模型,取出 attention,再把 tokens 与 attention 传给 model_viewhead_view

这条路线提醒我们,可视化工具不是“解释器”,而是一个交互式张量浏览器。BERTViz 仓库也明确提示,attention 权重不一定是预测解释;长输入或大模型还会带来响应速度和可视化规模问题。工程复现时不要一次显示所有层和所有头,而应先选择少量输入、固定层头、保存截图和原始矩阵,再逐步扩大范围。

Hugging Face 文档提供了另一个关键约束:模型输出中的 attentions 是 tuple,每层一个张量。不同模型可能有 encoder attention、decoder attention 和 cross attention;句子对任务还会涉及 token type 和特殊符号。如果没有把 token 列表与矩阵轴严格对齐,热力图的行列标签就会错位,后续解释全部失效。

解释边界:诊断不等于因果

Jain 与 Wallace 在 NAACL 2019 的《Attention is not Explanation》中直接挑战了“attention 等于解释”的常见说法。他们报告,学习到的 attention 权重经常与梯度类特征重要性不相关,而且可以找到很不一样的 attention 分布,却产生近似相同的预测。这并不意味着 attention 图毫无价值,而是说明标准 attention 权重不能自动升级为因果解释。

Clark 等人在 BlackboxNLP 2019 对 BERT attention 做了更细的观察:一些 head 会关注分隔符、固定位置偏移或广泛分布,也有 head 与句法、共指等语言现象对应得较好。这里的关键是“对应”与“导致”不同。一个 head 看起来像句法关系,说明模型内部存在可诊断模式;若要证明它对预测必要,还需要遮蔽、置换、head ablation、counterfactual input 或梯度归因等实验。

Captum 这类解释工具提供了另一种视角:它关心某个输出标量相对于输入特征的归因,例如 Integrated Gradients 会沿基线到输入的路径积分梯度。注意力热力图和梯度归因回答的问题不同:前者问“这个模块如何混合 Value”,后者问“输入变化如何影响某个输出”。可信分析最好把两者并列,而不是用其中一个替代另一个。

评测协议与失败排查

Attention 可视化复现至少应记录六项协议。

检查项 记录内容 常见失败
输入 原文、token、特殊符号 WordPiece 后标签错位
张量 layer、head、shape [B,H,T,T] 轴顺序读错
mask padding 或 causal 规则 True/1 语义写反
数值 行和、最大值、熵 softmax 维度错误
图像 colormap、归一化范围 每张图独立缩放导致误读
结论 诊断、推断、实测区分 把亮色格子当因果证据

最常见的失败是轴读反。许多图默认把 x 轴画在下方、y 轴画在左侧,但论文或工具可能把 Query 和 Key 的方向说法不同。写文章时必须明确“行是 Query,列是 Key”,并用一个手工构造的矩阵验证方向。

第二类失败是颜色归一化。若每个 head 单独按最大值归一化,弱信号也可能显得很亮;若所有层统一色标,局部结构又可能不明显。科研报告中最好保存原始数值,并说明色标策略。

第三类失败是选择性展示。只挑一张符合叙事的 head 图,很容易制造故事。更稳妥的做法是先定义选择规则,例如固定第 6 层第 3 头,或按熵、对角线权重、特殊 token 权重排序,再报告多个样本。

第四类失败是把模型处于训练态。dropout 会让 attention 权重不稳定;正式可视化前应切到 eval 模式,并记录版本和 seed。本次脚本没有运行真实模型,因此这些真实模型结论均标注为待人工核验。

复现实验记录还应避免“截图即数据”。建议每次可视化同时保存三份材料:一份 JSON 或 CSV 原始矩阵,一份带 token 标签的 PNG,一份简短日志说明输入、模型、层、头、色标范围和选择理由。PNG 适合阅读,矩阵适合复查,日志适合让他人在一个月后知道你当时到底画了什么。若只保存 notebook 输出,后来模型权重、tokenizer 或依赖版本变化时,很难判断差异来自模型行为还是环境漂移。

对于论文报告,最好把结论分成三档。第一档是直接观测,例如“该 head 在这个样本上对 [SEP] 分配了最高权重”。第二档是统计描述,例如“在 200 个样本中,该 head 的分隔符平均注意力更高”。第三档才是解释性推断,例如“该 head 可能承担句边界聚合功能”。只有第三档需要格外谨慎,最好配合 ablation 或替代归因方法;否则读者会把一个可视化现象误读成机制证明。

可以继续研究的问题

  1. 对同一输入,attention 权重、Integrated Gradients、occlusion 和 head ablation 的排序一致性有多高?
  2. 哪些 head 的模式跨样本稳定,哪些只是在个例图中看起来有解释性?
  3. 如果遮蔽最高权重连接,输出变化是否显著大于遮蔽低权重连接?
  4. 长上下文模型中,attention 可视化是否能帮助诊断 lost-in-the-middle,还是会被稀疏和高效 attention 后端限制?
  5. 多模态模型的 cross attention 图能否对应图像区域证据,还是同样需要干预实验验证?

这些问题的共同点是:先把可视化变成可复现测量,再讨论解释。热力图是研究入口,不是结论本身。

总结

Attention 热力图最适合承担三件事:检查实现、发现模式、生成假设。它可以告诉我们某层某头如何分配权重,也能帮助定位 mask、token 对齐和特殊符号依赖问题。但它不能单独回答“模型为什么预测这个类别”。从复现角度看,最重要的不是画出漂亮矩阵,而是保存原始 attention、明确 Query/Key 方向、固定可视化协议,并把论文报告、本次实际验证和作者推断分开。

本文的最小脚本已完成标准库 smoke test;正式配图已补齐并通过检查。下一步若要扩展成真实模型复现实验,应在安装依赖后运行 toy heatmap 导出命令,再接入 Hugging Face 模型的 output_attentions=True 输出,保存原始矩阵、PNG 和协议日志。

参考资料

检索日期:2026-08-25。以下链接优先采用论文页面、官方仓库或官方文档;动态文档和仓库内容可能更新,正式实验应记录访问日期、模型 revision 与本地依赖版本。

  1. Ashish Vaswani et al., Attention Is All You Need, arXiv 2017,当前 arXiv 页面显示 v7 修订于 2023-08-02。
  2. Sarthak Jain and Byron C. Wallace, Attention is not Explanation, NAACL 2019。
  3. Kevin Clark et al., What Does BERT Look at? An Analysis of BERT’s Attention, BlackboxNLP 2019。
  4. Jesse Vig, A Multiscale Visualization of Attention in the Transformer Model, ACL System Demonstrations 2019。
  5. Jesse Vig, BERTViz official repository,attention 可视化工具与示例。
  6. Hugging Face, Transformers model outputs documentationattentions 输出格式说明。
  7. Captum, Model Interpretability for PyTorch API,梯度、扰动和层归因方法索引。