首页 > 编程知识 正文

lstm为什么能解决梯度消失问题,梯度爆炸和梯度消失定义

时间:2023-05-03 08:49:37 阅读:27938 作者:1794

一、坡度消失、坡度爆炸发生的原因说白了,相对于1.1 1.2,其实是矩阵的高阶幂引起的。 在多层神经网络中,影响因素主要是权重和激活函数的偏导数。

1.1假设前馈网络具有网络结构。

公式如下。

要对w1求梯度,根据连锁求导定律,得到的解如下。

通常,使用sigmoid函数时,导数如下:

这样,使用标准化初期w,可以看出各阶层的乘法都是0-1之间的小数,激活函数f的导数也是0-1之间的数,其联合后,结果变小,梯度消失。 如果我们初始化的w是大的数,w乘以激活函数的导数大于1,联合后求导的结果可能会变大,引起梯度爆炸。

当然,如果对b要求偏导的话,那也是理所当然的。

上市:

1.2 RNN对RNN的梯度下降方法是基于时间的反求算法(BPTT )、RNN的公式。

通常,我们将完整的字符串视为训练样本。 因此,总误差是每个时间步长(单词)的误差之和。

另一方面,RNN还存在这些w为一个的权重共享的问题,假设存在反复与w进行乘法运算的路径,并在t步后得到向量:

特征值大于1时发生梯度爆炸,小于1时发生梯度消失。 因此,在一定程度上,RNN比BP更容易出现梯度问题。 主要是因为RNN处理时间步长越长,w求导的路径越长,即使RNN深度不大,BP神经网络相对较深的链式求导过程也越大; 此外,在共享权重w的情况下,通过将不同的wi相乘,可以在一定程度上避免梯度的问题。

1.3悬崖和坡度爆炸

目标函数通常有梯度变化较大的“悬崖”,在此求梯度容易解决不稳定的梯度爆炸现象。

三、坡度消失还是坡度爆炸频繁出现,实际上坡度消失更容易出现。 因为激活函数的求导:

w越大,wx b越大的可能性越高,根据上述sigmoid函数导数的图像可以看出,wx b越大,导数的值也越小。 因此,发生梯度爆炸需要w大,激活函数的导数不要太小。

二、如何解决梯度消失、梯度爆炸1、对于RNN,通过梯度阻断,可以避免梯度爆炸

2、增加正则项,可以避免梯度爆炸

3、采用LSTM等自循环与门控制机制,防止坡度消失。 参考: https://www.cn blogs.com/pinking/p/9362966.html

4、优化激活函数,包括将sigmold改为relu以防止梯度消失

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。