梯度消失和爆炸产生的主要原因及解决办法

在牛客刷题来总结一下,发现总结后的吸收效果更好,有表达不清和理解错误的地方希望大家指出。

从原理上,梯度消失和爆炸都是由链式求导法则引起了,区别在于在链式法则的连乘过程中,某个参数的引起的改变是被无限缩小(梯度消失)还是无限放大 (梯度爆炸)。故这里只讨论一下梯度消失的问题。

梯度消失产生是由于链式法则的无限缩小引起的:其中的“无限”体现在网络的层数,“缩小”则由不合适的激活函数引起。

(1)网络层数过多的情况下,考虑一种极端情况,若每层网络计算的导数值均小于1,则经过多层网络连乘后,最前面几层网络的参数的更新值将会无限小。

(2)激活函数选择不合适,比如使用sigmoid,梯度消失就会很明显,原因如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。

 

解决方法:

(1)pre-training+fine-tunning

其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。

(2) 选择relu等梯度大部分落在常数上的激活函数

relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失的问题,但也有可能会导致梯度爆炸。

(3)batch normalization

BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,进而解决梯度消失的问题,或者可以理解为BN将输出从饱和区拉到了非饱和区。

(4) 特殊网络的结构

残差网络中有很多跨层连接结构(shortcut),这样的结构在反向传播时多了反向传播的路径,可以一定程度上解决梯度消失的问题;LSTM全称是长短期记忆网络(long-short term memory networks),LSTM的结构设计可以改善RNN中的梯度消失的问题。主要原因在于LSTM内部复杂的“门”(gates),LSTM通过它内部的“门”可以在更新的时候“记住”前几次训练的”残留记忆“。

参考资料:

https://www.nowcoder.com/test/question/done?tid=31361018&qid=894494#summary

https://www.cnblogs.com/XDU-Lakers/p/10553239.html

https://www.cnblogs.com/pinking/p/9418280.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值