attention注意力机制中为什么要在分母上除以根号dk?
首先点出核心原因
核心原因:防止梯度消失,稳定训练过程
我们一步步拆解一下
-
注意力分数的计算: 在注意力机制中,我们首先会计算查询(Query)和键(Key)的点积,来得到一个注意力分数 (Attention Score)。这个分数体现了在当前查询下,每个“键”所对应内容的重要性。
-
点积带来的问题: 随着“键”向量(Key Vector)的维度 dk 增大,查询和键的点积结果的量级也会随之增大。具体来说,假设查询和键的向量元素是均值为0,方差为1的独立随机变量,那么它们的点积的均值仍然为0,但方差会变成 dk。
-
Softmax函数的敏感性: 接下来,注意力分数会经过一个 Softmax 函数,将其转化为概率分布,也就是我们常说的注意力权重。Softmax 函数对输入值的量级非常敏感。如果输入值过大,Softmax 函数的梯度会变得非常小,接近于0。
-
梯度消失的风险: 在深度学习模型的反向传播训练过程中,如果梯度过小,就会发生梯度消失的问题。这会导致模型的参数更新非常缓慢甚至停滞,从而难以有效地学习
为了解决上述问题,“Attention Is All You Need” 这篇开创性的论文引入了缩放因子 sqrt(dk)
-
稳定方差: 将点积的结果除以 sqrt(dk),可以将点积结果的方差稳定在1左右。这就保证了无论 dk 的维度大小如何,输入到Softmax函数的值都保持在一个合理的范围内。
-
保证梯度: 从而避免了将Softmax函数推向梯度极小的饱和区域,保证了在反向传播过程中有稳定且有效的梯度流,使得模型能够稳定地进行训练和学习。
-
保持注意力分布的有效性: 如果没有这个缩放,当 dk 很大时,Softmax函数的输出会趋向于一个“赢家通吃”的分布,即某个位置的注意力权重会非常接近1,而其他位置都接近于0。 这会使得注意力机制变得过于“尖锐”,不利于模型学习到不同位置之间细微的关联。通过缩放,可以得到一个更平滑的注意力分布,让模型可以关注到多个相关的位置。
总结
-
核心目的: 防止梯度消失,稳定训练过程。
-
具体做法: 通过缩放点积结果,将其方差控制在1附近。
-
带来的好处:
-
避免Softmax函数进入梯度饱和区,保证了有效的梯度流。
-
使得注意力权重的分布更加平滑,有利于模型学习。
-
让模型在不同维度的 dk 下都能保持稳定的训练动态。
-
更多推荐
所有评论(0)