梯度爆炸与梯度消失是什么?有什么影响?如何解决?

12 篇文章 1 订阅


梯度消失与梯度爆炸其实差不多,两种情况下梯度消失经常出现,一是在深层网络中,二是采用了不合适的损失函数。那么如何解决这种情况呢?

一、梯度爆炸

1.什么是梯度爆炸?

误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。 在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。 网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。 梯度爆炸引发的问题 在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。
……梯度爆炸导致学习过程不稳定。
——《深度学习》,2016.

2.有何影响?

没找到可信度高的资料,但在我自己学习的过程中,我遇到的问题是局部跳跃?

二、梯度消失

1.定义

没找到中文定义,出去扒了一个。

Same as exploding gradient, vanishing gradient is largely caused by Wt−k. If |W|<1, then |Wt−k| would quickly shrink to 0, especially with sigmoid nonlinearity. The gradient will become 0 for previous long-distance steps, which makes RNN hard to learn long-range dependencies.Vanishing gradient is more problematic than exploding gradient, because it is a general problem not only to RNN, but also to any deep neural network with many layers.

和爆炸梯度一样,消失梯度很大程度上是由Wt - k引起的。如果|W|<1,则|Wt−k|会迅速缩小到0,特别是在s型非线性的情况下。对于之前的长距离步骤,梯度将变为0,这使得RNN很难学习长距离依赖关系。消失梯度比爆炸梯度问题更大,因为它不仅是RNN的普遍问题,而且是任何多层深度神经网络的普遍问题。

wiki定义

In machine learning, the vanishing gradient problem is a difficulty found in training artificial neural networks with gradient-based learning methods and backpropagation. In such methods, each of the neural network’s weights receive an update proportional to the partial derivative of the error function with respect to the current weight in each iteration of training. The problem is that in some cases, the gradient will be vanishingly small, effectively preventing the weight from changing its value. In the worst case, this may completely stop the neural network from further training. As one example of the problem cause, traditional activation functions such as the hyperbolic tangent function have gradients in the range (0, 1), and backpropagation computes gradients by the chain rule. This has the effect of multiplying n of these small numbers to compute gradients of the “front” layers in an n-layer network, meaning that the gradient (error signal) decreases exponentially with n while the front layers train very slowly.

说人话:某些情况下梯度趋近于0导致无法更新。

在某些情况下,梯度会变得非常小,有效地阻止了权重值的变化。在最坏的情况下,这可能会完全停止神经网络的进一步训练。例如,传统的激活函数(如双曲正切函数)具有范围(0,1)内的梯度,反向传播通过链式法则计算梯度。这样做的效果是,用这些小数字的n乘以n来计算n层网络中“前端”层的梯度,这意味着梯度(误差信号)随n呈指数递减,而前端层的训练非常缓慢。

2.有何影响?

如上所述,无法更新,更新停滞。

三、共同点

1.产生原因

采用了不合适的损失函数, 如果我们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,导致梯度消失。若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸。

2.解决办法

【此部分来自https://zhuanlan.zhihu.com/p/33006526?from_voters_page=true】

a. 方案1-预训练加微调

此方法来自Hinton在2006年发表的一篇论文,Hinton为了解决梯度的问题,提出采取无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。Hinton在训练深度信念网络(Deep Belief Networks中,使用了这个方法,在各层预训练完成后,再利用BP算法对整个网络进行训练。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。

b. 方案2-梯度剪切、正则化

梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。

注:在WGAN中也有梯度剪切限制操作,但是和这个是不一样的,WGAN限制梯度更新信息是为了保证lipchitz条件。

另外一种解决梯度爆炸的手段是采用权重正则化(weithts regularization)比较常见的是l1正则,和l2正则,在各个深度框架中都有相应的API可以使用正则化。

关于正则化,可以参考我转载这篇博文【超强知识,点击就送】:什么是机器学习正则化?https://blog.csdn.net/ftimes/article/details/105839043

c. 方案3-relu、leakrelu、elu等激活函数

  1. Relu:思想也很简单,如果激活函数的导数为1,那么就不存在梯度消失爆炸的问题了,每层的网络都可以得到相同的更新速度,relu就这样应运而生。先看一下relu的数学表达式:

在这里插入图片描述
从上图中,我们可以很容易看出,relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数可以缓解梯度消失和爆炸的问题。

relu的主要贡献在于:

  • 缓解了梯度消失、爆炸的问题
  • 计算方便,计算速度快
  • 加速了网络的训练

同时也存在一些缺点

  • 由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决)

  • 输出不是以0为中心的

2. leakrelu
leakrelu就是为了解决relu的0区间带来的影响,其数学表达为: [公式] 其中k是leak系数,一般选择0.1或者0.2,或者通过学习而来
在这里插入图片描述

解决方案4-batchnorm/批规范化

Batchnorm是深度学习发展以来提出的最重要的成果之一了,目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性。

解决方案5-残差结构

残差结构说起残差的话,不得不提这篇论文了:Deep Residual Learning for Image Recognition,关于这篇论文的解读,可以参考机器学习算法全栈工程师知乎专栏文章链接:https://zhuanlan.zhihu.com/p/31852747这里只简单介绍残差如何解决梯度的问题。

事实上,就是残差网络的出现导致了image net比赛的终结,自从残差提出后,几乎所有的深度网络都离不开残差的身影,相比较之前的几层,几十层的深度网络,在残差网络面前都不值一提,残差可以很轻松的构建几百层,一千多层的网络而不用担心梯度消失过快的问题,原因就在于残差的捷径(shortcut)部分,其中残差单元如下图所示:
在这里插入图片描述

解决方案6-LSTM

LSTM全称是长短期记忆网络(long-short term memory networks),是不那么容易发生梯度消失的,主要原因在于LSTM内部复杂的“门”(gates),如下图,LSTM通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“,因此,经常用于生成文本中。目前也有基于CNN的LSTM,感兴趣的可以尝试一下。

在这里插入图片描述

  • 39
    点赞
  • 211
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值