Transformer注意力机制公式图解:从缩放点积到多头注意力
2026/8/6 14:08:20 网站建设 项目流程

注意力的核心可以概括为:用 Query 和 Key 计算“该关注谁”,再用得到的权重对 Value 加权求和。

1. Q、K、V 分别在做什么

可以先把一个位置上的三个向量理解为:

  • Query(查询):当前位置想寻找什么信息;
  • Key(键):每个位置用什么特征参与匹配;
  • Value(值):该位置真正提供给输出的内容。

1.1 为什么 Q、K、V 能承担这些角色

Q 并不是天然的“问题”,K 也不是天然的“关键信息”。它们的名称来自各自在计算中的作用:

  1. 对当前位置 i,模型用 qᵢ 与每个位置 j 的 kⱼ 做点积,得到匹配分数;
  2. 分数越高,表示当前位置 i 越应该从位置 j 获取信息;
  3. 分数经过缩放和 Softmax 变成权重,再用这些权重汇总各位置的 vⱼ。

因此,qᵢ 承担的是“发起匹配”的角色,kⱼ 承担的是“接受匹配”的角色,vⱼ 承担的是“传递内容”的角色。QKᵀ 本身不是凭空产生了注意力含义,它只是一次性算出所有 Query 与所有 Key 的两两点积;这些点积经过缩放、Mask 和 Softmax 后,才成为真正用于汇总 Value 的注意力权重。

在自注意力中,Q、K、V 都由同一输入经过三组不同的线性投影得到。网络结构预先规定了“查询—匹配—取值”这条信息流,训练数据、损失函数和反向传播则不断调整三组投影参数,使点积较高的位置逐渐对应“对当前任务有帮助的信息”。

可以把注意力机制看成一种适合承载和传递信息的可学习结构:结构规定信息怎样流动,训练决定具体寻找什么、匹配什么以及传递什么。模型并没有被人工告知某个头必须学习指定的关系,这些行为是在优化任务目标的过程中形成的。

图中讨论的是长度为 n 的自注意力,因此 Q、K、V 的行数相同。注意力权重矩阵的形状是“Query 数 × Key 数”,输出矩阵的形状是“Query 数 × Value 维度”。

最重要的读矩阵方法

  • QKᵀ 的第 i 行:第 i 个 Query 与所有 Key 的匹配分数;
  • 注意力权重矩阵 A 的第 i 行:第 i 个 Query 对各个 Key 的注意力分配,行和为 1;
  • 输出矩阵 AV 的第 i 行:为第 i 个 Query 位置生成的新表示,即对所有可见位置的 Value 做加权求和。

因此,注意力不会改变“第几行对应第几个 Query 位置”这一点;它改变的是该位置的表示,使其融入上下文信息。

以本文后面的两位置示例为例,注意力权重矩阵为:

A = [0.076 0.924] [0.018 0.982]

它应当按行阅读:

  • 第一行属于第一个 Query。它对第一个 Key 的权重是 0.076,对第二个 Key 的权重是 0.924,因此第一个输出为0.076 × V₁ + 0.924 × V₂
  • 第二行属于第二个 Query。它对两个 Key 的权重分别是 0.018 和 0.982,因此第二个输出为0.018 × V₁ + 0.982 × V₂

2. 为什么点积要除以 √dₖ

理解缩放因子前,需要先区分两个不同的维度:

  • **dₖ:**每个 Query、Key 向量包含多少个特征,也是计算一次点积时参与累加的项数;
  • **Key 的位置数:**一个 Query 要与多少个 Key 比较,也就是 Softmax 在一行中接收多少个分数。

假设每个 Query 和 Key 都是 64 维,即 dₖ = 64:

Q 的形状:Query 位置数 × 64 K 的形状:Key 位置数 × 64 QKᵀ 的形状:Query 位置数 × Key 位置数

QKᵀ 中的每一个元素都是一个标量分数。例如第 i 个 Query 与第 j 个 Key 的分数,是 64 对特征乘积的总和:

score(i, j) = qᵢ₁kⱼ₁ + qᵢ₂kⱼ₂ + … + qᵢ₆₄kⱼ₆₄

随后,Softmax 处理 QKᵀ 的一整行。如果序列中有 128 个 Key,那么 Softmax 接收的是 128 个分数;如果只有 10 个 Key,它就接收 10 个分数。Softmax 接收多少个元素由 Key 的位置数决定,与 dₖ = 64 没有必然关系。

那么 dₖ 为什么会影响 Softmax?因为它决定了每个分数由多少项相加得到。若 q 和 k 的各维元素近似独立、均值为 0、方差为 1,那么每一项乘积的方差约为 1:

1 维点积:方差约为 1 64 维点积:方差约为 64,标准差约为 8

也就是说,dₖ = 64 时,点积分数的典型波动尺度会从 1 增长到 √64 = 8。Softmax 对分数之间的差距非常敏感。同样是三个分数,尺度放大后会产生截然不同的结果

Softmax([0, 1, 2]) ≈ [0.090, 0.245, 0.665] Softmax([0, 8, 16]) ≈ [0.0000001, 0.000335, 0.999665]

第二组分数使 Softmax 几乎只选择一个位置,其余位置的权重和相关梯度都非常小。如果这种尖锐分布只是由特征维度增大造成,而不是由模型真正学到的强相关性造成,就会妨碍训练

因此,需要将 QKᵀ 中的每一个点积分数都除以 √dₖ。当 dₖ = 64 时,除数是 √64 = 8:

缩放前:分数的方差约为 64,标准差约为 8 缩放后:分数的方差约为 1, 标准差约为 1

这里除以 √dₖ 而不是 dₖ,是因为要归一化的是点积分数的标准差若直接除以 64,分数会被压得过小,Softmax 又容易接近平均分配

一句话总结:dₖ = 64 表示每个点积分数累加了 64 项,不表示 Softmax 一定接收 64 个元素。除以 √64,是为了抵消这 64 项累加带来的数值波动,使进入 Softmax 的分数保持在较稳定的尺度。

方差约为 1 的推导依赖独立、零均值、单位方差等理想化假设,真实网络不会始终严格满足这些条件。缩放的实际作用是控制注意力分数的量级,减轻 Softmax 仅因特征维度增大而过早饱和;它有助于稳定训练,但不能单独解决模型中的所有梯度问题。

3. 单头自注意力:完整计算流程

下面用两个输入向量演示一次完整计算。示例中的权重是为了便于手算而给定的;在真实训练中,Q、K、V 的三组投影矩阵都是通过反向传播学习的参数。

3.1 生成 Q、K、V

输入分别乘以三组投影矩阵,得到 Query、Key 和 Value。

3.2 计算并缩放匹配分数

QKᵀ 中的每个元素表示一个 Query 与一个 Key 的点积匹配分数;再用 √dₖ 对分数进行缩放。

3.3 按行进行 Softmax

Softmax 应用于每一行,使同一个 Query 对所有 Key 的权重之和为 1。

3.4 用权重汇总 Value

最后,将每一行注意力权重与 V 相乘,得到对应 Query 位置的新表示。

重点:

  1. 第 i 个输出仍对应第 i 个 Query。它不是把所有词压成一个全局向量,而是为每个 Query 分别生成一个上下文化表示。
  2. “所有位置”应理解为所有可见位置。编码器自注意力通常可见整段输入;因果掩码会屏蔽未来位置,Padding Mask 也会排除填充位置。

3.5 为什么还需要多头注意力

单头自注意力已经能够形成复杂的注意力模式,但每个 Query 最终只产生一张注意力分布,并在同一个 Value 子空间内汇总信息。当模型需要同时表示语法依赖、语义关联、指代关系等不同特征时,这些模式需要共享同一套投影参数,彼此可能相互牵制。

多头注意力让多个头使用独立投影,分别生成注意力分布和上下文表示,再将结果统一融合。这样,模型便拥有多个可以并行学习的表示子空间,更容易形成互补的关注模式。

4. 多头注意力:并行观察,再统一融合

每个头都有独立的 Q、K、V 投影矩阵,因此可以在不同的表示子空间中形成不同的注意力模式。各头的输出不是取平均,而是先拼接,再通过输出投影矩阵 Wᴼ 做一次可学习的线性融合。

每个头的 Key 和 Value 维度通常设为“模型维度 ÷ 头数 h”。这意味着每个头会把完整输入投影到一个较低维的子空间,而不是把输入向量的原始坐标机械地切成 h 段。

4.1 每个头独立投影 Q、K、V

下面的示例使用两个头。两套独立参数让同一输入产生两组不同的 Q、K、V。

4.2 每个头独立计算注意力

每个头内部仍然执行相同的“点积—缩放—Softmax—加权求和”流程,但得到的权重矩阵和输出可以不同。

4.3 拼接并做输出投影

各头输出沿特征维拼接,然后乘以可学习的输出投影矩阵 Wᴼ,回到原来的模型维度。

多头的价值不是保证每个头一定学会“语法”“语义”等预先指定的分工。我觉得是设计一个适合承载和传递信息的结构,神经网络和损失函数会帮你让参数执行对应任务。多头提供的是多个可并行学习的投影子空间和注意力分布,使模型更容易同时表示不同位置、不同特征之间的关系。

5. 注意力在 Transformer 中的三个位置

以原始 Encoder–Decoder Transformer 为例,注意力主要出现在三处:

位置Query 来源Key / Value 来源可见范围
编码器自注意力编码器上一层输出同一份编码器输出通常可看见全部非填充输入位置
解码器自注意力解码器上一层输出同一份解码器输出使用因果掩码,只能看见当前位置及之前的位置
编码器—解码器注意力解码器当前表示编码器最终输出每个目标位置可关注源序列的全部非填充位置

三者使用的是同一套注意力思想,区别主要在于Q、K、V 来自哪里,以及哪些位置被 Mask 屏蔽

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询