0. 先看结论
LLM 使用 Q/K/V,不是因为三个字母神秘,而是因为 attention 本质上在做一次“可微的内容检索”:
1 | Query 负责提问 |
放进 Transformer 里就是:
Q/K/V 把一件事拆成两步:
- 先决定看哪里:用 $QK^T$ 算当前位置和其他位置的匹配程度。
- 再决定拿什么:用匹配权重对 $V$ 做加权求和。
如果没有 Q/K/V 的分工,模型只能用同一套表示同时承担“匹配”和“传递信息”两个角色,表达能力会弱很多。
1 | flowchart LR |
1. Q/K/V 的一句话解释
| 符号 | 全称 | 做什么 | 类比 |
|---|---|---|---|
| Q | Query | 当前 token 想找什么 | 搜索词 |
| K | Key | 每个 token 用什么被匹配 | 索引 |
| V | Value | 匹配后真正取走的信息 | 内容 |
例子:
1 | 小明把书放进书包,因为它太重了。 |
模型处理“它”时,需要判断“它”指什么。
| 候选位置 | token | K 提供的索引 | V 提供的内容 |
|---|---|---|---|
| 1 | 小明 | 人名、主体 | 人物相关信息 |
| 2 | 书 | 物体、可重 | 书的语义信息 |
| 3 | 书包 | 容器、装东西 | 书包的语义信息 |
| 4 | 它 | 当前 query | 当前要更新的位置 |
“它”的 Q 会更匹配“书”的 K,于是“书”的 V 被分到更高权重。
2. 从固定向量到 attention
早期 encoder-decoder 模型常把整句压成一个固定长度向量,再交给 decoder 生成输出。问题很直接:句子越长,信息越容易挤在一起。
Bahdanau attention 的关键改变是:decoder 每生成一步,都可以回头看 encoder 的不同位置。它不再依赖一个固定向量装下整句。
| 阶段 | 做法 | 局限 |
|---|---|---|
| 固定向量 encoder-decoder | 整句压成一个向量 | 长句信息容易丢 |
| Bahdanau attention | decoder 动态看 source 位置 | 还依赖 RNN |
| Luong attention | 系统比较 global/local attention | attention 形式更清晰 |
| Transformer | 完全用 self-attention 建模序列 | 并行化好,成为 LLM 主线 |
这条历史线解释了 Q/K/V 的需求:模型需要一种机制,能在每一步动态决定“该看哪个位置”。
3. Q/K/V 的历史来源
Q/K/V 的表述在 Transformer 原论文中被清晰固定下来。论文写法是:attention 可以看成把一个 query 和一组 key-value pairs 映射成一个输出。
这个说法不是凭空来的,它和三类思想有关。
3.1 信息检索
在搜索系统里,你输入 query,系统拿它去匹配文档索引,然后返回文档内容。
| 搜索系统 | Attention |
|---|---|
| 搜索词 | Query |
| 文档索引 | Key |
| 文档内容 | Value |
| 检索相关性 | attention score |
| 返回结果 | 加权后的 value |
Attention 把这个过程变成了可微分的神经网络操作。
3.2 记忆网络
Memory Networks 把模型看成能读写外部记忆的系统。记忆里可以有地址,也可以有内容。后来的 key-value memory 思想,把“用什么匹配”和“取什么内容”分开。
这和 Q/K/V 很接近:
1 | query -> 找 memory slot |
3.3 神经机器翻译里的对齐
Bahdanau 和 Luong 的 attention 还没有今天这么明确的 Q/K/V 术语,但已经有了同样的结构:
| 早期 NMT attention | Transformer Q/K/V |
|---|---|
| decoder 当前状态 | Query |
| encoder hidden states | Key/Value 的来源 |
| alignment score | Q 与 K 的匹配分数 |
| context vector | 加权后的 V |
Transformer 把这套机制矩阵化、并行化,并让同一个序列内部也能互相注意。
4. 为什么不直接用一个向量
假设每个 token 只有一个向量 $x$,attention 直接用:
这样当然也能跑,但它把三件事绑死了:
- 用 $x$ 去匹配别人。
- 让别人用 $x$ 匹配自己。
- 被选中后,仍然把 $x$ 当内容传出去。
Q/K/V 的做法是:
同一个 token 可以在三个空间里扮演不同角色。
| 角色 | 如果共用 $x$ | 使用 Q/K/V |
|---|---|---|
| 主动查找 | 只能用原始表示查找 | 用 $W_Q$ 学“要找什么” |
| 被别人匹配 | 只能用原始表示当索引 | 用 $W_K$ 学“如何被找” |
| 输出内容 | 只能输出原始表示 | 用 $W_V$ 学“该传什么” |
这就是 Q/K/V 的核心收益:匹配空间和内容空间可以分开学。
5. 数学上 Q/K/V 做了什么
5.1 三个线性投影
设输入序列表示为:
其中 $L$ 是序列长度,$d_{\text{model}}$ 是模型维度。
Transformer 学三组参数:
得到:
这不是手写规则,而是训练出来的投影。
5.2 匹配分数
第 $i$ 个 token 看第 $j$ 个 token 的分数是:
其中:
| 符号 | 含义 |
|---|---|
| $q_i$ | 第 $i$ 个位置的 query |
| $k_j$ | 第 $j$ 个位置的 key |
| $d_k$ | query/key 维度 |
| $\sqrt{d_k}$ | 缩放因子,避免点积过大 |
所有位置一起算,就是:
5.3 权重和输出
对每一行做 softmax:
输出:
展开到单个位置:
这句话很重要:attention 输出不是“选一个 token”,而是按权重混合多个 value。
6. Q/K/V 蕴含的数学基础
6.1 内积相似度
Q 和 K 的点积衡量两个向量的匹配程度:
点积越大,softmax 后权重越高。
6.2 双线性打分
把 $q_i=x_iW_Q$、$k_j=x_jW_K$ 代入点积:
这说明 attention 分数不是简单比较两个原始 token 向量,而是在学习一个双线性匹配函数。
其中:
可以看成模型学到的“匹配度量”。不同 head 有不同的 $W_Q,W_K$,也就能学不同的关系。
6.3 概率归一化
softmax 把分数变成权重:
每一行权重加起来等于 1:
这让输出成为一组 value 的加权平均。
6.4 可微检索
普通检索通常是硬选择:
1 | 找到最匹配的一条,然后返回 |
Attention 是软选择:
1 | 所有位置都给一点权重,相关位置权重大 |
这让模型可以通过反向传播学习:
| 学什么 | 对应参数 |
|---|---|
| 当前该问什么 | $W_Q$ |
| 每个 token 如何被匹配 | $W_K$ |
| 被选中后传什么内容 | $W_V$ |
7. 自注意力和交叉注意力里的 Q/K/V
7.1 Self-Attention
Self-attention 里,Q/K/V 都来自同一个序列:
这让一句话内部的 token 可以互相看。
| 位置 | 来源 |
|---|---|
| Q | 当前序列 |
| K | 当前序列 |
| V | 当前序列 |
LLM 的 decoder block 主要使用 causal self-attention,也就是只能看当前位置及之前的 token。
7.2 Cross-Attention
Encoder-decoder Transformer 里还有 cross-attention。
| 位置 | 来源 |
|---|---|
| Q | decoder 当前状态 |
| K | encoder 输出 |
| V | encoder 输出 |
这和早期机器翻译 attention 更接近:decoder 用 Q 去查 encoder 产生的 K/V。
8. Multi-Head 为什么要多套 Q/K/V
一个 head 只能学一种匹配方式。多个 head 可以并行学习不同关系。
| head 可能关注的关系 | 例子 |
|---|---|
| 语法依赖 | 主谓、宾语、修饰关系 |
| 指代关系 | “它”指向哪个名词 |
| 局部邻近 | 前一个 token、短语内部 |
| 长距离依赖 | 跨句引用、代码括号匹配 |
| 格式结构 | Markdown 标题、列表、代码块 |
Multi-head attention 的公式:
每个 head 都有自己的 Q/K/V 投影。不同 head 学到的“检索方式”可以不同。
1 | flowchart LR |
9. Q/K/V 和 KV Cache
LLM 推理时,历史 token 的 K 和 V 不会变。
生成第 $t$ 个 token 时:
| 张量 | 是否需要重新算 | 原因 |
|---|---|---|
| 当前 Q | 需要 | 新 token 要发起查询 |
| 历史 K | 不需要 | 历史 token 的索引不变 |
| 历史 V | 不需要 | 历史 token 的内容不变 |
| 当前 K/V | 需要 | 新 token 要加入缓存 |
所以推理会缓存历史 K/V:
1 | 第 t 步: |
这也解释了为什么后来的注意力优化经常盯着 K/V:长上下文推理时,KV cache 会占大量显存。
10. 为什么当前探索多围绕 K/V
下面这些方向按截至 2026-06 的公开论文梳理。它们并不是都已经成为主流标准,但能看出研究重点:尽量保留 Q/K/V 的内容检索能力,同时降低长上下文的计算和缓存成本。
标准 multi-head attention 中,每个 head 都有自己的 K/V。推理时要为每一层、每个 head、每个历史 token 存 K/V。
KV cache 大小近似正比于:
1 | 层数 * 序列长度 * KV head 数 * head 维度 * 2 |
这里的 2 分别是 K 和 V。
当上下文从 4K 变成 128K,KV cache 会线性增长。于是新的注意力架构大多在问:
1 | 能不能少存一点 K/V? |
11. 当前探索一:MQA
Multi-Query Attention(MQA)保留多个 Q head,但所有 head 共享一组 K/V。
| 结构 | Q heads | KV heads | 结果 |
|---|---|---|---|
| MHA | 多个 | 多个 | 质量强,KV cache 大 |
| MQA | 多个 | 1 组 | KV cache 小,推理快 |
直观理解:
1 | 多个 query 视角还在 |
MQA 的目标是降低推理时读取 K/V 的内存带宽。Shazeer 2019 的论文标题“One Write-Head is All You Need”说的就是这个方向。
代价是表达能力可能下降,因为所有 query heads 共用同一个 K/V 空间。
12. 当前探索二:GQA
Grouped-Query Attention(GQA)介于 MHA 和 MQA 之间。
它把 query heads 分组,每组共享一组 K/V。
| 结构 | KV 共享方式 | 取舍 |
|---|---|---|
| MHA | 每个 head 独立 K/V | 表达能力强,缓存大 |
| MQA | 所有 head 共享一组 K/V | 缓存小,可能降质 |
| GQA | 一组 query heads 共享一组 K/V | 折中 |
GQA 论文还提出把已有 MHA checkpoint 转成 GQA/MQA,并用少量继续训练适配。论文报告中,GQA 可以接近 MHA 的质量,同时接近 MQA 的速度。
13. 当前探索三:MLA
Multi-head Latent Attention(MLA)是 DeepSeek-V2 提出的注意力结构。它的目标仍然是减少 KV cache,但思路不只是“少几个 KV head”,而是把 K/V 压到一个更小的 latent 表示里。
简化理解:
1 | 标准 MHA:缓存每层每个 token 的完整 K/V |
| 方法 | 怎么省 KV cache |
|---|---|
| MQA | 所有 heads 共享 K/V |
| GQA | 分组共享 K/V |
| MLA | 存更小的 latent 表示 |
MLA 的意义在于:它把“Q/K/V 是否必须完整显式存储”这个问题推进了一步。现代长上下文模型越来越重视这类结构。
14. 当前探索四:稀疏注意力
标准 attention 每个位置看所有位置,复杂度是 $O(L^2)$。
稀疏注意力改成只看一部分位置:
| 策略 | 看哪些 token |
|---|---|
| local window | 附近窗口 |
| global tokens | 少数全局位置 |
| block sparse | 按块选择 |
| dynamic sparse | 根据内容动态选择 |
Native Sparse Attention(NSA)代表了一个新方向:稀疏模式不仅要数学上省,还要和硬件计算方式对齐,并且最好能端到端训练。
在 Q/K/V 视角下,稀疏注意力不是取消 Q/K/V,而是减少每个 Q 需要匹配的 K/V 数量。
15. 当前探索五:线性注意力和替代架构
线性注意力试图把:
改写成能按序列长度线性计算的形式。常见思路是用核函数或递推状态,把历史 K/V 压缩到一个状态里。
粗略写法:
这仍然保留了 Q/K/V 的影子:
| 角色 | 线性注意力里的对应 |
|---|---|
| Q | 查询当前状态 |
| K | 决定如何写入状态 |
| V | 写入状态的内容 |
Mamba 这类 SSM 则走得更远:它不再使用标准 Q/K/V attention,而是用选择性状态空间模型处理序列。它说明当前研究并不是只在改 Q/K/V,也在探索 attention 之外的序列建模方式。
Kimi Linear 等较新的线性/混合注意力模型,则尝试在效率和检索能力之间重新折中。它们不是简单否定 Q/K/V,而是在问:哪些层、哪些场景还需要完整 attention,哪些地方可以用更便宜的结构替代。
2026 年的 Dynamic Linear Attention(DLA)继续沿着“压缩历史记忆”这个方向走。它关注的问题是:固定分块或固定合并策略会把重要 token 过早压进粗粒度状态里。DLA 尝试根据信息变化动态决定什么时候开新状态、什么时候合并旧状态。
| 方向 | 处理历史信息的方式 |
|---|---|
| 标准 attention | 保留所有历史 K/V |
| 稀疏 attention | 只看一部分历史 K/V |
| 线性 attention | 把历史压进递推状态 |
| 多状态线性 attention | 用多个状态保存不同粒度历史 |
| DLA | 根据信息变化动态合并状态 |
16. 当前探索六:Q/K/V 是否有冗余
近年的一些工作开始直接问:Q/K/V 三套投影是否都必要?
有研究讨论在一定假设下,Query、Key、Value 的某些投影可能存在冗余,可以被 identity 或更少的参数替代。这个方向还不是主流大模型的标准做法,但问题很有价值:
1 | Q/K/V 是最方便的分解方式,还是存在更省参数的等价分解? |
这类研究提醒我们:Q/K/V 是目前非常成功的工程和数学结构,但不是不可挑战的公理。
17. Q/K/V 的优势和代价
| 维度 | 优势 | 代价 |
|---|---|---|
| 表达能力 | 匹配和内容分开学 | 参数更多 |
| 并行性 | $QK^T$ 很适合矩阵乘法 | 序列长时 $L^2$ 成本高 |
| 可训练性 | soft attention 可微 | softmax 可能饱和 |
| 长上下文 | 能做内容检索 | KV cache 占显存 |
| 多头机制 | 多种关系并行建模 | K/V 存储和带宽压力大 |
Q/K/V 的成功不是因为它完美,而是因为它在表达能力、可训练性和硬件效率之间做了很好的平衡。
18. 常见误解
| 误解 | 更准确的说法 |
|---|---|
| Q/K/V 是人工写好的语义规则 | 它们是训练出来的线性投影 |
| Q 就是问题,K 就是关键词,V 就是答案 | 这是类比,真实模型里它们是向量空间 |
| self-attention 里 Q/K/V 完全一样 | 来源相同,投影矩阵不同 |
| attention 只是找最相关 token | 它是对多个 value 做加权混合 |
| 多头只是重复计算 | 不同 head 可以学习不同匹配关系 |
| KV cache 是模型参数 | KV cache 是推理时产生的中间状态 |
| MQA/GQA/MLA 取消了 Q/K/V | 它们主要是在压缩或共享 K/V |
| 线性注意力完全不需要 Q/K/V 思想 | 许多线性注意力仍保留 query/key/value 的角色分工 |
19. 和前两篇文档的关系
| 文档 | 重点 |
|---|---|
softmax历史由来与LLM应用深度调研.md |
分数如何变成概率/权重 |
Scaled Dot-Product Attention详解.md |
为什么用 $QK^T/\sqrt{d_k}$ |
| 本文 | 为什么要把表示拆成 Q/K/V |
三篇合起来可以按这条线读:
1 | Q/K/V 分工 -> QK 点积打分 -> scale 稳定分数 -> softmax 变权重 -> 加权汇总 V |
20. 小结
LLM 使用 Q/K/V,是因为序列建模需要一种可训练的内容检索机制。
Q/K/V 把 attention 拆成三个角色:
1 | Q:当前位置要找什么 |
数学上,它对应三组可学习线性投影、一个双线性匹配函数、一个 softmax 归一化,以及对 value 的加权求和。
工程上,它带来了强表达能力,也带来了 KV cache、长上下文和内存带宽问题。当前很多新结构,包括 MQA、GQA、MLA、稀疏注意力和线性注意力,都在围绕这个问题做取舍:保留 Q/K/V 的检索能力,同时降低 K/V 存储和读取成本。
21. 参考资料
历史和基础
- Bahdanau attention:Neural Machine Translation by Jointly Learning to Align and Translate
- Luong attention:Effective Approaches to Attention-based Neural Machine Translation
- Transformer 原论文:Attention Is All You Need
- Memory Networks:Weston et al., Memory Networks
Q/K/V 和推理优化
- MQA:Shazeer, Fast Transformer Decoding: One Write-Head is All You Need
- GQA:Ainslie et al., GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
- DeepSeek-V2 / MLA:DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
- Native Sparse Attention:Hardware-Aligned and Natively Trainable Sparse Attention
替代注意力和最新探索
- Mamba:Mamba: Linear-Time Sequence Modeling with Selective State Spaces
- DeltaNet:Parallelizing Linear Transformers with the Delta Rule over Sequence Length
- Kimi Linear:Kimi Linear: An Expressive, Efficient Attention Architecture
- Dynamic Linear Attention:Dynamic Linear Attention
- Q/K/V 冗余探索:On the Necessity of the Query, Key, and Value Weight Triplet