梯度爆炸 && 梯度消失

1. 梯度爆炸、梯度消失的产生背景

    前面我们讲过梯度消失和梯度爆炸的根本原因是由于深度神经网络过长的链,在反向传播通过链式法则求导过程中产生的。

2. 梯度消失的特点

    2.1. 网络长度过长

    2.2. 反向传播链式求导

    2.3. 激活函数的最大值为0.25

3. 梯度消失的网络结构


    以上图为例开始,i1,i2是输入节点,h1,h2为隐藏层节点,o1,o2为输出层节点,除了输入层,其他两层的节点结构为下图所示:


    举例说明,NET_{o1} 为输出层的输入,也就是隐藏层的输出经过线性变换后的值,OUT_{o1} 为经过激活函数sigmoid后的值;同理NET_{h1} 为隐藏层的输入,也就是输入层经过线性变换后的值,OUT_{h1} 为经过激活函数sigmoid的值。只有这两层有激活函数,输入层没有。

4. 梯度消失的数学推导

  sigmoid的函数:


    sigmoid求导:


定义一下损失函数,这里的损失函数是均方误差函数,即:


具体到上图,就是:


第一个反向传播:

求损失函数对W5的偏导,即:


  首先根据链式求导法则写出对W5求偏导的总公式,再把图拿下来对照(如上),可以看出,需要计算三部分的求导,下面就一步一步来:


第二个反向传播:

  求损失函数对w1的偏导,即: 


      还是把图摆在这,方便看,先写出总公式,对w1求导有个地方要注意,w1的影响不仅来自o1还来自o2,从图上可以一目了然,所以总公式为:



     这个公式只是对如此简单的一个网络结构的一个节点的偏导,就这么复杂。。亲自推完才深深的意识到。。。


    梯度消失,爆炸产生原因:

    从上式其实已经能看出来,求和操作其实不影响,主要是是看乘法操作就可以说明问题,可以看出,损失函数对w1的偏导,与权重w,sigmoid的导数有关,明明还有输入i为什么不提?因为如果是多层神经网络的中间某层的某个节点,那么就没有输入什么事了。所以产生影响的就是刚刚提的三个因素。再详细点描述,如图,多层神经网络:





所以,总结一下,为什么会发生梯度爆炸和消失:

本质上是因为神经网络的更新方法,梯度消失是因为反向传播过程中对梯度的求解会产生sigmoid导数和参数的连乘,sigmoid导数的最大值为0.25,权重一般初始都在0,1之间,乘积小于1,多层的话就会有多个小于1的值连乘,导致靠近输入层的梯度几乎为0,得不到更新。梯度爆炸是也是同样的原因,只是如果初始权重大于1,或者更大一些,多个大于1的值连乘,将会很大或溢出,导致梯度更新过大,模型无法收敛。

5. 参考文献

本文摘自一篇很好的blog,https://zhuanlan.zhihu.com/p/76772734,这里就直接搬过来了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。