跑一次小模型,看懂注意力热图

第一次把小型 Transformer 跑起来、再盯着 attention map 发呆时,我的感受很直接:原来模型不是在“读一句话”,而是在不停给词和词之间牵线。

跑一次小模型,看懂注意力热图

别一上来就追求大模型。拿一个小任务,做文本分类或简单翻译都行,把模型规模控制在自己能反复训练、反复观察的范围里。训练跑通只是第一步,更重要的是把注意力热图拿出来看:横纵坐标通常对应输入中的不同词,颜色越显眼,表示某个位置分给另一个位置的注意力越多。

先看“它在看谁”

我第一次看热图时,犯过一个很常见的错:盯着最亮的格子,试图给每个格子编一个完美故事。后来才发现,比较有用的看法是找模式。

比如,一个词是否经常把注意力投向和它关系紧密的词;相邻词之间是否有明显连线;句子里承担关键信息的词,是否被其他位置频繁关注。看到这些,你会突然理解注意力机制的直觉:每个词并不是孤立处理,而是在根据当前任务挑选上下文。

多头注意力尤其有意思。同一句话的不同头,热图往往长得不一样。有的头更偏向邻近位置,有的头会跨过一段距离去关注另一个词。别急着给它们贴上“这个管语法、那个管语义”的标签,先承认它们是在分工观察;热图提供的是线索,不是自动生成的答案。

热图好看,不等于模型学对了

这里有个容易上头的坑:热图看着很整齐,并不能直接证明模型真的理解了句子;反过来,图案没那么“像人话”,模型也未必没用。它更适合拿来排查问题。

如果所有位置都盯着同一个词,或者不同输入的图几乎没有变化,我会回头检查训练是否稳定、数据是否过少,以及任务里该不该使用 mask。特别是自回归任务,未来信息没有屏蔽时,模型会走捷径,热图再漂亮也值得警惕。

我现在跑小模型时,会把热图和训练过程一起看:损失曲线有没有异常、模型输出是否合理、不同输入下注意力是否变化。这样看几次,注意力就不再是课本里那个有点玄的名词,而是一扇能让我们窥见模型内部选择的窗。

参与讨论

0 条评论

延伸阅读