§ 7.3 · Sub-chapter

Multi-head · 多头注意力篇

Multi-Head Attention

上一篇我们讲清楚了 QKV——一组"提问、展示、贡献"就能完成一次注意力运算。但一组 QKV 只能同时看一种相关性;而语言里同时并存的相关性有好多种。于是 Transformer 采用了一个简单粗暴又极其有效的办法——"一组不够,就并行搞很多组"。这就是 Multi-Head Attention,多头注意力。

生活场景
👨‍⚕️ 医院里的"多科室会诊"

一个复杂病人被送进医院,主治医生看不太准——怎么办?叫多科室会诊
心内科医生看心电图、看血压;
神经科医生看脑 CT、看反射;
内分泌科医生看血糖、看激素;
影像科医生看片子、看结构异常……
同一个病人,几个专家从不同角度各看一遍——每个人只看自己擅长的那一面,最后主治医生把所有意见汇总,得出一个综合诊断。
Multi-Head Attention 就是这场会诊——每个"头"是一个不同角度的专家。

为什么一组 QKV 不够

回想一下上一篇的例子——"猫追球"里的"追",通过一次 QKV 运算融合了"猫"和"球"两个词的信息。但仔细想想,语言里的相关性其实是多层次并存的:

一组 QKV 的WQ, WK, WV矩阵,训练完之后只能学会一种"看法"——比如可能主要学到了语法关系。如果你希望模型同时懂语义、指代、情感……你就需要好几组独立的 QKV,让它们各自学一个侧面

Analogy · 一双眼睛 vs 复眼

一组 QKV 就像一双人眼——只有一个焦点,只能同时清晰地看一个东西。
多头 Attention 就像蜻蜓的复眼——几百个小眼同时看,每个小眼捕捉一个角度,最后合成一个全方位的视野。
机器要理解人类语言的复杂性,需要的正是这种"复眼式"的注意力——同时看语法、语义、指代、情感、语气……

多头是怎么做的 · 三步走

假设向量维度是 d = 512,我们想要 h = 8 个头。Multi-Head Attention 的运作是这样的:

1. 切分维度 · 512 → 8×64

每个头分到一份属于自己的"小视野"——总维度 512 切成 8 份,每份 64 维。
每个头有自己的一套 WQi, WKi, WVi——独立训练、独立学习。

2. 并行做 8 次 Attention

每个头拿自己的 QKV 独立跑一遍完整的 softmax(QKᵀ/√d)·V——各自得到一个 64 维的输出。
注意:这 8 次运算是完全并行的,不互相干扰、不互相等待。

3. Concat + 线性投影

把 8 个 64 维的输出拼接(Concat)回一个 512 维向量。
再乘以一个可学习的输出矩阵 WO——做一次"融合",把 8 个头看到的东西综合成一个统一的表示。
这就是 Multi-Head 的最终输出。

公式化写下来是这样:

公式 · Multi-Head Attention

MultiHead(Q, K, V) = Concat(head1, ..., headh) · WO
其中 headi = Attention(Q·WQi, K·WKi, V·WVi)

翻译成人话:每个头做一次独立的注意力 → 全部拼起来 → 再用一个线性层融合

每个头到底在关注什么 · 可视化告诉你

2017 年论文发表后,研究者们做了大量 Attention 权重的可视化实验,得到的结论非常有意思——不同的头,真的自动学会了看不同的东西,而且这完全是模型自己学出来的,没有人告诉它"你这个头去看语法"。

头的类型典型学到的模式例子
指代头把"它/他/她/this/that"连到前文的具体名词"猫追球,抓到了"——"它"→"猫"
语法头把动词连到它的主语和宾语"我吃苹果"——"吃"→"我"、"吃"→"苹果"
位置头关注邻近词(左右一两个)形成局部 N-gram 特征
语义头把语义相似的词联结起来"医生"←→"护士"、"手术"、"病人"
停用词头盯着"the/a/of/的/了"这些高频功能词用于构造句法骨架
句末头都把注意力扔到句末标点作为"默认锚点",是一种冗余保护

让人惊讶的是:这些分工完全是训练过程中自发涌现出来的。研究者们只是把 8 组 QKV 并排放在一起、扔给梯度下降,结果它们就自动分化出了明确的"专业身份"——像一个自组织的小型专家团队。

典型配置 · GPT/BERT/DeepSeek 用多少头

现代大模型的头数已经远远超过 2017 年论文里的 8 个。看一下几个代表模型的配置:

模型层数每层的头数每头维度总参数量
Transformer 原论文6 (Enc)+6 (Dec)864~65M
BERT-base121264110M
BERT-large241664340M
GPT-24825641.5B
GPT-39696128175B
LLaMA-2 70B806412870B

GPT-3 那个 "96 层 × 96 头"的怪兽——你可以想象一下:每个词都要经过 96 层,每层同时有 96 位"专家"从不同角度看它。而且这 96 层的头数各自不同、独立学习——最终形成了一个近乎万人规模的隐性专家团队,共同解读你输入的每一个 Token。

Analogy · 会诊团队规模

1 个头 = 一个全科医生看诊;
8 个头 = 一支小型医疗组(原论文规模);
96 个头(GPT-3) = 一家三甲医院整个专家团齐上——心内、神内、内分泌、影像、检验、外科……全都并行看你这一份病历。
每层结束后,主治医生(WO)把各科室的意见综合成一份诊断,然后送进下一层继续再一轮 96 科室会诊——一共 96 层。
这就是为什么 GPT-3 能"什么都懂一点"——它内部就是几千个隐性专家的联合运算。

多头带来的三个好处

一个常见误解 · 头越多越好?

不一定。研究者们做过消融实验:头数并不是越多越好——头数太多时,很多头会变成"冗余的、可以直接砍掉"。实际上很多论文(Voita 等 2019)发现:把 BERT 里 80% 的头剪掉,模型效果几乎不变
这说明当代大模型的多头设计里有大量"备胎"——它们没有学到独特的模式,只是训练时的随机产物。真正做事的核心头,可能只有那么十几个。这个现象也推动了后来一系列"注意力头剪枝"、"稀疏 Attention"的研究方向。

MQA 和 GQA · 现代大模型的多头新变体

2023 年之后,研究者又发现了多头设计的一个新问题——推理时 K/V 缓存太大。生成型任务(GPT 那种)在推理时,会把之前所有 Token 的 K 和 V 保存下来,供后面每一步查询——这就是所谓的 KV Cache。头数一多、序列一长,KV Cache 就爆炸——一次对话动辄占几十 GB 显存。

解决方案是让多头共享 K/V:

这些变体不改变多头 Attention 的核心思想——多角度并行看句子——但都在共享程度上做了取舍,用少量效果损失换取巨大的推理效率提升。这就是为什么今天的 LLM 能在一张卡上跑 128K 的上下文。

直观感受一下 · 三个真实注意力头

放一段 BERT 论文附录里可视化的例子——句子是"I went to the store to buy some milk",看看不同头都在做什么:

你看,这三个头之间的分工非常清晰——各管一个语法层面。而这一切都是训练时自动涌现的,没有任何人写过"你这个头去学介词连接"这样的规则。多头 Attention 的自组织能力,是 Transformer 最迷人的性质之一

Multi-Head 是一种"廉价的多样性"

回过头来审视 Multi-Head 的设计——你会发现它是深度学习史上少见的"零成本换效果"的巧妙设计。
想想看:如果你要让模型学会关注多种关系,直觉上应该给模型加更多参数、加更多层、加更多计算。但 Multi-Head 做的事却是——在不增加计算量的前提下,让参数"分工"。总维度 512,无论切成 1 头还是 8 头,矩阵乘法的总量是一样的;但切成 8 头之后,模型的"表达角度"翻了 8 倍。
这种"用同样的钱办 8 倍的事",在工程上极其罕见——它是 Transformer 能在 2017 年一夜爆红的关键之一。没有 Multi-Head,Attention 的表达能力会大打折扣,也就没有后来的 GPT 和 BERT

Recap · 收束

Multi-Head 是 Attention 的"复眼版本"——把一组 QKV 变成多组并行,每组各看一个侧面,最后拼接融合。它让 Transformer 具备了同时理解语法、语义、指代、情感的能力,而计算成本却几乎不变。
到这里,你已经拿下了 Transformer 的核心运算模块——QKV、缩放、Softmax、多头、拼接投影。下一篇,我们不再谈单层运算,而是把镜头拉远,看看整个 Transformer 分化出了哪三大派系——BERT、GPT、T5。

☰ 主页
Xue Hai Wu Ya · § 7.3 · Multi-Head