完整版 · 分步教学

注意力与多头注意力

「它太累了」——「它」指谁?让每个词带着自己的问题去查所有词的标签,按匹配程度分配目光。一个头不够,就并排放好几个。

目标实验目标

把 2017 年那篇论文的核心公式亲手拆开:打分 → 降温 → 归一(softmax)→ 混合 V。再看多头如何让「指代」「语法」这些不同关系各由不同的头负责。

课堂问题「小猫没有过马路,因为它太累了」和「……因为它太堵了」——两个「它」指的是同一个东西吗?模型怎么算出来?
1点击一个词,看它的目光投向哪里

先选一个句子,再点任意词。柱子越高,说明这个词把越多的注意力分给了那个词。

注意力分布

点击上方的词查看…

它在看谁

—
说明切到第二个句子,「它」的最大权重会从「小猫」跳到「马路」——决定目光去向的,只是「累 / 堵」这一个字的差别。
2一个词,三个角色:Q、K、V

别用原始词向量直接做点积——「想找什么」和「能提供什么」是两回事。让每个词先过三个线性变换,生成三个分身。

Q · 查询单

「我在找什么」

「它」作为代词,要找的是前文里某个具体事物。

K · 书脊标签

「我能提供什么」

「小猫」的标签:一只动物、名词、主语。

V · 书的内容

「真正被取走的内容」

匹配之后,实际被混合进「它」的信息本体。

3手算一遍:从打分到混合

用一个 2 维的小例子把公式代成数字。每个词的 v 两个维度设计成可读的:第 1 维是「动物味」,第 2 维是「疲惫味」。

词qkv
小猫[0.3, 0.3][1.2, 0.0][1.0, 0.0]
累[0.2, 1.5][0.0, 1.0][0.0, 1.0]
它 当前词[2.0, 0.2][0.1, 0.0][0.5, 0.5]

四步演算

① 打分 QKᵀ—
② 降温 ÷√d_k—
③ softmax 归一—
④ 混合 ×V—

混合结果:新的「它」

动物味 0疲惫味 0
混合出来的新向量,会顶替原来那个空洞的「它」,继续往上走。这就是注意力真正「搬运信息」的那一下。
4多头:一个头忙不过来

「小明告诉小红,他喜欢她画的那幅风景画。」光看「喜欢」这一个词,它既要往左找主语,又要往右找宾语。一个头只会算一组权重,把两个焦点混成「半个他、半个画」。

头 A · 学到「主谓」

喜欢 → 他62%
喜欢 → 风景画5%
目光重重压在主语上。

头 B · 学到「动宾」

喜欢 → 他4%
喜欢 → 风景画59%
目光重重压在宾语上。
这笔账很划算512 维切成 8 个头,每头 64 维:8 × 64 = 512,总计算量和单头持平,却多看了 7 种关系。注意「切」切的是每个头的工作空间,不是输入——每个头都用完整的 512 维作输入。
模型头数每头维度
原始 Transformer(2017)864
BERT-base / GPT-2-small1264
BERT-large1664
GPT-3(175B)96128
规律每头维度这些年稳定在 64–128 维,模型想更强,多半是「加头」而不是「把头加宽」。

挑战实验课挑战

挑战 1 · 目光的移动
同一句位置上的「它」,两个句子里的最大注意力落点相差多少?是什么决定了这个差别?
挑战 2 · 去掉降温
把 √d_k 从 1.41 改成 1(不降温),softmax 后的分布会变多极端?
挑战 3 · 一个头能兼顾吗
让「喜欢」同时看「他」和「风景画」,加权平均出来的向量代表什么?清晰吗?
挑战 4 · 头越多越好吗
每头维度保持不变、把头数翻倍,总维度也翻倍了。这时「几乎不花钱」还成立吗?