您的位置:首页 > 理论基础 > 计算机网络

十三、神经网络梯度不稳定问题(即梯度消失 & 梯度爆炸问题)

2017-09-29 21:46 645 查看
  本博客主要内容为图书《神经网络与深度学习》和National Taiwan University (NTU)林轩田老师的《Machine Learning》的学习笔记,因此在全文中对它们多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。

  欢迎大家在评论区多多留言互动~~~~

1 . 梯度不稳定的浅层分析

  众所周知,使用深层次的神经网络往往会获得比浅层次神经网络更为优秀的效果。但是深度神经网络的训练也是是跟令人头疼的,因为一个深度神经网络train不好的话很有可能在效果上与只含有一个隐层的神经网络的效果相差甚远。在这里我们就要分析一下神经网络难以训练的原因。

  造成这种现象的和主要原因在于在深度网络中,不同的层学习的速度差异很大。尤其是,在网络中后面的层学习的情况很好的时候,先前的层次常常会在训练时停滞不变,基本上学不到东西,这种停滞称为梯度消失问题(vanishing gradient problem)。这种停滞并不是因为运气不好。而是,有着更加根本的原因使学习的速度下降了,这些原因和基于梯度的学习技术相关。

  在前面的层中的梯度会变得非常大,这也叫做梯度爆炸问题 ( exploding gradient problem),这也没比梯度消失问题更好处理。更加一般地说,在深度神经网络中的梯度是不稳定的,在前面的层中或会消失,或会激增。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。

2 . 梯度不稳定的原理性分析

  假设在神经网络中使用的是 sigmoid 神经元,我们可以得到 sigmoid 导数的函数图像如下所示



图1. sigmoid函数导数的图像

   在上面这个图像中,横坐标是 sigmoid 函数的输入,即权值输入 z ,而纵坐标是激活函数的输出值的导数,我们可以看到,该导数 σ′(0)=0.25,当权值输入 z 的值越大的时候, Sigmoid 函数导数的值就越接近于0。

  首先考虑还没有开始训练的初始状态,如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为 0 标准差为 1 的高斯分布。因此所有的权重通常会满足|wj|<1,有了这些信息们发现会有 wjσ′(zj)<14。从反向传播计算导数䣌过程入手进行分析,我们比较一下 ∂C/∂b1 和一个更后面一些的偏置的梯度 ∂C/∂b3 。当然,我们还没有显式地给出这个表达式,但是计算的方式是一样的。



图2. 梯度的复合求导

可以看到在我们进行了所有这些项的乘积时,最终结果肯定会指数级下降:项越多,乘积的下降的越快。这里我们敏锐地嗅到了梯度消失问题的合理解释。

  为了避免梯度消失问题,我们需要 wjσ′(zj)≥1 。你可能会认为如果 w 很大的时候很容易达成。但是这比看起来还是困难很多。原因在于 σ′(zj) 项同样依赖于 w,当 w 增加的时候会导致 z 的增加,进而导致 σ′(zj) 项的减小。所以我们在让 w 变大时,需要同时不让 σ′(zj) 项变小是很困难的。

  也距离说明一下题都爆炸的原因。当权值输入为0,但是参数 w 已经恨到的时候,这是根据梯度的计算公式就会发现梯度会变得很大。

  如果在某一个神经元出现了这样的情况,那么在复杂网络中根据反向传播中的四个基本等式这也是同样会出现的。

  综上,根本的问题其实并非是梯度消失问题或者激增的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景。唯一让所有层都接近相同的学习速度的方式是所有这些项的乘积都能得到一种平衡。如果没有某种机制或者更加本质的保证来达成平衡,那网络就很容易不稳定了。简而言之,真实的问题就是神经网络受限于不稳定梯度的问题。所以,如果我们使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。

  如本篇博客没有解决你的问题可在评论区留言,如果能帮上的一定会帮助;

  如果觉得解决了你的问题请顶一下 ~;

  也欢迎指导、提问、留言~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息