对于梯度消失和梯度爆炸的理解

1、梯度消失、梯度爆炸产生的缘由html

   说白了,对于1.1 1.2,其实就是矩阵的高次幂致使的。在多层神经网络中,影响因素主要是权值和激活函数的偏导数。算法

1.1 前馈网络网络

  假设存在一个网络结构如图:函数

  其表达式为:优化

 

  若要对于w1求梯度,根据链式求导法则,获得的解为:spa

 

  一般,若使用的激活函数为sigmoid函数,其导数:3d

  这样能够看到,若是咱们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,致使梯度消失。若咱们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会致使求导的结果很大,造成梯度爆炸htm

   固然,若对于b求偏导的话,其实也是一个道理:blog

  推出:get

1.2 RNN

  对于RNN的梯度降低方法,是一种基于时间的反向求导算法(BPTT),RNN的表达式:

  一般咱们会将一个完整的句子序列视做一个训练样本,所以总偏差即为各时间步(单词)的偏差之和。

  而RNN还存在一个权值共享的问题,即这几个w都是一个,假设,存在一个反复与w相乘的路径,t步后,获得向量:

  若特征值大于1,则会出现梯度爆炸,若特征值小于1,则会出现梯度消失。所以在必定程度上,RNN对比BP更容易出现梯度问题。主要是由于RNN处理时间步长一旦长了,W求导的路径也变的很长,即便RNN深度不大,也会比较深的BP神经网络的链式求导的过程长很大;另外,对于共享权值w,不一样的wi相乘也在必定程度上能够避免梯度问题。

 1.3 悬崖和梯度爆炸

  对于目标函数,一般存在梯度变化很大的一个“悬崖”,在此处求梯度,很容易致使求解不稳定的梯度爆炸现象。

 

 3、梯度消失和梯度爆炸哪一种常常出现

  事实上,梯度消失更容易出现,由于对于激活函数的求导:

  能够看到,当w越大,其wx+b极可能变的很大,而根据上面sigmoid函数导数的图像能够看到,wx+b越大,导数的值也会变的很小。所以,若要出现梯度爆炸,其w既要大还要保证激活函数的导数不要过小。

 

 2、如何解决梯度消失、梯度爆炸

  一、对于RNN,能够经过梯度截断,避免梯度爆炸

  二、能够经过添加正则项,避免梯度爆炸

  三、使用LSTM等自循环和门控制机制,避免梯度消失,参考:http://www.javashuo.com/article/p-hfuqwseq-gv.html

  四、优化激活函数,譬如将sigmold改成relu,避免梯度消失

相关文章
相关标签/搜索