详解深度神经网络中常见的梯度消失和梯度爆炸及其具体的解决方案

梯度不稳定问题

在层数比较多的神经网络模型的训练过程中会出现梯度不稳定的问题。具体来说就是神经网络前面的层可能会出现梯度消失或者梯度爆炸的情况。梯度消失问题和梯度爆炸问题一般会随着神经网络层数的增加变得越来越明显。

损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。因为神经网络的反向传播算法是从输出层到输入层的逐层向前进行链式求导,前面层上的梯度是来自于后面层上梯度的乘积,当存在神经网络层数过多时,就有可能出现了梯度不稳定场景。详解深度神经网络中常见的梯度消失和梯度爆炸及其具体的解决方案_第1张图片

梯度消失

在神经网络反向传播中,当梯度从后往前传时,梯度不断减小,最后变为零,此时,浅层的神经网络权重得不到更新,那么前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做梯度消失。

梯度消失导致后层的权重更新的快,靠近输出层的权值更新相对正常,而前层网络由于梯度传递不过去而得不到更新。靠近输入层的权值更新会变得很慢,导致靠近输入层的隐藏层权值几乎不变,接近于初始化的权值。这样在网络很深的时候,学习的速度很慢或者无法学习。

梯度消失导致神经网络的hidden layer 1 相当于只是一个映射层,对所有的输入做了一个函数映射,这时此深度神经网络的学习就等价于只有后几层的隐藏层网络在学习,就发挥不到深层神经网络的效果了。

详解深度神经网络中常见的梯度消失和梯度爆炸及其具体的解决方案_第2张图片

如上图所示,我们可以看出来神经网络中从输出层Hidden Layer 4到输入层Hidden Layer 1的训练速度依次减慢。

梯度爆炸

当权值过大,神经网络前面层比后面层梯度变化更快,会引起梯度爆炸问题。梯度爆炸就是由于初始化权值过大,w大到乘以激活函数的导数都大于1,因为前面层比后面层变化的更快,就会导致神经网络前面层的权值越来越大,梯度爆炸的现象就发生了。

梯度爆炸是一种与梯度消失相反的情况,当进行反向传播时,梯度从后往前传时,梯度不断增大,导致权重更新太大,以致于不断波动,使神经网络在最优点之间波动。

梯度消失和梯度爆炸的示例解析

详解深度神经网络中常见的梯度消失和梯度爆炸及其具体的解决方案_第3张图片

现在我们有一个如上所示的简化的神经网络,每个隐藏层都用一个神经元来代替,从输入层x经过隐藏层到输出层y的前向传播公式为:
在这里插入图片描述

现在我们对参数w1求梯度,根据链式求导法则,得到的解为:

详解深度神经网络中常见的梯度消失和梯度爆炸及其具体的解决方案_第4张图片

对w1求梯度就是从输出层到输入层的链式求导,如果我们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数(sigmoid激活函数),其连乘后,结果会变的很小,导致梯度消失。若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸。这就是梯度消失和梯度爆炸的直观体现。
详解深度神经网络中常见的梯度消失和梯度爆炸及其具体的解决方案_第5张图片

解决梯度消失和梯度爆炸地技巧

  1. 用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。

  2. 用Batch Normalization。

  3. LSTM的结构设计可以改善RNN中的梯度消失问题。

4.动态地改变学习率,当梯度过小时,增大学习率,当过大时,减小学习率。

5.神经网络的权重标准初始化

在这里插入图片描述

当我们使用梯度下降算法和反向传播算法结合训练神经网络的模型的时候,这就意味着梯度消失和梯度爆炸是不可避免地,这就是反向传播法则链式求导的先天性不足,但我们明白其原理之后,可以通过以上的一些技巧减少它们对神经网络训练的消极影响。

你可能感兴趣的:(神经网络,深度学习,人工智能,机器学习,算法)