梯度消失和梯度爆炸和梯度弥漫以及每个的解决方法

梯度消失的原因

  1. 深层网络
  2. 不合适的损失函数

梯度爆炸的原因

  1. 权值初始值过大

梯度消失和爆炸的原因: 在梯度更新的过程中,会进行反向求导。当前层的导数与学习率相乘。

而当部分导数的值大于1时,随着层数的增多,那么求出的梯度将会以指数形式增加,这就是梯度爆炸    比如5的30次方

而当部分导数的值小于1时,随着层数的增多,那么求出的梯度将会以指数形式衰减,这就是梯度更新   比如0.2的30次方

解决方法

梯度剪切  :

1:针对梯度爆炸而设定,设置一个阈值,当更新梯度时,梯度超过阈值,就修改为其值设定为阈值的值,这样可以预防梯度爆炸。

2:权重正规化&权重衰减: 为损失函数加上权重的平方范数(L2范数   L1等等),这样可以抑制权重变大  ,或者使用Relu。

Pytorch中设置weight_decay的值就可以实现权值衰减

Pytorch中实现梯度裁剪

梯度弥散

梯度下降法(以及相关的L-BFGS算法等)在使用随机初始化权重的深度网络上效果不好的技术原因是:梯度会变得非常小。具体而言,当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的梯度(从输出层到网络的最初几层)的幅度值会急剧地减小。结果就造成了整体的损失函数相对于最初几层的权重的导数非常小。这样,当使用梯度下降法的时候,最初几层的权重变化非常缓慢,以至于它们不能够从样本中进行有效的学

习。这种问题通常被称为“梯度的弥散”.

  • 梯度弥散:
    • 采用BN算法batchnormalization
    • 改变激活函数

BN算法好处

1:可以增加训练速度,防止过拟合:如果没有归一化,每一层训练后的数据分布都不同,网络需要更大的开销去学习新的分布,造成网络模型更加复杂,因此容易发生过拟合,网络收敛也比较慢。

2:可以避免激活函数进入非线性饱和区,从而造成梯度弥散问题

3:由于因为BN具有提高网络泛化能力的特性,可以减少了你可以移除dropout比例和正则化参数,这样减少繁琐的调参。

4:可以省LRN局部归一化层。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值