Transformer 中的自注意力机制

从 Q、K、V 出发理解缩放点积注意力、矩阵转置与 Softmax。

Q、K、V 是什么?

  • Q(Query,查询):当前位置想寻找什么信息。
  • K(Key,键):每个位置能够提供什么信息。
  • V(Value,值):每个位置实际携带的信息。

输入序列表示为:

$$ X \in \mathbb{R}^{n \times d_{\text{model}}} $$

通过三个不同的线性变换得到 Q、K、V:

$$ Q=XW_Q,\qquad K=XW_K,\qquad V=XW_V $$

其中:

$$ W_Q,W_K \in \mathbb{R}^{d_{\text{model}}\times d_k},\qquad W_V \in \mathbb{R}^{d_{\text{model}}\times d_v} $$

这些 $W_Q$、$W_K$、$W_V$ 都是模型训练得到的参数。

Attention 核心公式

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

计算相关性

$$ S=QK^T $$

Q 和 K 做点积,得到每两个 Token 之间的相关程度。点积越大,说明当前位置越应该关注对应的 Token。

缩放

$$ S’=\frac{QK^T}{\sqrt{d_k}} $$

当维度 $d_k$ 较大时,点积结果可能过大,导致 Softmax 梯度变小。除以 $\sqrt{d_k}$ 可以让训练更稳定。

转换为注意力权重

$$ A=\operatorname{softmax}(S’) $$

Softmax 将每一行转换为总和为 1 的权重。例如 $A=[0.1,\ 0.7,\ 0.2]$ 表示当前位置将 70% 的注意力放在第二个 Token 上。

对 V 加权求和

$$ O=AV $$

模型根据注意力权重汇总不同 Token 的 Value,得到当前位置新的上下文表示。

一个简单类比

假设句子是:

小明把苹果放进冰箱,因为它很新鲜。

模型处理“它”时,Q 是“它指的是什么?”,K 是“小明”“苹果”“冰箱”等词提供的匹配线索,V 则保存每个词真正需要传递的语义信息。若“苹果”的注意力权重最高,模型就会更多地将“苹果”的信息融入“它”的表示。

Q 和 K 决定关注谁,V 决定从被关注对象那里获取什么信息。

$K^T$ 中的 T 是什么?

$K^T$ 中的 T 表示矩阵转置(Transpose),不是 K 的幂。若:

$$ K\in\mathbb{R}^{n\times d_k} $$

那么:

$$ K^T\in\mathbb{R}^{d_k\times n} $$

因此:

$$ QK^T:(n\times d_k)(d_k\times n)\rightarrow(n\times n) $$

结果矩阵中 $S_{ij}=Q_i\cdot K_j$,表示第 $i$ 个 Token 的 Query 与第 $j$ 个 Token 的 Key 的匹配程度。

Softmax 是什么?

Softmax 可以把一组任意实数转换为一组概率或权重:每个值都在 0 到 1 之间,且所有值相加等于 1。

$$ \operatorname{softmax}(z_i)=\frac{e^{z_i}}{\sum_{j=1}^{n}e^{z_j}} $$

例如:

$$ [1,2,3]\xrightarrow{\operatorname{softmax}}[0.09,0.24,0.67] $$

在 Attention 中,$QK^T/\sqrt{d_k}$ 得到的是 Token 之间的相关性分数。Softmax 将这些分数转换成注意力权重,再用它们对 V 进行加权求和。