梯度消失和梯度爆炸

原创 2018年04月15日 13:02:02

● 每周一言

时间,是成长的必要代价。

导语

在机器学习模型训练的常见问题中,除了会遇到过拟合、欠拟合问题,还有一类问题也经常出现,那便是 梯度问题。梯度问题具体是什么?又有哪些应对之法?

梯度问题

梯度问题出现在深度神经网络的残差反向传播过程当中,原因是神经网络通过链式法则求解不同层的梯度,中间的连乘操作有可能导致残差计算的不稳定性,使得模型训练失效。梯度问题具体有两种表现形式:梯度消失梯度爆炸

fig1

梯度消失 又叫 梯度弥散。根据链式法则,如果每一层神经元的权重与上一层传递过来的残差之积都小于1,这样经过足够多层传递之后,残差值将趋近于0。

梯度消失示例:y1 = w1x1, x2 = f(y1), y2 = w2x2, x3 = f(y2), y3 = w3x3, …, xn = f(yn-1)。

其中x1是输入层的输入,x2、x3分别是中间两个隐层的输出,xn是输出层的输出。w1的梯度求解:σw1 = L’ * f’(y1) * f’(y2) * … * f’(yn-1) * w2 * … * wn-1 * x1。

fig2

上述示例可以看出,造成梯度消失的具体原因,要么是权重w偏小,要么就是x偏小。w偏小一般是参数初始化的问题,x偏小则是激活函数的问题。

比如常见的sigmoid激活函数,其导数f’(x) = f(x) * (1 - f(x))的最大值为0.25,连乘比较容易造成梯度消失。

同上述示例,梯度爆炸 的具体原因则是初始化权重w过大所致。例如,各层激活函数如果是sigmoid,那么造成梯度爆炸的必要条件是w的初始值至少大于4。

fig3

解决梯度问题主要有以下六种方法:

pre-training&fine-tunning 该方法由Hinton在2006年提出,采取先局部后整体的思想,pre-training先逐层训练每一个隐层的神经元,fine-tunning再通过BP对整个网络进行训练微调。

梯度剪切 顾名思义,在向前传递残差的时候,根据设定阈值进行残差截断。该手段主要用于防止梯度爆炸。

损失函数加入正则项 通过加入正则项,限制权重大小,具体正则项的讲解可参考 正则项:把控拟合方向的马车夫。该手段主要也是防止梯度爆炸。

fig4

使用线性组合的激活函数 如前文所述,sigmoid激活函数导数最大值为0.25,且越靠近边界导数值下降越明显,可替换成ReLU等线性组合的激活函数,这些函数既简单、导数值又是常数,能有效防止梯度消失。

Batch Normalization 这是G公司在ICML2015的论文中提出来的一种“批量规范化”的方案,简单而言就是通过对每一层的输出先进行规范化(减均值除方差),再进行激活传递至下一层。

加入残差网络 传统的BP网络都是残差逐层串行传递,而该网络支持残差跨层传递,直接避免了连乘带来的计算不稳定性。

以上便是梯度问题的讲解,敬请期待下节内容。

结语

感谢各位的耐心阅读,后续文章于每周日奉上,敬请期待。欢迎大家关注小斗公众号 对半独白

face

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cherrylvlei/article/details/79944928

自问自答2——深度学习中梯度消失/爆炸为什么是一个问题?(待完善)

我们知道SGD只是用来求解优化问题的一种方法:沿着负梯度方向找到损失最小值。所以SGD的核心就是计算梯度以得到参数更新。而在深层神经网络中,反向传播时很容易发生梯度消失或者梯度爆炸的问题。我们认为这两...
  • VictoriaW
  • VictoriaW
  • 2017-06-22 17:07:24
  • 1714

关于梯度消失,梯度爆炸的问题

随着神经网络层数的增加,会出现梯度消失或者梯度爆炸的问题,下面细说下问什么会出现:       起初的学习率固定。       下面来看几组通过增加隐藏层层数后的学习率...
  • qq_29133371
  • qq_29133371
  • 2016-07-09 20:31:35
  • 31831

深度学习:梯度消失和梯度爆炸

梯度消失主要是因为网络层数太多,太深,导致梯度无法传播。本质应该是激活函数的饱和性。[神经网络中的激活函数 ]DNN结果出现nan值?梯度爆炸,导致结果不收敛。都是梯度太大惹的祸,所以可...
  • pipisorry
  • pipisorry
  • 2017-05-13 19:32:36
  • 970

详解机器学习中的梯度消失、爆炸原因及其解决方法

前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆炸的原因,第三部分对...
  • qq_25737169
  • qq_25737169
  • 2017-12-20 14:25:45
  • 7432

如何避免梯度爆炸梯度消失

以sigmoid函数为例子,sigmoid函数使得输出在[0,1]之间。 事实上x到了一定大小,经过sigmoid函数的输出范围就很小了,参考下图 如果输入很大,其对应的斜率就很小,我们知道,其斜...
  • u011204487
  • u011204487
  • 2017-07-30 15:31:49
  • 596

训练深度网络的梯度弥散及梯度膨胀问题

在深度网络中,不同层的学习速度差异很大。尤其是在网络后面层学习的情况很好的时候,先前的层常常会在训练时停止不变,基本上学不到东西,这些原因是与基于梯度的学习方法有关。 我们用MNIST数字分类问题作...
  • NeuFace
  • NeuFace
  • 2015-12-27 12:32:40
  • 7804

机器学习总结(二):梯度消失和梯度爆炸

神经网络的训练过程通常分为两个阶段:前向传播和反向传播。 前向传播如下图所示,原理比较简单 上一层的神经元与本层的神经元有连接,那么本层的神经元的激活等于上一层神经元对应的权值进行加权和运算,...
  • weixin_37933986
  • weixin_37933986
  • 2017-04-05 14:39:28
  • 7875

深度学习入门系列博客(严重推荐)--如何训练 梯度消失 梯度爆炸等解释的明确

http://neuralnetworksanddeeplearning.com/chap5.html http://neuralnetworksanddeeplearning.com/ch...
  • u012746763
  • u012746763
  • 2017-02-14 16:14:50
  • 1194

梯度消失(vanishing gradient)和梯度爆炸(exploding gradient)

神经网络中梯度不稳定的根本原因:在于前层上的梯度的计算来自于后层上梯度的乘积(链式法则)。当层数很多时,就容易出现不稳定。下边3个隐含层为例: 其b1的梯度为: 加入激活函数为sigmoid,...
  • guoyunfei20
  • guoyunfei20
  • 2017-10-19 11:47:28
  • 106
收藏助手
不良信息举报
您举报文章:梯度消失和梯度爆炸
举报原因:
原因补充:

(最多只允许输入30个字)