简单理解梯度消失与梯度爆炸

这两种现象的触发原因都是由于网络层数比较多,导致梯度在逐层回传的时候累积出了问题。

梯度消失

接近输出层的网络层梯度更新较为正常,而越远(越接近输入层),其权值更新会非常慢,此时对网络的学习相当于等价于只对后几层的学习,而前面层的权重可以认为约等于是固定的保持不变。

诱因 可以发现sigmoid激活函数的导数如下:
在这里插入图片描述
可以发现其导数是不会大于0.25的,此时链式求导梯度回传过程中梯度是很可能逐渐变小的(取决于初始化权值的大小),导致最后梯度约等于0,即"消失"。

可以考虑采用如下方法缓解梯度消失问题:

  • 将sigmoid替换成ReLU(其导数只为0或1)
  • 使用BatchNorm层(约束 x x x的取值从而防止sigmoid导数过小)
  • 使用现代化网络设计(如ResNet的残差连接与LSTM的门结构)
  • 优化权重初始化方式(如xavier)
梯度爆炸

接近输出层的网络层梯度更新较为正常,而越远(越接近输入层),其权值波动会非常剧烈,此时网络训练不稳定。不过相对于梯度消失而言,梯度爆炸则不那么容易遇到,其解决方案如下:

  • 梯度裁切(给梯度设定阈值)
  • 权重正则化(L1正则化,L2正则化)
  • 上述四种梯度消失的解决办法
推荐阅读

https://zhuanlan.zhihu.com/p/72589432

猜你喜欢

转载自blog.csdn.net/qq_40714949/article/details/122377079