在 Transformer 模型中,Scaled Dot-Product Attention(缩放点积注意力) 的公式如下:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dk QKT)V

这里的 dk\sqrt{d_k}dk (其中 dkd_kdk 是 Key 向量的维度)被称为缩放因子。为什么要除以它?最核心的原因是为了防止梯度消失,保证训练的稳定性


1. 数学推导:控制方差

假设查询向量 qqq 和键向量 kkk 的每个分量都是独立同分布的随机变量,在计算 Attention 之前通常会经过一个 LayerNorm (归一化)层。满足均值为 0,方差为 1。

对于点积 q⋅k=∑i=1dkqikiq \cdot k = \sum_{i=1}^{d_k} q_i k_iqk=i=1dkqiki

  • 均值E[q⋅k]=∑i=1dkE[qi]E[ki]=0E[q \cdot k] = \sum_{i=1}^{d_k} E[q_i] E[k_i] = 0E[qk]=i=1dkE[qi]E[ki]=0
  • 方差:由于每个分量的方差为 1,点积的方差为分量方差之和,即 Var(q⋅k)=dk\text{Var}(q \cdot k) = d_kVar(qk)=dk

这意味着,随着维度 dkd_kdk 的增大,点积结果的方差也会线性增加。点积结果的取值范围会变得非常大,导致其数值在概率上更容易落在极大或极小的区间。


2. 对 Softmax 的影响:防止“饱和”

Softmax 函数的特性是:当输入数值非常大或非常小时,函数的梯度会变得极其微小。

  • 数值过大的后果:如果点积结果 QKTQK^TQKT 的方差很大,Softmax 后的概率分布会趋向于“独热码”(One-hot),即某一个位置的权重接近 1,其余全部接近 0。
  • 梯度消失:在反向传播时,Softmax 在这些极值区域的导数几乎为 0。这会导致梯度无法有效回传,模型参数停止更新,从而使训练陷入停滞。

通过除以 dk\sqrt{d_k}dk ,我们将点积结果的方差从 dkd_kdk 重新缩放回了 1。这样可以确保输入 Softmax 的数值保持在一个梯度相对较大的适中范围内。


3. 为什么是 dk\sqrt{d_k}dk 而不是 dkd_kdk

这是一个常见的疑问。其实这和概率论中的**标准差(Standard Deviation)**有关:

  • 如果我们想要将方差为 dkd_kdk 的分布调整为方差为 1 的分布,我们需要除以标准差,即 dk\sqrt{d_k}dk
  • 如果除以 dkd_kdk,在维度很高时,点积结果会被压缩得太小,导致 Softmax 后的分布过于平滑,模型难以区分不同信息的重要性。

总结

除以 dk\sqrt{d_k}dk 就像是给注意力机制装了一个归一化调节器

  1. 稳定方差:抵消维度 dkd_kdk 增大带来的数值膨胀。
  2. 激活梯度:让 Softmax 避开饱和区,维持梯度的流动性。
  3. 加速收敛:更稳定的数值分布让模型在训练初期更容易找到优化方向。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐