Skip to content

第二章 注意力机制的数学推导

注意力可以理解为一种可学习的内容读取:给定一个查询,在若干候选内容之间分配权重,再把内容聚合成输出。本章依次推导匹配、归一化、聚合、矩阵化和多头结构,而不是直接从最终公式开始记忆。

除特别说明外,向量采用行向量,省略 batch 轴。输入 query 序列为 $X_q\in\mathbb{R}^{S_q\times d}$,可读取的源序列为 $X_s\in\mathbb{R}^{S_k\times d}$。

1 为什么区分 Query Key 和 Value

假设一个位置想寻找“与当前主语相关的信息”。决定一个候选位置是否匹配所需的特征,未必等于最终需要传回的特征。因此使用不同的可学习投影:

$$ Q=X_qW_Q,\qquad K=X_sW_K,\qquad V_{\rm val}=X_sW_V $$

单头情况下,$W_Q,W_K\in\mathbb{R}^{d\times d_k}$,$W_V\in\mathbb{R}^{d\times d_v}$。Q 和 K 的内维必须一致,才能做点积;Value 的宽度 $d_v$ 在数学上可以不同。

Query 表示读取需求,Key 表示匹配特征,Value 表示待聚合内容。这些角色来自它们在计算中的位置,不代表网络事先被规定了语法标签或检索字段。

Self-Attention 中 $X_q=X_s=X$,但 $W_Q,W_K,W_V$ 是不同矩阵,所以 Q、K、V 通常不同。Cross-Attention 中 Q 与 K/V 来自不同序列,两个序列长度也可以不同。

2 点积如何形成可学习的匹配

对 query 行 $q_i$ 和 key 行 $k_j$,点积为:

$$ e_{ij}=q_ik_j^\top=\sum_{r=1}^{d_k}q_{ir}k_{jr} $$

如果对应分量的符号和幅度更一致,得分通常更大。但它不是余弦相似度:没有除以向量长度,所以向量范数也影响得分。

代入投影,可得到:

$$ e_{ij}=x_iW_QW_K^\top x_j^\top $$

这表明模型学习的是由 $W_QW_K^\top$ 决定的匹配方式,而非直接对原始 Embedding 求固定相似度。这个矩阵也不必对称,因此“位置 $i$ 读取位置 $j$”与反方向的得分不必相等。

3 为什么除以平方根

在一个用于理解尺度的简化模型中,假设 q、k 的各分量独立、均值为 0、方差为 1,且两个向量彼此独立。则单项乘积均值为 0、方差为 1;不同维的乘积互不相关,所以:

$$ \operatorname{Var}\left(\sum_{r=1}^{d_k}q_rk_r\right)=d_k $$

点积的典型幅度随 $\sqrt{d_k}$ 增长。若直接送入 Softmax,较大的分数差异容易产生很尖锐的分布。因此使用:

$$ z_{ij}=\frac{q_ik_j^\top}{\sqrt{d_k}} $$

在上述假设下,它的方差为 1。实际训练后的 Q/K 不严格满足独立同分布条件;这个推导说明缩放的动机,不是对所有层激活分布的精确保证。

4 从匹配分数到归一化权重

对固定 query $i$,沿可读取的 key 位置做 Softmax:

$$ a_{ij}=\frac{\exp(z_{ij})}{\sum_{r=1}^{S_k}\exp(z_{ir})} $$

于是 $a_{ij}\ge0$ 且 $\sum_ja_{ij}=1$。输出为:

$$ o_i=\sum_{j=1}^{S_k}a_{ij}v_j $$

在没有 attention dropout 的情况下,单头输出是 Value 行向量的凸组合。经过后续输出投影、残差和 FFN 后,整体网络输出不再受这个简单凸组合形式约束。

Softmax 对整行加同一个常数不变。数值实现常先减去该行最大值:

$$ a_{ij}=\frac{\exp(z_{ij}-m_i)}{\sum_r\exp(z_{ir}-m_i)},\qquad m_i=\max_jz_{ij} $$

这样减少指数溢出的风险,同时保持数学结果不变。

5 一个用于理解聚合的小例子

设缩放后的两个得分是 $[\log3,0]$,则权重为 $[3/4,1/4]$。若两个 Value 分别是 $[2,0]$ 和 $[0,4]$,输出为:

$$ o=\frac34[2,0]+\frac14[0,4]=[1.5,1] $$

这个输出没有“挑中一个 token 后原样复制”,而是把多个位置的内容按权重混合。改变 Query 会改变权重;改变 Value 会改变被混合的内容。这就是匹配路径与内容路径分开的意义。

注意力权重也不能自动当作完整的因果解释。模型还有多头混合、残差、FFN 和后续层;高权重只说明当前这条读取路径的系数较大。

6 矩阵形式与 mask

所有 query 对所有 key 的得分一次写成:

$$ QK^\top\in\mathbb{R}^{S_q\times S_k} $$

于是单头注意力为:

$$ \boxed{\operatorname{Attention}(Q,K,V_{\rm val})= \operatorname{softmax}{\rm row}\left(\frac{QK^\top}{\sqrt{d_k}}+M\right)V{\rm val}} $$

mask $M$ 对允许访问的位置取 0,对禁止访问的位置取 $-\infty$。指数为 0 后,该位置不参与权重分配。因果 Self-Attention 令 $j>i$ 的位置不可见;padding mask 则排除补齐长度的无效 token。

若某一行全部被屏蔽,普通 Softmax 的计算会出现未定义情形,实际实现需要处理。不能把“用一个很大的负数”视为所有 dtype、所有输入下都完全等价的数值实现。

7 Softmax 的梯度意味着什么

对一行权重向量 $a=\operatorname{softmax}(z)$,偏导为:

$$ \frac{\partial a_j}{\partial z_r}=a_j(\delta_{jr}-a_r) $$

矩阵写法是 $J=\operatorname{diag}(a)-aa^\top$。它说明增加一个分数,不只改变对应权重,也会通过分母改变其他权重。注意力分配是一种相对竞争。

若分布接近 one-hot,许多导数会很小。这进一步解释了缩放点积的动机:避免初始化时维度导致的过大分数,使网络过早进入很尖锐的权重分布。

还可以沿计算图看三条梯度通路。令 $O=AV_{\rm val}$,上游梯度为 $G=\partial\mathcal L/\partial O$,则:

$$ \frac{\partial\mathcal L}{\partial V_{\rm val}}=A^\top G,\qquad \frac{\partial\mathcal L}{\partial A}=GV_{\rm val}^\top $$

令 $H=\partial\mathcal L/\partial Z$ 表示经过逐行 Softmax 求导后的梯度,则:

$$ \frac{\partial\mathcal L}{\partial Q}=\frac{HK}{\sqrt{d_k}},\qquad \frac{\partial\mathcal L}{\partial K}=\frac{H^\top Q}{\sqrt{d_k}} $$

所以训练同时学习“传什么”和“如何匹配”。这些梯度再经线性层传到投影权重与输入表示。

8 Multi-Head Attention

单个注意力头对一个 query 产生一组位置权重。若希望不同表示子空间能够使用不同权重,就可以引入多个独立头:

$$ \operatorname{head}_r=\operatorname{Attention}(XW_Q^{(r)},XW_K^{(r)},XW_V^{(r)}) $$

$$ \operatorname{MHA}(X)=\operatorname{Concat}(\operatorname{head}_1,\ldots,\operatorname{head}_h)W_O $$

常见配置取 $d_k=d_v=d/h$,拼接后恢复宽度 $d$,再用 $W_O\in\mathbb{R}^{d\times d}$ 混合各头信息。大投影矩阵随后 reshape 成多个头,与分头投影在数学上可以等价,但不同头不是简单复制同一个 Q/K/V。

多头的区别主要来自多组投影与多组 Softmax 分布。一个宽头仍只有一组位置权重,不能仅凭总宽度相同就认为与多个小头完全等价。不同头可能形成不同功能,但没有机制保证每个头都会自动对应某个可命名的语言概念。

9 注意力尚未构成完整模型

以上机制解决了按内容交换信息的问题,却还没有告诉模型 token 顺序,也没有提供完整的深层优化结构和输出目标。下一步需要加入位置表示、残差、归一化和 FFN,并把模块放进 Encoder/Decoder 的计算图。

下一章:完整 Transformer 的组成与推导。