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 进行加权求和。