编程与 AI14 分钟阅读更新于 2026-08-03

Transformer 为什么要把注意力分数除以 √d_k

围绕缩放点积注意力,解释 Key 维度增大后点积分数如何变化,以及缩放为什么能让 Softmax 更稳定。

相关工具

点积为什么会变得太大

在 Self-Attention 中,Query 和 Key 会通过点积得到相关性分数。点积可以理解为两个向量在当前子空间中的匹配程度,但它的数值大小还会受到向量维度影响。维度越大,参与相加的项越多,点积分数的波动范围也可能变大。

如果直接把这些分数送进 Softmax,分数之间的差距可能被放得过大。最高分会几乎拿走全部概率,其他位置的概率接近零,注意力分布变得过于尖锐。文中的缩放点积注意力,就是在点积之后、Softmax 之前除以 √d_k。

Transformer 点积注意力分数随维度变化的示意图
点积分数随维度变化

Key 和 Query 的维度增大后,点积包含更多项,分数波动也会随之增大。

为什么是 √d_k,而不是随便除一个数

假设 Query 和 Key 的每个分量都接近零均值、方差相近,那么两个向量点积后,参与相加的项越多,整体方差通常会随着 d_k 增加。标准差大致按 √d_k 的尺度增长。

除以 √d_k 的目的不是让所有分数都变成同一个数,而是把不同头、不同维度下的分数尺度拉回比较合适的范围。这样,模型仍然可以区分相关和不相关的位置,但不会因为头内维度变大就自动把分布推向极端。

这里的 d_k 指 Key 的头内维度。多头注意力中每个头可能有自己的 d_k,但缩放逻辑相同:先计算 QK 的点积,再用对应头的维度做尺度调整。

Softmax 为什么怕分数过大

Softmax 会把分数转换为概率。分数差距较小时,几个候选位置仍有机会分到一定权重;分数差距很大时,最高分会迅速接近 1,其他位置接近 0。这样的分布看似选择明确,却会让许多位置几乎没有有效的梯度信号。

注意力训练需要不断调整 Query、Key 和 Value 的投影矩阵。如果 Softmax 长期处于饱和状态,稍微改变低概率位置的分数,输出概率也几乎不变,参数更新就会变得困难。缩放让 Softmax 工作在更容易保留梯度的数值区域。

Transformer 缩放点积对 Softmax 概率分布稳定性影响的示意图
缩放对 Softmax 的影响

缩放前分数容易让 Softmax 过度尖锐,缩放后注意力权重更适合继续训练。

缩放点积注意力完整走哪几步

一条完整流程是:输入表示先生成 Q、K、V;Q 与 K 做转置点积;结果除以 √d_k;根据需要加入 Padding Mask 或 Sequence Mask;再用 Softmax 得到注意力权重;最后用权重汇总 V。

缩放只发生在分数和 Softmax 之间,不会改变 Value 的内容,也不会直接改变序列长度。掩码同样作用在分数阶段,先限制不可见位置,再进行归一化。几个操作顺序看起来相邻,但各自解决的问题不同。

Transformer 缩放点积注意力从 QKV 到输出的完整流程图
缩放点积注意力的计算链路

QK 点积经过 √d_k 缩放和掩码后进入 Softmax,再汇总 Value。

缩放不会把所有注意力变得平均

除以 √d_k 并不是把分数强行压平,也不是让每个位置获得相同权重。真正相关的位置仍然可以拥有更高分,只是分数差距被控制在更适合比较和学习的范围内。训练过程中,模型仍然可以通过投影矩阵逐步形成尖锐或平缓的注意力模式。

如果任务确实需要某个位置高度集中,模型可以学习更明显的分数差异。缩放提供的是一个稳定起点,让这种集中来自数据和参数学习,而不是来自头内维度变大造成的数值副作用。

多头注意力中每个头都要缩放吗

通常每个注意力头都会在自己的头内维度上进行缩放。因为不同头分别拥有自己的 Q、K、V 投影,头内维度决定了各自点积的数值尺度。多头结果最后再拼接和投影回 d_model。

如果忽略这个缩放,头数和 d_model 改变时,Softmax 的输入尺度也会跟着改变,训练配置就更难保持一致。统一使用各头的 √d_k,可以让不同设置下的注意力计算拥有更可控的数值范围。

缩放与 LayerNorm、学习率是什么关系

缩放点积只负责控制注意力分数的尺度,LayerNorm 负责规范层内表示的数值分布,学习率负责控制参数每次更新的步幅。它们都和训练稳定有关,但作用位置不同,不能互相替代。

如果分数过大,先看 Q、K 的维度和缩放;如果层间表示尺度漂移,再看归一化和残差;如果更新过快或过慢,则需要检查学习率等训练配置。把问题放回对应计算环节,通常比把所有不稳定都归因于 Softmax 更容易判断。

记住这个除法的真正目的

Transformer 除以 √d_k,不是为了改变注意力机制的基本逻辑,而是为了让点积分数在进入 Softmax 时处于更合适的尺度。Q 和 K 仍然负责判断相关性,Softmax 仍然负责形成权重,Value 仍然负责携带被汇总的内容。

当向量维度增加时,缩放抵消了点积波动随维度扩大的趋势,避免概率分布过早饱和,也让梯度有机会继续推动参数学习。这个小步骤,连接了矩阵维度、概率分布和训练稳定性。

常见问题

为什么缩放因子是 √d_k?

在常见假设下,Query 和 Key 点积的标准差会随头内维度大致按 √d_k 增长,除以这个尺度可以让不同维度下的分数更稳定。

缩放会不会削弱模型区分相关位置的能力?

不会。它只是控制分数尺度,相关位置仍然可以通过学习得到更高分。缩放避免的是分数差距因维度变大而无意中变得过于极端。

掩码和缩放哪个先做?

通常先完成点积并缩放,再在 Softmax 前加入掩码,最后归一化得到注意力权重。具体实现可能合并部分操作,但逻辑职责不变。