Module 1 · Transformer Lesson 08 注意力最后一块

Multi-head Attention

单个注意力只能"用一种方式关注"。多头 = 并行开好几套注意力,各看一种关系,最后拼起来。正好解答你之前的 512→64→512 疑问。

TopicMulti-head Attention(多头注意力)
Objectives理解为什么要多个头;看清 512→拆成 h 个 64→拼回 512 的维度流
Prerequisites单头注意力全链 ✅(softmax(QKᵀ/√d)V)、矩阵=变换 ✅
Outcome能解释多头的动机、维度如何拆分与合并、W_O 的作用
Warning各头不是人为指定分工的,是训练中自己分化出来的

① Why — 单个头只能"关注一种关系"

一次注意力,每个词最终得到一组 softmax 权重、一个加权平均结果。这意味着它只能表达一种"该关注谁"的模式。但语言里,一个词同时和别人有多种关系:

如果只有一个头,这些不同关系被挤进同一组权重里平均,互相干扰、变得模糊。解决办法很直接:开多个头,每个头独立地关注一种关系。

② How — 拆成 h 个小注意力,并行跑

d_model = 512,头数 h = 8。做法:

headi = softmax(qikiᵀ/√d)vi  ·  每个 64 维
输出 = Concat(head1,…,head8) · W_O  ·  512 维
一个词的维度流(d_model=512, h=8, 每头 64) x:512 维 head 1 W_Q/K/V 512×64 → attn → 64维 head 2 W_Q/K/V 512×64 → attn → 64维 head 8 W_Q/K/V 512×64 → attn → 64维 Concat 8×64 = 512 维 × W_O (512×512) 输出 512 维
512 拆成 8 个 64(各头独立做注意力)→ 拼回 512 → 过 W_O 整合。进 512、出 512,可以继续叠下一层。
✅ 回答你之前的疑问: 你早就发现"512→W(512×64)→64,那 64 怎么接下一层"。答案就在这:那个 64 维只在单个头内部用;8 个头各出 64 维,拼接又回到 512,再过 W_O。所以整层进 512、出 512,维度对得上,能一层层叠下去。

③ 关键直觉

多头 = 多个并行的"注意力视角",各看一种关系,再汇总

⚠️ 别误解"分工":没有人给每个头指定"你管指代、你管句法"。它们是在训练中自发分化的——因为独立的权重 + 预测压力,不同头自然学到不同模式。(诚实边界:也有些头学得冗余、甚至可被剪掉,这是后话。)

④ 🅿️ 注意力到此完成,接下来(预告)

不展开,只留名:一个 Transformer Block 里,多头注意力之后还有 残差连接LayerNormFFN(前馈网络);然后把整个 Block 叠 N 层(你多次问到的"多层")。这些是接下来几课,最后拼出完整 Transformer。

✅ 快速检查(用自己的话答)

  1. 为什么一个头不够用?多个头解决了什么问题?
  2. d_model=512、h=8 时,每个头的 q/k/v 是多少维?8 个头的输出怎么变回 512 维?
  3. 各个头的"分工"(比如一个管指代、一个管邻接)是人为设定的,还是怎么来的?

答完这 3 题,注意力机制就整个通关了 🎉 下一课进入 Block 的其余零件:残差 / LayerNorm / FFN。