深度神经网络中梯度消失的原因及解决

来源:互联网 发布:打赏危害网络直播 编辑:程序博客网 时间:2024/05/16 18:41

我们总听到说梯度消失梯度消失,究竟是什么原因呢。

梯度消失

这里写图片描述
上图是我们的简单3隐层神经网络,我们采取sigmod函数作为每个神经元的激活函数。即,每层输入为:

zi=ωioi1+b1

输出为:
oi=σ(zi)

则根据求导的链式法则有:
Cb1=Co4o4b1=Co4o4z4z4b1=Co4σ(z4)z4o3o3b1=Co4σ(z4)ω4o3b1=Co4σ(z4)ω4σ(z3)ω3σ(z2)ω2o1b1=Co4σ(z4)ω4σ(z3)ω3σ(z2)ω2σ(z1)

这里我们就可以看出一些猫腻了。因为有梯度的连乘,而万一梯度一直小于1,则会在传递过程中越来越小,知道消失!碰巧我们的sigmod函数(如下图左)的导数(下图右)不大于1/4。就这样梯度在逐层传递中“消失了”。

这里写图片描述

解决

我们可以想个办法来解决这个问题。比如用一个导数最大值不是1/4的函数?嗯,挺好。但是最好也别太大,否则就会梯度爆炸。
人们发现log(1+ex)挺好,它的简化版本ReLu(Rectified Linear units)还简单明了,导数为1,解决连乘变小问题。

ReLu=max(0,x)

这里写图片描述

阅读全文
0 0
原创粉丝点击