为什么在进行softmax之前需要对attention进行scaled(为什么除以dk的平方根)?
transformer论文中的attention是ScaledDot-Porduct Attention 来计算keys和queries之间的关系。如下图所示:
在公式一中,作者对0和K进行点积以获得注意力权重,然后这些权重用于加权平均V。但在实际实现中,这个点积会被缩放,即除以keys的维度的平方根,常常表示为d_k。这里d_k是key向量的维度。
细心的同学都会发现,Attention 计算公式中会除以根号d,那问题来了!!!
Attention为什么要除以根号d 呢?
注:这个题目属于 NLP 面试中一个高频题,基本上问到Attention 或者Transformers的时候都会问。(小编在找实习的时候,就被问了不止十次,现在抽空整理一下答案。)
标准答案
从论文中可以看出,随着dk的值变大,点积的大小会增大,从而推动softmax函数往仅有很小的梯度的方向靠拢(分布集中在绝对值大的区域),导致softmax函数容易导致梯度消失问题。
例如,假设Q和K的均值为0,方差为1。它们的矩阵乘积将有均值为0,方差为dk(dk是Q或者K的维度大小)。因此,dk的平方根被用于缩放(而非其他数值),因为,Q和K的矩阵乘积的均值本应该为0,方差本应该为1,这样会获得一个更平缓的softmax。
如果你在面试过程中也遇到该问题,可以回答
随着d k的值变大,点积的大小会增大,如没有及时对点积的大小进行缩放,那么万一点积的数量级很大,softmax的梯度就会趋向于0,也就会出现梯度消失问题
问题引申新问题
当你按上述答案回答后,基本能够回答上点,但是面试官为了考察你对该问题的深度会进行问以下几个问题:
1、为什么d_k变大会使得 softmax 梯度变小,从而导致梯度消失呢?
2、除了sqrt(d_k),是否可以用其他值代替?
3、self-attention一定要这样表达吗?
4、有其他方法不用除根号dk吗?
问题一:为什么 变大会使得 softmax梯度变小,从而导致梯度消失呢!
标准答案:输入softmax的值过大,会导致偏导数趋近于0,从而导致梯度消失
问题二:为什么 变大会使得 softmax梯度变小,从而导致梯度消失呢?
标准答案:为什么选择,时因为可以使得0和K点积趋向于期望为0,方差为1的标准正态分布,说白了就是归一化。
问题三:self-attention一定要这样表达吗?
不需要,能刻画相关性,相似性等建模方式都可以。最好速度快,模型好学,表达能力够。
问题四:有其他方法不用除根号dk吗?
有,同上,只要能做到每层参数的梯度保持在训练敏感的范围内,不要太大,不要太小。那么这个网络就比较好训练。方式有,比较好的初始化方法,类似于google的T5模型,就在初始化把这个事情干了。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
标签:Transformer,字节,梯度,模型,Attention,救命,学习,softmax,dk From: https://blog.csdn.net/Z4400840/article/details/143658485