# Attention计算全过程:从QK转置到Softmax加权求和一步步拆解
上一篇文章给大家介绍了 Q、K、V 的直觉含义,这篇文章我们来把它"算一遍"。 不用担心,全程只有加减乘除和一个 Softmax,我们将会用一个简单的例子一步步来计算。
往期指路👉🏻
上一篇我们说:Query 在问"我该注意谁",Key 在回答"注意我",Value 是真正的信息。 但这些话说起来很直觉,计算机到底是怎么算出"注意多少"的呢?
答案就藏在这个公式里:
看起来有点吓人,但我们一步一步来,你会发现它其实非常合理。
# 举一个最小的例子
假设输入序列是:
我 爱 你
每个 Token 经过 Embedding 之后变成一个 2 维向量(真实场景里通常是 512 或 1024 维,这里用 2 维方便手算供大家理解):
| Token | 向量 |
|---|---|
| 我 | [1, 0] |
| 爱 | [0, 1] |
| 你 | [1, 1] |
把三行拼在一起,就得到输入矩阵 X_{3×2}。
为了简化计算,我们假设 W_Q = W_K = W_V = 单位矩阵,所以 Q = K = V。 (真实训练中这三个矩阵是不同的,是学习得来的,这里先理解流程)
# 第一步:计算 QKᵀ(谁和谁更相关?)
有了 Q 和 K,我们要计算每对 Token 之间的相关程度。
直觉是这样的:两个向量越"相似",它们的内积(点积)就越大。
把所有 Token 两两都算一遍,就是矩阵乘法 Q × Kᵀ。 Q 是 3×2,Kᵀ 是 2×3,结果是 3×3 的分数矩阵,每一格表示"行 Token 对列 Token 的关注程度"。
手算一下:
| 我 | 爱 | 你 | |
|---|---|---|---|
| 我 | 1 | 0 | 1 |
| 爱 | 0 | 1 | 1 |
| 你 | 1 | 1 | 2 |
注意右下角那个 2,代表"你"和自己的相似度最高——很合理,一个 Token 和自己当然最像。 讲到这里大家也应该明白了为什么要转置 K:
Q 和 K 都是 n×d 的矩阵,形状一样没法直接相乘。 把 K 转置成 d×n,才能得到 n×n 的分数矩阵,每一格刚好对应一对 Token。
# 第二步:缩放(为什么要除以 ?)
上一步得到的分数,可能会非常大——尤其是当向量维度$ d_k $很高的时候。
来看个例子,假设两个 64 维的向量,每个分量都是随机数,它们的内积期望值大概是 64 倍于 1 维的情况。这会导致什么?
梯度就几乎消失了,模型根本学不动。
解决方式很简单——除以$ √d_k$:
我们的例子里 , √2 ≈ 1.41,缩放后:
| 我 | 爱 | 你 | |
|---|---|---|---|
| 我 | 0.71 | 0 | 0.71 |
| 爱 | 0 | 0.71 | 0.71 |
| 你 | 0.71 | 0.71 | 1.41 |
分数被"压平"了一些,Softmax 就不会那么极端。
# 第三步:Softmax(把分数变成权重)
现在的分数还是普通数字,有正有负,我们需要把它们变成概率——非负,且每行加起来等于 1。
这正是 Softmax 做的事:
对每一行单独做 Softmax,以"我"这一行为例:
分数:[0.71, 0, 0.71]
总和 = 5.06,归一化后:
三行全部算完,得到注意力权重矩阵 A:
| 我 | 爱 | 你 | |
|---|---|---|---|
| 我 | 0.40 | 0.20 | 0.40 |
| 爱 | 0.20 | 0.40 | 0.40 |
| 你 | 0.27 | 0.27 | 0.46 |
可以验证,每行加起来都等于 1 ✅
"你"关注自己的权重是 0.46,明显高于关注另外两个词(各 0.27), 这说明 Attention 自动判断出:在当前这句话里,"你"最应该关注自己携带的信息。
# 第四步:加权求和(用权重"取"出信息)
最后一步,用注意力权重矩阵 A 对 V 做加权求和:
A 是 3×3,V 是 3×2,输出是 3×2,和输入 X 同形。
以"你"为例,它的权重行是 [0.27, 0.27, 0.46],V 矩阵的三行分别是:
- v₁(我)= [1, 0]
- v₂(爱)= [0, 1]
- v₃(你)= [1, 1]
"你"的输出向量 [0.73, 0.73] 是三个 Token 信息的加权混合,但对自身的权重更大。
这就是 Attention 的本质:每个 Token 的输出,都是全局信息的一次加权聚合,权重由相似度决定。
# 串起整个流程
| 步骤 | 操作 | 目的 |
|---|---|---|
| ① | Q × Kᵀ | 计算每对 Token 的相似度 |
| ② | ÷ √d_k | 防止分数过大导致梯度消失 |
| ③ | Softmax | 把分数变成概率权重,行和为 1 |
| ④ | × V | 按权重加权求和,聚合上下文信息 |
下一篇文章我们会进入 Multi-Head Attention,看看多个注意力头并行运转时,会带来什么效果,点个关注不迷路~
评论
验证登录状态...