上一篇我们学会了 $y = W \cdot x + b$ 的「握手规则」。在 Transformer 的注意力层里,同一份输入特征会连乘三次——分别得到 Q、K、V。为什么要三套权重?权重 $W_q$ 和激活 Q 有什么区别?

这一篇把 Q/K/V 投影一次讲透,为第 05 篇的注意力与 Softmax 铺路。

这是「大模型数学速成」系列的第 3 篇。建议先读 第 02 篇:矩阵乘法。下一篇讲 LayerNorm、RMS Norm 与残差连接

一、三次投影:同一输入,三种「角色眼镜」

LayerNorm 之后,每个 token 有一列通用特征 $X$,形状 [768, S](S 为 token 数)。注意力层对 同一 X 做三次线性变换:

$$
Q = W_q \cdot X + b_q,\quad
K = W_k \cdot X + b_k,\quad
V = W_v \cdot X + b_v
$$

1
2
3
4
5
6
7
8
9
10
              同一份 X(Norm 后的特征)
[768 × S]

┌───────────────┼───────────────┐
│ │ │
× W_q + b_q × W_k + b_k × W_v + b_v
│ │ │
▼ ▼ ▼
Q(提问) K(标签) V(内容)
「我想找什么」 「我能被怎样匹配」 「我能提供什么」

关键:输入列完全相同,但三套 $W$ 不同,输出的 768 维数字被重新组合成三种用途

典型形状(方阵投影):$W_q, W_k, W_v$ 均为 [768, 768],$Q, K, V$ 均为 [768, S]——列数 S 不变,与 第 02 篇 一致。

二、权重 vs 激活:不要混淆

$W_q, W_k, W_v$(权重 $Q, K, V$(激活
是什么 训练学好的固定参数 每次前向算出来的中间结果
何时确定 预训练完成后固定 每个 batch、每个 token 都不同
推理时变吗 不变(只读) (随输入变化)
类比 三台咖啡机的内部配方表 某次冲泡产出的三杯不同饮料

命名习惯:代码里常写 q_w / k_w / v_w 表权重,$Q$ / $K$ / $V$ 表投影后的张量。推理过程中权重不变;变的是输入 $X$ 和算出的 Q/K/V。

三、权重从哪里来?

通用流程(与具体框架无关):

1
2
3
4
5
6
7
预训练(PyTorch / JAX 等)学习 W_q, W_k, W_v
↓ 导出 checkpoint / GGUF / ONNX 等
磁盘上的模型权重文件
↓ 推理引擎加载到内存
每层独立的 W_q, W_k, W_v
↓ 前向:矩阵乘 X
本次计算的 Q, K, V

一个 L 层 Transformer 每一层都有自己独立的一套 $W_q, W_k, W_v$——第 3 层与第 10 层矩阵不同,各自在训练中学会了不同的「提问 / 索引 / 传递」方式。

四、极简手算:同一 token,三种输出

把 768 维缩成 3 维示意。某 token 的特征列 $x = [0.8, 0.6, 0.2]^\top$(可理解为「毛茸茸、暖色、偏背景」等抽象分量):

1
2
3
Q = W_q · x = [0.9, 0.1, 0.3]   ← 侧重「适合发问」的分量
K = W_k · x = [0.2, 0.8, 0.5] ← 侧重「适合被检索」的分量
V = W_v · x = [0.7, 0.6, 0.4] ← 侧重「值得传递」的分量

数字仅为示意。训练让 $W_q$ 学会提取「提问用」线性组合,$W_k$ 提取「索引用」,$W_v$ 提取「内容用」。

五、图书馆类比

假设 4 个 token 对应:蓝天、猫头、猫身、草地(ViT patch 或 LLM token 均可类比)。

角色 猫头 token 在做什么 生活类比
Q 「我想知道周围有没有和身体、背景相关的 token?」 你手里的检索便签(query)
K 「我的标签是:动物、面部、暖色、前景」 书脊上的索引标签
V 「若你关注我,我可提供:耳朵、眼睛区域的特征」 书里的正文

每个 token 同时拥有 Q、K、V 三种身份

  • 自己的 Q所有 token 的 K 比相似度 → 决定关注谁
  • 按权重从所有 token 的 V 加权混合 → 得到「看过别人之后」的新表示

六、patch 互看例子(预告 Softmax)

第 1 步 — 匹配分 $Q_i \cdot K_j$(猫头 Q 与各 K 点积,示意):

1
2
              K(蓝天)  K(猫头)  K(猫身)  K(草地)
Q(猫头) 0.1 0.9 0.8 0.2

猫头与猫身分数高(同一动物),与天空、草地低。

第 2 步 — Softmax(第 05 篇详讲)变成概率权重,示意:[5%, 40%, 45%, 10%]

第 3 步 — 混合 V

$$
\text{out}{\text{猫头}} = 0.05 V{\text{蓝天}} + 0.40 V_{\text{猫头}} + 0.45 V_{\text{猫身}} + 0.10 V_{\text{草地}}
$$

猫头 token 的输出融入了猫身轮廓 + 自身面部,而不只是孤立的「头」。

七、为什么要分 Q、K、V,不能只乘一次?

若只有一个矩阵 $W$,每个 token 只有一种表示,「搜索关键词」和「被借走的内容」绑在一起——匹配灵活性差。

分成 Q/K/V 后:

1
2
3
4
Q 与 K 专门负责「匹配」(像搜索引擎的 query 与 document index)
V 专门负责「传递内容」(真正被加权求和的信息)

匹配规则(Q·K)与传递什么(V)可以分开优化

训练自动学到:

  • $W_q$:怎样抽出适合提问的分量
  • $W_k$:怎样抽出适合被索引的分量
  • $W_v$:怎样抽出值得分享的分量

八、与整体数据流对应

1
2
3
4
5
X  [768, S]   ← S 个 token 的通用特征(投影前)
↓ W_q, W_k, W_v
Q,K,V [768, S] ← 各 token 的三套角色向量(投影后)
↓ 注意力(第 05 篇)
Out [768, S] ← token 互相「看过」之后的新特征

「把特征变成 Q」的准确含义

对 token $i$ 的那一列 $x_i$,用 $W_q$ 做线性变换得到 $q_i$——这列向量不再只是「这个 token 长什么样」,而表示**「这个 token 打算向全序列提什么问题」**。K、V 同理,角色分别是「我能被怎样匹配」和「我能提供什么内容」。

九、与训练 / 推理的关系

  • 训练:$W_q, W_k, W_v$ 随反向传播更新;Q/K/V 是前向中间量
  • 推理 Prefill:整段 prompt 一次算出所有 token 的 Q/K/V
  • 推理 Decode:每步新 token 只算一列 Q/K/V;配合 KV Cache 可复用历史 K/V(第 11 篇)

十、小结

问题 答案
为什么乘三次? 同一特征需扮演提问者、索引、内容三种角色
$W_q$ vs $Q$? 前者固定权重,后者每次前向的激活
形状? 典型 [768,768] · [768,S] → [768,S]
下一步? $QK^\top$ + Softmax + 混合 V(第 05 篇)

大模型数学速成系列第 3 篇完。下一篇 LayerNorm、RMS Norm 与残差连接——数字量级稳定与深层网络训练。

系列导航

篇号 标题 状态
02 矩阵乘法
03 Q/K/V 投影(本篇)
04 LayerNorm、RMS Norm 与残差连接 下一篇

完整大纲见工作区 docs/MATH_SERIES_OUTLINE.md