机器学习-梯度消失和梯度爆炸

反向传播算法的影响

      上图为一个四层的全连接网络,假设每一层网络的输出为,其中代表第i层的激活函数,x代表第i层的输入,即第i-1层的输出,令分别表示第i层的权重和偏置量,那么可以得出,可以简化为

      BP算法基于梯度下降策略,以目标函数的负梯度方向对参数进行调整,若给定学习率,则更新公式为:

      △w

      △w

      如果要更新上图中第二层的权重,根据链式求导法则,更新梯度信息:

      △

      很容易看出

      其中,若此部分大于1,则层数增多,经过累乘,最终的梯度更新将以指数形式增加,即发生梯度爆炸;如果此部分小于1,则随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生梯度消失。

      在深层网络中,不同层学习的速度差异很大,通常输出层及靠近输出层的隐层的权重更新速度较快,学习较好。靠近输入层的隐层学习较慢,有时甚至训练了很久,前几层的权值和刚开始的随机初始值差不多。若发生梯度消失,则前面几层的权重在学习过程中几乎未发生变化,即学习效果很差。

      由此可见,梯度消失和爆炸的根本原因之一在于反向传播训练法则,属于天生不足。


激活函数的影响

      激活函数选择不合适,如使用sigmoid函数,梯度消失就会非常明显。中导数部分的值小于1,经过累乘会变得非常小。

      常见的sigmoid函数为对率函数,其函数图像及导数图像如下所示:

机器学习-梯度消失和梯度爆炸_第1张图片

      由图中可以看到sigmoid函数的导数最大不超过0.25。

      同理,其他激活函数也一样。

机器学习-梯度消失和梯度爆炸_第2张图片

解决方法

      1.预训练加微调

      基本思想是每次训练一个隐层,训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,此过程就是逐层预训练。在训练完成后,再对整个网络进行微调,如利用BP算法对整个网络进行再训练。此思想可以理解为:先局部寻优,再整合起来全局寻优。

      2.选择合适的激活函数

      如选择Relu、Leaky Relu、ELU等激活函数。其思想非常简单,如果激活函数的导数为1,那么就不存在梯度消失和爆炸的问题了。

      3.选择更好的结构

      如选择LSTM和GRU。

你可能感兴趣的:(机器学习,人工智能,深度学习)