梯度爆炸与梯度消失及其解决方法

在学习了解了深度学习中梯度消失和梯度爆炸的问题以及一些解决方法后想通过写一篇文章作为总结巩固。
梯度消失、爆炸的原因:
梯度消失和梯度爆炸可以看作是由于某种原因使得在优化过程中梯度变化到一个极端的值(很大的值或者很小的值),有两种比较常见的情况会出现该现象:一是网络结构深,二是采用的损失函数不够合理(比如sigmoid),梯度爆炸一般是出现在深层的网络结构中或者权值的初始值过大的情况下。下面分别讨论两使梯度出现极端值的原因。
1、深层网络角度:
如下所示是一个较为简单的深层网络:
在这里插入图片描述图中是一个四层的全连接网络,假设每一次网络层在经过激活函数后得到的输出为fi(x),其中i表示第i层,x表示第i层的输入,即为上一层的输出,f表示激活函数,所以按照梯度下降的策略,以目标的负梯度方向对参数进行调整是,参数的更新方式应为:w←w+Δw,在给定了学习率时Δw的值表示如下
在这里插入图片描述
所以,如果要更新第二隐藏层的权值信息,根据链式求导法则:
在这里插入图片描述
所以每一层求梯度都需要对激活函数进行一起求导,那么如果层数很多时,最终求得的梯度更新将会以指数的形式变化,如果激活函数的导数是大于1的则随着层数增多会以指数的形式增加(即发生梯度爆炸),如果激活函数的导数是小于1的则相反。

所以可以发现一个现象,不同层学习的速度差异很大,(一般选择的激活函数的导数是大于1),再网络结构中,靠近输出层的学习情况较好而在靠近输入层的学习则很慢。
2、激活函数的角度考虑:
在考虑第一个原因的过程中提到过权值在更新时需要计算前一层偏导信息,如果选择的激活函数不合适(比如选择的激活函数是sigmoid),梯度消失就会很明显了,具体原因如下图所示:
在这里插入图片描述
在这里插入图片描述
上图分别为sigmoid的损失函数图,右边是其导数的图像,所以很明显,如果使用sigmoid作为损失函数其梯度不大于0.25,这样在链式求导过程中每次就会乘一个比1小得多的系数则很容易导致梯度消失。
在这里插入图片描述
同样,当使用tanh作为激活函数时,其函数图像和导数图像如下所示:
在这里插入图片描述在这里插入图片描述
由图像可以看出,tanh作为激活函数时其效果要比sigmoid好,但是其导数值仍是小于1的。
解决梯度消失、梯度爆炸的方法:
一、预训练加微调
每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。Hinton在训练深度信念网络(Deep Belief Networks中,使用了这个方法,在各层预训练完成后,再利用BP算法对整个网络进行训练。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。
二、梯度剪切、正则:
梯度剪切的思想是设置一个梯度剪切阈值,当更新梯度的过程中,如果梯度超过了这个阈值就强行将其控制在这个范围之内,这主要是为了防止梯度爆炸。第二种是正则化,正则化是为了防止过拟合,主要操作是惩罚参数。
三:选择合适的激活函数,如:relu、leakrelu、elu等
其函数以及图像如下所示:
在这里插入图片描述
在这里插入图片描述
由上图可以看出,relu函数的导数在正数部分恒等于1,因此能够解决梯度消失和梯度爆炸,其优点还有计算方便和加速网络训练。
但该激活函数也同时有缺陷,由于负数部分恒等于0,会导致有一部分神经元无法激活(可通过设置小学习率部分解决)、输出不是以0为中心。
leakrelu:
在这里插入图片描述
leakrelu解决了0区间带来的影响而且还保留了relu的优点。
elu:
在这里插入图片描述
elu也能够解决relu的0区间带来的影响
在这里插入图片描述
但是elu相对与leakrelu来说则计算要耗时间多一些。
四、batchnorm
Batchnorm是深度学习发展以来提出的最重要的成果之一了,目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。具体来说就是反向传播中,经过每一层的梯度会乘以该层的权重,进而解决梯度消失和爆炸的问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值