Q/K/V(Query-Key-Value,查询-键-值)是注意力机制(attention)的三个基本零件:每个位置生成三个向量,一个负责提问,一个负责被匹配,一个负责被取走。
用一次检索讲清楚
想象你去图书馆找资料。你手里写着一句话:“想了解猫的睡眠”——这是 Query,代表你此刻的需求。书架上每本书的书脊贴着标签,“猫科动物行为”“天体物理”——这些标签是 Key。真正借走的是书里的内容,那是 Value。
检索分三步:
1. 拿你的 Query 去和每一个 Key 比相似度(实际是点积),得到一串分数;
2. 分数经 softmax 归一化成权重,加起来等于 1,越像的 Key 权重越高;
3. 用这些权重对所有位置的 Value 加权求和,得到输出向量。
关键在于第三步:被取走的永远是 Value,Key 只负责“打分”,不进结果。在自注意力(self-attention)里,Q、K、V 都来自同一个输入序列——同一个 token 的向量,分别乘上三组可学习的权重矩阵 W_Q、W_K、W_V,就化身三个角色。所以“谁在查谁”是并行发生的:每个位置都在查别人,也都在被查。
三个角色的分工
| 角色 | 中文 | 职责 | 生活对应 |
|---|---|---|---|
| Q | 查询 | 主动发问:我这个位置想找什么 | 你的搜索词 |
| K | 键 | 被匹配:我能提供什么 | 书脊上的标签 |
| V | 值 | 被取走:实际传递的信息 | 书里的内容 |
Q 和 K 决定“看哪里”,V 决定“看到什么”。分工不同,所以很多改进工作是在改打分配置,而不是改搬运方式。
容易混的几个概念
- Q/K/V 是向量或矩阵,W_Q/W_K/W_V 是生成它们的参数矩阵;训练时更新的是后者。
- AI 词典:多头注意力">多头注意力(multi-head attention)不是把 Q/K/V 复制几份,而是每个头用自己的一套投影矩阵,把向量映射到更低维度,各自做一次注意力,最后拼接。
- 交叉注意力(cross-attention)里 Q 来自一边(如解码器),K 和 V 来自另一边(如编码器),也就是问答双方不是同一个序列。
- 因果掩码(causal mask)把未来位置的分数压到负无穷,让生成式模型只能往前看,不会偷看答案。
为什么普通人也值得知道
推理时反复被提到的 KV Cache,名字就来自这里:算过的 K 和 V 可以存下来复用,不必每生成一个新 token 都重算一遍。这份缓存的大小与 K、V 的维度和层数直接相关,是长上下文场景里显存和成本的主要来源之一。理解 Q/K/V 的分工,也就理解了“注意力很贵”到底贵在哪儿。具体实现与优化方案各家不同,以官方文档为准。
