梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法

一、引入:梯度更新规则

目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,更新优化深度网络的权值。这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 f(x),因此整个深度网络可以视为是一个复合的非线性多元函数:

6549a31b80d7183f03af2515b736b9b9.png

我们最终的目的是希望这个多元函数可以很好的完成输入到输出之间的映射。


二、梯度消失、爆炸的原因

下图以三个隐层的单神经元网络为例:

梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第1张图片


假设每一层网络激活后的输出为

,其中 i 为第 i 层,x 代表第 i 层的输入,也就是第 i−1 层的输出,f 是激活函数,那么,可得出
,暂时忽略常数 b,简记为
。BP算法基于梯度下降策略如下:

梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第2张图片

由上图可知,上式主要由两部分构成:多个激活函数偏导数的连乘,和多个权重参数的连乘。如果激活函数求导后与权重相乘的积大于1,那么随着层数增多,求出的梯度更新信息将以指数形式增加,即发生梯度爆炸;如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生梯度消失

【注意】具体激活函数的导数情况可自行验证,比如sigmoid,tanh,Relu,leaky-Relu等。


三、解决方法

在讨论解决方法之前,我们探讨一下其解决思想,其实就是抑制上述式子连乘后结果远远大于1或小于1,主要取决于激活函数偏导数和权值大小

3.1 预训练加微调

此方法来自Hinton在2006年发表的一篇论文,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training),得到暂时的最优权重值;在预训练完成后,再利用BP算法对整个网络进行训练,对整个网络进行“微调”(fine-tunning)。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用不是很多。

3.2 梯度剪切、正则

梯度剪切主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,更新梯度时,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内,防止梯度爆炸。另一种解决梯度爆炸的手段是权重正则化(weithts regularization),常见的是

正则,和
正则。

3.3 合理的激活函数+权值初始化

Relu激活函数:思想是,如果激活函数的导数为1,那么就消除了激活函数偏导数的影响,只需考虑权值即可。

梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第3张图片

3.4 Batch Normalization

Batch norm已被广泛应用到各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题,它是将输出信号 x 规范化,以保证网络的稳定性。

梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第4张图片

As the data flows through a deep network, the weights and parameters adjust those values, sometimes making the data too big or too small again - a problem the authors refer to as "internal covariate shift". By normalizing the data in each mini-batch, this problem is largely avoided.”Internal Covariate Shift:此术语是google小组在论文 Batch Normalization 中提出来的,其主要描述的是:训练深度网络的时候经常发生训练困难的问题,如上图所示,每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难,此现象称之为Internal Covariate Shift。

为了解决这个问题,Batch Norm就派上用场了,它应用于每层激活函数之前,就是做均值和方差归一化,对于每一批次数据并且还做放大缩小,平移,为了梯度下降的收敛速度更快,相当于把数据都拉到中间的位置了,有这个就不需要Dropout,Relu等等。BN使得每层输出信号满足均值为0,方差为1的分布,而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入,从而保证整个网络的稳定性。简而言之,BN包括两点:归一化+缩放平移,具体伪代码如下:

梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第5张图片

为了说明BN如何防止梯度消失,梯度爆炸,进而加快训练速度,举例如下:

1、带有BN的前向传播过程如下所示(其中

为列向量,
):

2、则其反向传播有:

3、相应的,连续多层的梯度反向传播过程为:

可以看出,与不使用BN相比,每层的反向传播过程的,增加了一个基于标准差的矩阵

对权重
进行缩放,这样的缩放能够产生什么效果?如果权重
较小,那必然
较小,从而使得其标准差
较小,相对的
较大,所以
相对于原本的
就放大了,避免了梯度的衰减;同样的,如果权重
较大,可以很容易得到
相对于原本的
缩小了,避免了梯度的膨胀。于是,加入了BN的反向传播过程中,就不易出现梯度消失或梯度爆炸,梯度将始终保持在一个合理的范围内。而这样带来的好处就是,基于梯度的训练过程可以更加有效的进行,即加快收敛速度,减轻梯度消失或爆炸导致的无法训练的问题。

最后直观感受一下有无BN的训练过程:

梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第6张图片

3.5 残差网络结构

3.5.1 残差块

残差网络是由一系列残差块组成的。一个残差块可以用表示为:

残差块分成两部分:直接映射部分和残差部分。

是直接映射,即下图左边灰色部分;
是残差部分,一般由两个或者三个卷积操作构成,即下图右侧包含卷积的部分。

梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第7张图片
残差块
  • Weight:在卷积网络中指卷积操作,
  • addition:单位加操作

3.5.2 残差网络的背后原理

残差块一个更通用的表示方式是

是直接映射,
是激活函数,一般使用ReLU。我们首先给出两个假设:
  • 假设1:
    是直接映射;
  • 假设2:
    是直接映射。

这时候残差块表示为:

对于一个更深的层

,其与
层的关系可以表示为

【ResNet 解决问题1:网络随着深度的增加,而出现的“degradation problem”】

随着网络层数的增加,网络发生了退化(degradation)的现象:随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当再增加网络深度,训练集loss反而会增大。注意这并不是过拟合,因为在过拟合中训练loss是一直减小的。

公式(5)反应了残差网络的两个属性:

  • 层 = 任意一个比它浅的
    层 + 他们之间的残差部分之和;
  • 保证
    层不少于浅层
    层的特征信息:在前向传输的过程中,随着层数的加深,Feature Map包含的图像信息会逐层减少,而ResNet直接映射的加入,保证了
    层网络信息一定不少于
    层的图像信息。

【ResNet 解决问题2:梯度消失的问题】

根据BP中使用的导数的链式法则,损失函数

关于
的梯度可以表示为

公式(7)反映了残差网络的两个属性:

  • 训练过程中,
    不可能一直为
    ,故解决了梯度消失的问题。
  • 表示
    层的梯度可以直接传递到任何一个比它浅的
    层,不经过中间层的权重矩阵。

通过分析残差网络的正向和反向两个过程,我们发现,当残差块满足上面两个假设时,信息可以非常畅通的在高层和低层之间相互传导。


【参考】

[1]

如何解决梯度消失和梯度爆炸?_黄飞的博客专栏-CSDN博客_梯度消失​blog.csdn.net
梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第8张图片

[2]

详解机器学习中的梯度消失、爆炸原因及其解决方法_Double_V的博客-CSDN博客_梯度爆炸的解决方法​blog.csdn.net
梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第9张图片

[3]

基础 | batchnorm原理及代码详解​blog.csdn.net
梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第10张图片

[4]

深度学习中 Batch Normalization为什么效果好?​www.zhihu.com

[5]

深入浅出--搞懂卷积神经网络的过拟合、梯度弥散、batchsize的影响的问题(二)_深度学习思考者-CSDN博客_卷积网络batchsize​blog.csdn.net
梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第11张图片

[6]

https://www.quora.com/Why-does-batch-normalization-help​www.quora.com

[7]

基础 | batchnorm原理及代码详解​blog.csdn.net
梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第12张图片

[8]

小小将:你必须要知道CNN模型:ResNet​zhuanlan.zhihu.com
梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法_第13张图片

[9]

大师兄:详解残差网络​zhuanlan.zhihu.com

[10]

https://openaccess.thecvf.com/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf​openaccess.thecvf.com

你可能感兴趣的:(梯度消失和梯度爆炸)