注意力里的 Value 为什么不是用来匹配的
围绕 Query、Key、Value 和缩放点积注意力的描述,解释 Query 与 Key 如何决定关注关系,以及 Value 为什么负责携带被汇总的信息。
相关工具
注意力其实在回答两个不同问题
当一个位置需要从序列中读取信息时,注意力要先回答“应该关注哪些位置”,再回答“从这些位置拿回什么内容”。如果把这两个问题混成一件事,Query、Key、Value 的分工就很难理解。
Transformer 相关概念 把 Self-Attention 的计算拆成几个步骤:先用 Query 和 Key 计算分数,再通过 Softmax 得到权重,最后用这些权重对 Value 做加权求和。前两步决定信息来源,最后一步决定信息内容如何进入当前位置。

Query 和 Key 形成注意力权重,Value 按权重提供最终被汇总的内容。
Query 像当前位置提出的问题
对某个目标位置来说,Query 是当前位置经过投影后形成的查询表示。它不只是原始词向量的另一个名字,而是模型为了计算关系而学习出的特征。当前位置不同,Query 通常也不同,因此它们可能对同一组 Key 产生不同的匹配结果。
在自注意力中,每个位置都会产生自己的 Query,并用它与句子中各位置的 Key 比较。当前位置像是在问:为了更好地表示自己,我应该从哪些位置读取信息?这个问题的答案由 Query 和 Key 的相关性共同决定。
Key 像每个位置提供的可检索标签
Key 也是由输入表示投影得到的,但它承担的任务不是携带全部内容,而是参与匹配。每个位置的 Key 可以理解为该位置用于被查询的特征摘要。Query 与 Key 的点积越大,说明当前查询和该位置在用于匹配的空间中越相关。
这并不意味着 Key 是人工写好的标签,也不意味着一个位置只有一个固定语义。Key 的投影矩阵通过训练获得,模型会根据预测任务调整哪些特征适合被查询。不同注意力头还有不同的投影,因此同一位置可以在多个子空间中拥有不同的可检索特征。

当前位置的 Query 与各位置的 Key 计算相关性,形成一组注意力分数。
Value 携带的是被读取的内容
当注意力已经算出一组权重后,还需要把源位置的信息带回来。Value 就是为此准备的表示。每个位置的 Value 包含该位置经过投影后的内容特征,最终输出会按照注意力权重对这些 Value 做加权求和。
因此,Value 不负责决定某个位置是否值得关注。一个位置可能因为 Key 与 Query 很匹配而得到较高权重,也可能权重较低;真正进入输出的贡献由“权重乘以 Value”决定。匹配和携带是两条相关但不同的计算路径。
为什么不能直接用 Key 做加权求和
从计算上说,当然可以设计其他变体,但经典 Transformer 把 Key 和 Value 分开,是为了让“检索特征”和“输出内容”拥有不同的投影空间。Key 更适合回答相关性问题,Value 更适合保存要传递给当前位置的表示。
如果强行让同一向量同时承担两种职责,模型需要在一个空间里兼顾匹配和内容表达。分开投影后,Query-Key 的点积可以专注于关系判断,Value 则可以保留更适合下游子层使用的信息。它们来自同一个输入,却不必承担相同任务。
缩放点积发生在 Query 和 Key 之间
文中的缩放点积注意力先计算 Q 和 K 的转置,再除以根号 d_k,经过 Softmax 变成权重,最后乘以 V。缩放项作用在匹配分数上,不是直接缩放 Value。这样可以避免 Query 和 Key 维度较大时点积数值过大,导致 Softmax 过于尖锐。
这个顺序进一步说明三者的职责:Q 和 K 决定概率分布,V 接受这组分布的加权。理解公式时,可以先圈出分数路径 QK,再圈出信息路径权重乘 V,两个路径在最终求和处汇合。

Query 和 Key 经过缩放与 Softmax 形成权重,Value 沿另一条路径被加权汇总。
自注意力和交叉注意力的分工都成立
在 Self-Attention 中,Q、K、V 都来自同一序列的输入表示,所以每个位置既可以查询其他位置,也可以作为被查询的位置。在交叉注意力中,Query 来自解码器当前表示,Key 和 Value 来自编码器输出,但“匹配”和“携带”的分工不变。
交叉注意力的目标 Query 负责提出当前生成需要什么源信息,源端 Key 参与判断哪些位置相关,源端 Value 提供被汇总的源记忆。变的是三者的来源,不变的是它们在计算链路中的职责。
Value 不是原始词义的原样搬运
Value 是输入表示经过可学习矩阵投影后的结果。它可能保留当前位置的词义,也可能包含由前面层传来的上下文特征。在多层 Transformer 中,Value 的内容会随着层数变化,不应把它理解成词表中原始词向量的简单副本。
注意力输出是多个 Value 的加权组合,再进入残差、归一化或 FFN。这个组合结果表达的是“当前位置根据当前关系读取到的上下文”,而不是把某个源位置的向量完整复制过来。权重告诉模型从哪里取,Value 决定取回的表示长什么样。
用两条线记住 Q、K、V
第一条是匹配线:当前位置生成 Query,各位置提供 Key,点积和 Softmax 形成权重。第二条是信息线:各位置提供 Value,权重对 Value 做加权求和,形成注意力输出。
这两条线最后汇合,但前面的任务不同。看到“谁更相关”时关注 QK,看到“输出带回什么”时关注 V。把它们分开后,Self-Attention、交叉注意力、多头投影和注意力热力图都能用同一套逻辑解释。
常见问题
Value 会参与注意力分数计算吗?
经典缩放点积注意力中,分数由 Query 和 Key 的点积得到,Value 不参与匹配分数计算,而是在 Softmax 权重形成后被加权汇总。
Query、Key、Value 是否来自同一个输入向量?
Self-Attention 中通常来自同一序列的输入表示;交叉注意力中,Query 来自目标端,Key 和 Value 来自编码器的源记忆。
Value 越大的位置是不是一定更重要?
不一定。重要性首先由 Query 和 Key 形成的权重决定,Value 表示被传递的内容。最终贡献取决于权重与 Value 的共同作用。