一、坡度消失、坡度爆炸发生的原因说白了,相对于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以防止梯度消失