解剖层 · 第 6 / 25 课

多头注意力:四双眼睛各看各的

真权重交互 复用已加载权重;「中文对照」另需懒加载 albert 13MB 建议 15–30 分钟

学完这课你能

  1. 理解多头 = 把 128 维切成 4 份独立的小注意力,各自学不同的「看」模式,最后 concat 合并。
  2. 认识常见头模式:上一词头 / 标点头 / attention sink 头 / 重复头,并能在真热图里指认。
  3. 知道中文侧用双向 encoder(albert)看热图的差异:无 causal mask、可做完形填空。

想象一桩案子:五六个侦探围在同一个现场,人手一只放大镜,各盯各的角度——有人看指纹,有人看脚印,有人盯着门锁。多头注意力,就是这场分工。

几个戴猎鹿帽的侦探各自举着橙色放大镜,从不同角度围观桌上同一台小机器
类比 侦探们=各个注意力头;同一现场=同一句话;不同的放大镜角度=各头分工。

01为什么要多头

一个位置同时背着好几件事:它语法上跟谁搭配、它在指代谁、隔壁上个词是什么。可上节课的单头注意力,一组 softmax 只能表达一种「看」——盯着指代,就没余力盯相邻。怎么办?注意解法的思路:不是造一个更聪明的头,而是多开几双眼睛——像万花筒,筒还是那只筒,每转一格,同一朵花就换一套图案。

万花筒的圆形视野被切成八个扇格,每格映出一朵橙色小花的镜像图案
类比 同一朵花=同一句话,每个扇格=一个头折射出的独立花纹(各学各的「看」法)。

02128 = 4 × 32

pythia 的做法很直接:把 128 维平均切成 4 份,每份 32 维,各自独立做一套 Q、K、V 投影和小注意力——互不通气,各看各的。四份结果拼回 128 维,再过一道输出矩阵 WO 混合,交给后续计算。这条流水线长下面这样。

这笔账划算吗?每个头只有 32 维、每头一套独立权重,多头的代价远小于把单头做宽四倍——而换来的「多视角」,对模型至关重要。

128 维 输入 切 4 份 头 1 · 32 维 注意 头 2 · 32 维 注意 头 3 · 32 维 注意 头 4 · 32 维 注意 各有一套 Q、K、V,互不通气 拼接 concat 回 128 维 WO 混合 交给后续
128 维切 4 份并行注意,拼回后经 WO 混合成这一层的输出。

03头的模式类型学

研究者反复在训练好的模型里撞见同几类头:上一词头——每个位置死盯前一个词,语法工程师;标点头——围绕句号逗号聚集;重复头——专找和当前词相同的词,复读检测器。注意到了吗?没有人设计过这些分工,它们是训练自己分化出来的。

本课正文不贴示意图——下面实验台里的 24 张 pythia 真热图,就够你把这几种模式各找出一个。去找找看。

04attention sink

很多头会把大量权重压在第一个 token 上,不管它是什么词。为什么?回想上一课:softmax 要求每行权重总和恰好为 1,「必须分出去」。当一个位置这层确实没东西可看时,它就把没用完的概率砸给开头——一个永远合法、永远在场的「垃圾桶」。这就是 attention sink。

实验台会在你 hover 时按真实数值生成注释,比如「此头 87% 权重落在首个 token——attention sink」。

05中文怎么看

想在中文模型上做同样的解剖?你会撞上一个现实问题:≤40MB 级的中文 decoder(GPT 式生成模型)基本不存在。所以课程选了另一个流派——albert_chinese_tiny,一个双向 encoder(BERT 式理解模型),4 层 12 头 312 维,fp16 权重只有 13MB。

双向意味着没有因果掩码:每个位置左右都看,热图没有三角缺口。它还多一个 decoder 没有的玩法——完形填空:遮住句中一个字,让它预测被遮的是谁。本课「中文对照」抽屉里可以亲手玩。

交互实验:多头对比墙 + 中文对照

引擎加载中…

主视图 2×2 四格热图(当前层全部 4 头并排),layer 滑杆 0–5 横扫看四头协同演化,点格放大看该头真实统计注释。下方「中文对照」默认收起——点击按钮才确认下载 albert 权重 13MB(独立进度条),不开则 0 字节下载。

组件挂载点 · 多头对比墙将在下一波接入(中文对照抽屉懒加载 albert 13MB)