理解 Transformer 的 QKV:为什么注意力要把匹配与内容分开

最近在钻研 Transformer 的核心公式时,我对 QKV(Query、Key、Value)机制有了一些新的理解。最初让我困惑的问题很简单:既然注意力机制最后需要的是 Value,为什么不直接用 Query 去匹配 Value,而要在中间多引入一个 Key?

顺着这个问题继续思考,我逐渐意识到,QKV 的关键并不只是多做一次向量变换,而是把“如何找到信息”和“信息本身是什么”拆成了两个不同的问题。

Q、K、V 分别在做什么

在自注意力机制中,每个 token 的表示都会经过三个不同的线性投影,得到 Query、Key 和 Value。对于某个位置的 Query,模型会把它与所有位置的 Key 计算相似度,再经过缩放和 Softmax 得到注意力权重,最后用这些权重对相应的 Value 做加权求和:

$$ \operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$

可以用一个直观的类比来理解:

  1. Query 表示“我现在想找什么”。
  2. Key 表示“我可以通过哪些特征被找到”。
  3. Value 表示“如果你关注我,我实际提供什么内容”。

因此,(QK^T) 负责决定不同 token 之间应该分配多少注意力,而 (V) 承载的是被聚合的内容。

为什么不直接让 Query 匹配 Value

如果 Query 直接与 Value 匹配,那么同一个向量既要负责暴露可检索的特征,又要负责保存最终传递的内容。这并非完全不可实现,但会把两个目标绑定在同一套表示中,限制模型学习不同的匹配规则和内容表示。

引入独立的 Key 和 Value 后,模型可以分别学习:

  1. 我应该怎样匹配,才能找到当前任务所需要的信息?
  2. 一旦某条信息被选中,它应该向后续计算传递什么内容?

这就是 QKV 设计中很重要的解耦。一个词在不同语境中可能承担不同作用,模型可以通过 Key 强调适合参与匹配的特征,同时通过 Value 保留另一组适合被聚合和传递的特征。换句话说,Key 更像索引,Value 更像索引指向的内容。

需要注意的是,Key 和 Value 并不是人工预先定义好的“属性表”。它们都是模型在训练过程中学习得到的投影。同一个 token 的 Q、K、V 来自同一份输入表示,但由于投影矩阵不同,它们可以服务于不同目的。

一个词有多种属性时,模型如何匹配

接下来还有一个问题:一个词往往同时具有许多属性。例如“猫”既是一种动物,也可能与牙齿、四肢、宠物或捕猎等概念有关。如果这些属性还存在不同层次,Transformer 如何选择当前语境中真正重要的关系?

从模型结构来看,这种表达能力主要来自以下几个方面。

1. 向量维度提供表达空间

更大的表示维度通常能够容纳更丰富的特征,使 Query、Key 和 Value 有空间编码更细致的语义。但维度并不是越大越好:它会增加参数量、计算量和显存占用。

在自回归推理中,历史 token 的 Key 和 Value 还需要保存在 KV Cache 中,因此 K、V 的总维度、序列长度、层数和精度都会直接影响缓存大小。模型设计需要在表达能力、计算成本与推理显存之间权衡。

2. 多头注意力从不同子空间观察关系

多头注意力(Multi-Head Attention)会把表示投影到多个子空间,并在每个头中独立计算注意力。同一个词在不同注意力头中可以关注完全不同的关系:某些头可能偏向句法依赖,某些头可能关注指代关系,另一些头则可能捕捉位置或语义关联。

因此,多头机制可以被理解为一种“多视角查询”。它不是为每个属性手工创建一个 Key,而是让不同注意力头在训练中自行学习有用的匹配方式。各个头的计算也可以并行执行,很适合现代 GPU 的计算模式。

3. 层层堆叠形成更上下文化的表示

Transformer 通常由多个 Block 堆叠而成,每一层都包含注意力模块和前馈神经网络(FFN)。浅层接收的表示更接近局部和表面特征;随着信息不断经过注意力交互与非线性变换,后续层能够在前面各层结果的基础上形成更抽象、更依赖上下文的表示。

这不意味着每一层都对应一个固定的语义层级,但深度确实让模型能够反复更新 token 表示:当前层生成的上下文信息会成为下一层新的输入,下一层再基于这些新表示计算自己的 Q、K 和 V。模型由此逐步构建更复杂的关系。

总结

理解 QKV 的关键,是把注意力看成“寻址”和“读取”两个阶段:Query 与 Key 决定应该关注谁,Value 决定关注之后能够取得什么内容。

在此基础上,向量维度提供表达空间,多头注意力提供不同的观察角度,多层堆叠则让表示随着上下文不断更新。它们共同构成了 Transformer 灵活的语义匹配能力。

所以,Key 并不是一道多余的中间步骤。它让模型可以把“如何找到信息”与“信息包含什么”分开学习,而这正是注意力机制能够适应复杂上下文的重要原因。