什么是梯度消失?为什么会存在梯度消失问题?

1,886 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

上一篇文章我介绍了为什么在BP神经网络中经常使用ReLU激活函数,有提到因为 sigmoid、tanh、softsign激活函数都具有一个梯度消失的弊端,所以不经常使用,那本文我就介绍下什么是梯度消失?为什么存在梯度消失?

BP网络模型

首先,你需要了解什么是BP神经网络,最简单的一个BP网络模型如下图所示,由输入层、隐藏层、输出层组成。

image.png

对于BP神经网络,我们之前也说过,它的基本思想就是:学习过程由信号的正向传播和误差的反向传播两个过程组成。

从上图BP网络模型中,我们可以看出,在正向传播时,BP网络将样本的特征从输入层进行输入,信号经过各个隐藏层逐层处理后,最后从输出层传出。然后再进行误差的反向传播,这部分图中不可见,它的计算过程是:计算网络的实际输出与期望输出之间的误差,然后将误差信号从最后一层逐层反传,从而获得各个层的误差学习信号,再根据误差学习信号来修正各个层神经元的权值,以此优化网络减小实际输出与期望输出之间的误差。而这个误差就是我们常说的损失函数(代价函数);修正权值优化网络的过程,我们也可以称之为损失函数最小化的过程;将误差逐层反转以此来修正权重w的过程,我们可以称之为梯度下降法

梯度

在了解梯度下降法之前,我先来说一下什么是梯度。

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

梯度定义如下:

image.png

对于 f(x0,...,xi,...,xn)f(x_0,...,x_i,...,x_n) 上的某一点来说存在很多个 方向导数,梯度的方向是函数 f(x0,...,xi,...xn)f(x_0,...,x_i,...x_n)某一点上增长最快的方向,梯度的模则是该点上 方向导数 的最大值 ,梯度的模等于

image.png

注意:

  • 梯度是一个向量,即有方向有大小;
  • 梯度的方向是最大 方向导数 的方向;
  • 梯度的值是最大 方向导数 的值

方向导数定义如下:
导数和偏导数,都是沿坐标轴正方向讨论函数的变化率。那么当我们讨论函数沿任意方向的变化率时,也就引出了方向导数的定义,即:某一点在某一趋近方向上的导数值。

换言之就是,我们不仅要知道函数在坐标轴正方向上的变化率(即偏导数),而且还要设法求得函数在其他特定方向上的变化率,而方向导数就是函数在其他特定方向上的变化率。

梯度下降法

梯度下降法定义:
在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化代价函数的时候,就可以沿着负梯度方向去减小代价函数的值。

代价函数的值越小,说明模型的预测值越接近真实标签的值,模型训练的越好。而代价函数中的预测值 y 是跟神经网络中的参数 w 和 b 相关的,所以我们使用 梯度下降法 来不断优化w和b的值。那么下面我通过一个例子具体讲解梯度下降法是怎么不断优化网络的。

这里我先假设一个简单的情况,假设神经网络中只有一个参数w,并且 w 初始值是 -3 ,我们使用梯度下降法来优化 w 的取值,以使得loss值不断减小,那么 参数w和代价函数loss的关系,并且 w=-3 时的梯度 如下图所示。

image.png

从图中,我们可以看出,当 w 为 -3 时,w 所处位置的梯度是一个负数,但是梯度下降法在优化代价函数的时候,是沿着负梯度方向的去减小代价函数的值,所以负梯度是一个正数,那么 w 的值会变大。梯度下降法的优化公式如下:

𝑤 = 𝑤 − 𝜂(𝜕𝑓/𝜕𝑤)

其中,学习率 𝜂 一般是一个 大于0 的数,𝜕𝑓/𝜕𝑤 为负数,那么就可以判断出 w 的值会变大。变大的数值 跟学习率大小𝜂有关,也跟 函数f 在 w 处的梯度大小有关。

假设 w 变大移动到了 w=2 的位置,我们需要再次计算 w=2 时的梯度,如下图所示

image.png

当 w=2 时,w 所处位置的梯度是一个正数,所以负梯度是一个负数,那么w的值会变小,从上面公式也可以推断,这里不再过多赘述。我们还可以发现此时loss值会比上一次的loss值小。

通过这个例子,我们可以发现不管 w 处于什么位置,当 w 向着负梯度的方向进行移动时,实际上就是向着可以使loss 值减小的方向进行移动。这就有点类似于一个小球在山坡上面,它总是往坡底的方向进行移动,只不过它每一次是移动一步,这个步子的大小会受到学习率和所处位置梯度的大小所影响。

梯度消失

首先我先给出梯度消失的定义:

在梯度下降法中, 随着算法反向的反馈, 梯度会越来越小,最终归零没有变化,但此时并没有收敛到比较好的解,这就是梯度消失的问题。

下面我们通过权值调整的公式具体体会一下上面这句话的意思,权值调整公式如下:

image.png

其中,ΔWhΔW^h 表示第h层权值矩阵w的变化,𝜂表示学习率,𝜹_h 表示第h层的学习信号,它的改变会引起权值矩阵的改变。

1)输出层的学习信号公式为:

image.png

其中,T 表示数据的标签值(已知的),image.png表示模型的预测值(正向传播计算得到),image.png 表示激活函数的导数,image.png表示输出层信号的汇总;

2)除了输出层外,剩下的网络层的学习信号的公式都为:

image.png

可以看出,第 h 层的学习信号image.png,跟它下一层 h+1层的学习信号image.png、权值矩阵的转置 image.png以及 image.png相关。

那么我们就可有以下结论,激活函数的导数会影响学习信号𝛿 的值(由学习信号公式得出),而学习信号𝛿 的值会影响权值调整Δ𝑊 的值(由权值调整公式得出)。所以如果激活函数的值越大,Δ𝑊的值就越大;如果激活函数的值越小,Δ𝑊的值就越小。

现在我们再来看下之前讲解过的三种 S型激活函数 的导数以及其图像。
(1)sigmoid函数的导数公式:

image.png

导数图像为:

image.png

(2)tanh函数的导数公式:

image.png

导数图像为:

image.png

(3)softsign 函数的导数公式:

image.png

导数图像为:

image.png

总结:
基于这三个 S型激活函数的导数图像,我们可以发现,当 x 取值较大或较小时,这三种激活函数的导数很快就趋向于0,那么这就会使得学习信号接近于0,从而使得权值 Δ𝑊调整 接近于0。Δ𝑊接近于0 那就意味着该层的参数不会发生改变,不能进行优化。参数不能优化,那整个网络就不能再进行学习了,这也就造成了梯度消失(Vanishing Gradient)问题。