五分钟看懂attetion为什么要除以根号dk
在 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(dkQKT)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_iq⋅k=∑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[q⋅k]=∑i=1dkE[qi]E[ki]=0
- 方差:由于每个分量的方差为 1,点积的方差为分量方差之和,即 Var(q⋅k)=dk\text{Var}(q \cdot k) = d_kVar(q⋅k)=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 就像是给注意力机制装了一个归一化调节器:
- 稳定方差:抵消维度 dkd_kdk 增大带来的数值膨胀。
- 激活梯度:让 Softmax 避开饱和区,维持梯度的流动性。
- 加速收敛:更稳定的数值分布让模型在训练初期更容易找到优化方向。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)