大模型数学速成(03):Q/K/V 投影——同一输入,三种角色
上一篇我们学会了 $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 | 同一份 X(Norm 后的特征) |
关键:输入列完全相同,但三套 $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 | 预训练(PyTorch / JAX 等)学习 W_q, W_k, W_v |
一个 L 层 Transformer 每一层都有自己独立的一套 $W_q, W_k, W_v$——第 3 层与第 10 层矩阵不同,各自在训练中学会了不同的「提问 / 索引 / 传递」方式。
四、极简手算:同一 token,三种输出
把 768 维缩成 3 维示意。某 token 的特征列 $x = [0.8, 0.6, 0.2]^\top$(可理解为「毛茸茸、暖色、偏背景」等抽象分量):
1 | Q = W_q · x = [0.9, 0.1, 0.3] ← 侧重「适合发问」的分量 |
数字仅为示意。训练让 $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 | K(蓝天) K(猫头) K(猫身) K(草地) |
猫头与猫身分数高(同一动物),与天空、草地低。
第 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 | Q 与 K 专门负责「匹配」(像搜索引擎的 query 与 document index) |
训练自动学到:
- $W_q$:怎样抽出适合提问的分量
- $W_k$:怎样抽出适合被索引的分量
- $W_v$:怎样抽出值得分享的分量
八、与整体数据流对应
1 | X [768, S] ← 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。










