<美团>深度学习训练中梯度消失的原因有哪些?有哪些解决方法?

梯度消失产生的主要原因有:一是使用了深层网络,二是采用了不合适的损失函数。

(1)目前优化神经网络的方法都是基于BP,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。其中将误差从末层往前传递的过程需要链式法则(Chain Rule)的帮助。而链式法则是一个连乘的形式,所以当层数越深的时候,梯度将以指数形式传播。梯度消失问题一般随着网络层数的增加会变得越来越明显。在根据损失函数计算的误差通过梯度反向传播的方式对深度网络权值进行更新时,得到的梯度值接近0,也就是梯度消失。

(2)计算权值更新信息的时候需要计算前层偏导信息,因此如果激活函数选择不合适,比如使用sigmoid,梯度消失就会很明显,原因如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。

 

解决方法:

(1)pre-training+fine-tunning

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

(2) 选择relu等梯度大部分落在常数上的激活函数

relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失的问题。

(3)batch normalization

BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,进而解决梯度消失的问题,或者可以理解为BN将输出从饱和区拉到了非饱和区。

(4) 残差网络的捷径(shortcut)

相比较于之前的网络结构,残差网络中有很多跨层连接结构(shortcut),这样的结构在反向传播时多了反向传播的路径,可以一定程度上解决梯度消失的问题。

(5)LSTM的“门(gate)”结构

LSTM全称是长短期记忆网络(long-short term memory networks),LSTM的结构设计可以改善RNN中的梯度消失的问题。主要原因在于LSTM内部复杂的“门”(gates),LSTM通过它内部的“门”可以在更新的时候“记住”前几次训练的”残留记忆“。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
梯度计算、梯度爆炸和梯度离散消失是神经网络训练常见的问题,其原因解决方法如下: 1. 梯度计算问题:梯度计算问题通常发生在深度神经网络,由于网络层数的增加,导致梯度计算时出现了数值不稳定的情况,例如浮点数溢出等。这会影响梯度的准确性,从而导致模型训练不稳定。 解决方法:可以采用梯度截断(Gradient Clipping)的方法,对梯度进行限制,防止梯度过大。同时,可以使用更稳定的优化器,例如Adam等。 2. 梯度爆炸问题:梯度爆炸问题通常发生在深度神经网络,由于网络层数的增加,导致梯度计算时出现了数值爆炸的情况,例如浮点数溢出等。这会导致梯度更新过大,从而导致模型训练不稳定。 解决方法:可以采用梯度截断(Gradient Clipping)的方法,对梯度进行限制,防止梯度过大。同时,可以使用更稳定的优化器,例如Adam等。 3. 梯度离散消失问题:梯度离散消失问题通常发生在深度神经网络,由于网络层数的增加,导致梯度传递时出现了数值过小的情况。这会导致梯度传递过程信息的丢失,从而导致模型训练不稳定。 解决方法:可以采用梯度正则化(Gradient Regularization)的方法,对梯度进行加权,增加梯度传递的稳定性。同时,可以使用更深层次的网络结构,例如ResNet等,可以有效地解决梯度离散消失的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值