当前 Head 的注意力分布
看看它最想参考哪些 token。
单个 Attention 头当然也能算权重,但它往往只能给出一种“混合视角”。多头注意力做的事不是简单复制四遍,而是让不同 Head 用不同的 WQ / WK / WV 去看不同关系,再把这些子结果拼起来,形成更完整的 token 表示。
先选一个场景,再选当前正在更新的 query token。下面四张卡片代表四个不同的注意力头。它们看到的是同一句话,但会各自把注意力压在不同位置上,因此学到的是不同类型的关系。
看看它最想参考哪些 token。
左侧把四个 Head 的权重取平均,近似看成“只有一个混合视角”的结果;右侧保留每个 Head 独立的一行。你会看到,多头的价值不只是更宽,而是让不同关系先被分开建模,再交给后面的投影层融合。
如果所有关系都被揉进同一行,最显眼的通常只剩少数“折中后的高峰”。
高亮格说明:不同 Head 常常在盯不同对象,所以后面才有东西可拼。
每个 Head 都会先产出一个子向量。真正送往后续层的,不是某一个 Head 的结果,而是先 Concat(head1, ..., headh),再通过输出投影 WO 混回模型宽度。你可以手动开关哪些 Head 参与融合,观察最终表示会失去哪些线索。
Concat 会保留“每个 Head 分别看到了什么”,还没有把它们混成一团。
Final = Concat × WO。这一步负责把多路子空间信息重新融合成一个新的 token 表示。
不同 Head 的参数不同,所以它们学到的不是同一行权重的拷贝,而是不同子空间里的不同关系视角。
多头注意力的关键结构是“先让各个 Head 分头建模,再用 Concat + WO 汇总”,而不是一开始就把所有关系混在一起。
真正提升的是同一个 token 可同时携带更多关系线索,比如语法、指代、时间和局部搭配,而不必让一个头硬扛全部任务。