transformer中的attention为什么scaled?--转载自 知乎“TniL”

本文探讨了在神经网络中,为何大的输入会导致softmax激活函数的梯度变得极小,从而影响参数更新。通过示例代码展示了随着输入增大,梯度消失的现象。同时,解释了为何在高维空间中,维度的平方根常用于点积的放缩,以保持数值稳定。建议读者直接在原平台查看完整的公式和详细解释,以便更好地理解和讨论问题。
摘要由CSDN通过智能技术生成

原作者的答案在知乎,由于答案中有大量公式计算符号,无法较好的迁移至CSDN。因此选择了粘贴图片的方式进行转载,这种方式可能会为大家的阅读增添不便,希望您能理解。同时如有需要,非常建议大家点击超链接,到知乎中查看原作者的回答,同时也能方便您将自己的疑问或见解评论给原作者,从而更方便地进行后续交流。

1. 为什么比较大的输入会使得softmax的梯度变得很小?

对于一个输入向量 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8fdcf2e82a204221a9e9eaca37d4ee68.png),softmax函数将其映射/归一化到一个分布 ![在这里插入图片描述](https://img-blog.csdnimg.cn/98fc789293054ae590c5f04be306a807.png)。在这个过程中,softmax先用一个自然底数 e 将输入中的元素间差距先“拉大”,然后归一化为一个分布。假设某个输入  中最大的的元素下标是  ,如果输入的数量级变大(每个元素都很大),那么会非常接近1。我们可以用一个小例子来看看  的数量级对输入最大元素对应的预测概率的影响。假定输入  ),我们来看不同量级的  产生的有什么区别。 时,  ; 时, ; 时,  (计算机精度限制)。我们不妨把 a 在不同取值下,对应的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b87f36b44ae241e2a6e077dc8cb9e34a.png)的全部绘制出来。代码如下:

from math import exp
from matplotlib import pyplot as plt
import numpy as np 
f = lambda x: exp(x * 2) / (exp(x) + exp(x) + exp(x * 2))
x = np.linspace(0, 100, 100)
y_3 = [f(x_i) for x_i in x]
plt.plot(x, y_3)
plt.show()

输出图像为:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

也就是说,在输入的数量级很大时,梯度消失为0,造成参数更新困难。

注: softmax的梯度可以自行推导,网络上也有很多推导可以参考。

2. 维度与点积大小的关系是怎么样的,为什么使用维度的根号来放缩?

针对为什么维度会影响点积的大小,在论文的脚注中其实给出了一点解释
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
此处补充一下原链接评论区中,“予以初始”的回复评论:
在这里插入图片描述
方差越大,说明:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值