技术博客

注意力机制三问:Q、K、V 各自扮演什么角色

第 45 / 147 篇 · 2026-06-27 · ai · 注意力机制Transformer表示学习

注意力机制的公式很多人第一天就会背:$\mathrm{Attention}(Q,K,V)=\mathrm{softmax}(QK^\top/\sqrt d)V$。但 Q、K、V 各自"是"什么,为什么要从一个 $x$ 分出三路,分开的标准答案——"Q 是查询、K 是键、V 是值"——其实什么也没解释。这篇从检索类比一路推到线性代数结构,把三问答完。

第一问:注意力到底在做什么运算

抛开深度学习,把注意力看成一个纯粹的数学对象。给定 $n$ 个 query 向量 $q_1,\dots,q_n$ 和 $m$ 个 (key, value) 对 $(k_j, v_j)$,输出

$$ o_i = \sum_{j=1}^{m} \frac{\exp(q_i^\top k_j / \sqrt d)}{\sum_{l}\exp(q_i^\top k_l / \sqrt d)}\, v_j. $$

逐条读这个式子:$q_i^\top k_j$ 是匹配分数,衡量"第 $i$ 个查询和第 $j$ 个条目有多配";softmax 把分数变成凸组合权重(非负、行和为 1);加权和的输出 $o_i$ 落在 $\{v_j\}$ 的凸包里。所以注意力是带内容寻址的凸组合:用匹配度做权重,把 value 集合按 query 的需求重新混合。这正是可微字典查找——数据库里"按 key 检索、返回 value"的那套结构,只是这里的"检索"是对全部条目的软选择,可以反向传播。

第二问:为什么要 Q/K/V 三个投影,而不是直接用 x

自注意力里 $Q=XW^Q$、$K=XW^K$、$V=XW^V$,三路都来自同一个 $X$。为什么不直接用 $x_i^\top x_j$ 当匹配分数、用 $x_j$ 本身当 value?

因为匹配用的表示和内容用的表示,对几何的要求不同。匹配分数 $q^\top k$ 要大,要求配对的向量方向一致——这是一组内积几何;而 value 是被混合进残差流、供后续层继续加工的工作表示,它要保留 token 的语义内容、幅度适中,便于跨层传递。把两种职责塞进同一组基向量里,它们会互相拉扯:为了让内积匹配有效,表示要迁就查询目标;为了内容保真,又要保持语义结构。$W^Q, W^K$ 学出一个专门的匹配子空间,$W^V$ 学出一个专门的内容子空间,两不相干。

另一个更硬的论证是幅度解耦。softmax 对 logits 的尺度敏感(下一篇详推),$q^\top k$ 的量级由 $\|q\|\|k\|$ 决定。三路投影让模型可以独立控制"匹配信号有多强"(调 $\|W^Q\|$、$\|W^K\|$ 的有效尺度)和"内容向量有多大"(调 $\|W^V\|$)。合并成一路,这个自由度就没了。

参数账也顺便算清:三个 $d\times d$ 投影加输出投影 $W^O$,注意力块的参数约 $4d^2$,和 FFN 一个量级——这四个矩阵各自有明确分工,没有一个冗余。

第三问:自注意力和 cross attention 差在哪

自注意力是 $Q,K,V$ 同源的特例:每个 token 既发查询也挂广告(key)也供内容(value)。Cross attention(encoder-decoder 的桥)把分工显式化了:$K,V$ 来自编码器的最终输出,$Q$ 来自 decoder 当前位置。语义立刻清楚——decoder 在已经写出的内容基础上,向编码器"提问":每个生成位置拿自己的 query 去编码器存储的 (key, value) 池子里检索。T5 和原始 Transformer 的翻译模型就是这套;decoder-only 的 GPT 系把 cross attention 也砍了,跨段检索外包给上下文拼接,这是架构史上一次大的路线分岔(后面有专篇)。

Q/K/V 三分法:匹配子空间与内容子空间解耦,输出是 value 的凸组合 Query:我要找什么 学匹配几何的内积信号 Key:条目的索引 与 Q 同一内积空间 Value:条目的内容 独立的内容子空间 可微字典:score = q·k,输出 o = Σ softmax(score)·v k₁(广告) k₂(广告) k₃(广告) v₁(内容) v₂(内容) v₃(内容) wᵢ = softmax(q·kᵢ) o = w₁v₁ + w₂v₂ + w₃v₃ Q·K 定权重,V 被混合

一个容易被忽略的角色:输出投影 W^O

多头注意力的最后一步是 $\mathrm{Concat}(o^{(1)},\dots,o^{(h)})W^O$。$W^O$ 常被当成"凑形状的",但它的实质是把头空间的输出重新投影回残差流的表示空间——每个头在自己的子空间里算出的凸组合,需要经过一个 learned 的线性混合才能作为"本层的修改意见"写回残差流。没有这个矩阵,各头的输出维度之和 $d$ 只是恰好拼回去,头与头之间没有任何信息交换。后面的谱系篇(MLA、GQA)会看到,注意力变体改动最多的就是这几个投影的共享方式,而 Q/K/V 三分的骨架一直没动。

小结

三个角色一句话:Q 和 K 共处一个内积空间,负责"谁配谁"的匹配;V 在独立的内容空间,负责"配上了给什么";输出 $o_i$ 是 value 的 softmax 加权凸组合,是可微字典查找。三个投影不是仪式性的对称设计,而是把匹配几何、内容保真、幅度控制三种互相冲突的需求解耦到各自的权重矩阵里。下一篇从这个公式里最扎眼的一个常数入手:为什么是 $1/\sqrt d$。