梯度消失和梯度爆炸

梯度消失和梯度爆炸是深度神经网络训练中的常见问题,尤其在使用sigmoid激活函数时。梯度消失导致前层权重更新缓慢,而梯度爆炸则使权重值变得过大。这两种情况都阻碍了网络的有效学习。解决方法包括使用ReLU激活函数和LSTM结构。此外,合适的权重初始化和批量归一化也可以缓解这些问题。
摘要由CSDN通过智能技术生成

什么是梯度消失和梯度爆炸

1. 梯度消失(gradient vanishing problem)

     我们知道神经网络在进行反向传播(BP)的时候会对参数W进行更新,梯度消失就是靠后面网络层(如layer3)能够正常的得到一个合理的偏导数,但是靠近输入层的网络层,计算的到的偏导数近乎零,W几乎无法得到更新。

2. 梯度爆炸(gradient exploding problem)

    梯度爆炸的意思是,靠近输入层的网络层,计算的到的偏导数极其大,更新后W变成一个很大的数(爆炸)。

二、梯度消失和梯度爆炸产生的原因

    产生梯度消失和梯度爆炸都是因为在神经网络中使用了sigmoid激活函数并且网络很深。为什么呢?

    以下图的反向传播为例(假设每一层只有一个神经元且对于每一层y_i = \sigma (z_i) = \sigma(w_ix_i +b_i),其中\sigma为sigmoid函数)

    

    可以推导出

 

    而sigmoid的导数如下图所示:

     

    可见sigmoid的导数的最大值是0.25。然后我们观察上面的推导式,是三个w_i \sigma'(z_{i-1})的连乘。

    当初始时w \sigma'(z) < 1 , 这种概率是很大的,因为一般初始化w都是小于1, 这时候,经过很多个小于1的数的连乘,最终得到的偏导数远远小于1,甚至接近于零,就产生了梯度消失的现象。这个时候,前面的hidden layer 1的权值更新会变得很慢,导致前面的层权值几乎不变,仍接近于初始化的权值,这就导致hidden layer 1相当于只是一个映射层,对所有的输入做了一个同一映射,这是此深层网络的学习就等价于只有后几层的浅层网络的学习了。

    当初始时w \sigma'(z) > 1, 就是w的初始化值远远大于4,这时候,经过很多个大于1的数的连乘,最终的到的偏导数远远大于1, 这就产生了梯度爆炸的现象。

    无论是梯度消失还是梯度下降,都是使得神经网络的训练过程变得更为曲折,应该尽可能避免它们。

三、解决方法

    对于梯度消失问题,可以考虑用ReLU激活函数取代sigmoid激活函数。另外,LSTM的结构设计也可以改善RNN中的梯度消失问题。

四、参考资料

   【1】 https://zhuanlan.zhihu.com/p/25631496

   【2】https://ziyubiti.github.io/2016/11/06/gradvanish/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值