跳转至

梯度消失与梯度爆炸

首先让我们先来了解一个概念:什么是梯度不稳定呢?

概念:在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。

产生梯度不稳定的根本原因:前面层上的梯度是来自后面层上梯度的乘积。当存在过多的层时,就会出现梯度不稳定场景,比如梯度消失和梯度爆炸。

注意::梯度消失和梯度爆炸属于梯度不稳定的范畴。

概念

  • 梯度消失:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度消失。

  • 梯度爆炸:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度爆炸。

其实梯度消失和梯度爆炸是一回事,只是表现的形式,以及产生的原因不一样。

产生原因

  • 梯度消失:(1)隐藏层的层数过多;(2)采用了不合适的激活函数(更容易产生梯度消失,但是也有可能产生梯度爆炸)

  • 梯度爆炸:(1)隐藏层的层数过多;(2)权重的初始化值过大

以下将从这3个角度解释产生这两种现象的根本原因:

1.隐藏层的层数过多

总结:从深层网络角度来讲,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。具体见下图:

txtz1.png
txtz2.png

2.激活函数

tztx3.png

3.初始化权重的值过大

txtz4.png

解决方案

梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决:

1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等激活函数替代sigmoid激活函数;

2)加入Batch Normalization(BN)层;

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