梯度消失/爆炸原因及解决办法

编程入门 行业动态 更新时间:2024-10-26 15:25:18

<a href=https://www.elefans.com/category/jswz/34/1767879.html style=梯度消失/爆炸原因及解决办法"/>

梯度消失/爆炸原因及解决办法

梯度消失/爆炸原因:
浅层的梯度计算需要后面各层的权重及激活函数导数的乘积,因此可能出现前层比后层的学习率小(vanishing gradient)或大(exploding)的问题,所以具有不稳定性.那么如何解决呢?
需要考虑几个方面:

1.权重初始化
使用合适的方式初始化权重, 如ReLU使用MSRA的初始化方式, tanh使用xavier初始化方式,或者加载预训练权重进行训练。

2.激活函数选择
激活函数要选择ReLU等梯度累乘稳定的.由于梯度的公式包含每层激励的导数以及权重的乘积,因此让中间层的乘积约等于1即可.但是sigmoid这种函数的导数值又与权重有关系(最大值1/4,两边对称下降),所以含有sigmoid的神经网络不容易解决,输出层的activation大部分饱和,因此不建议使用sigmoid.ReLU在自变量大于0时导数为1,小于0时导数为0,因此可以解决上述问题.

3.学习率
一种训练优化方式是对输入做白化操作(包括正规化和去相关), 目的是可以选择更大的学习率. 现代深度学习网络中常使用Batch Normalization(包括正规化步骤,但不含去相关). (All you need is a good init. If you can’t find the good init, use Batch Normalization.)

总结:由于sigmoid,ReLU等函数的梯度都在[0,1]以内,所以不会引发梯度爆炸问题。 而梯度爆炸需要采用梯度裁剪、BN、设置较小学习率等方式解决。

更多推荐

梯度消失/爆炸原因及解决办法

本文发布于:2023-07-28 16:02:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1243461.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:梯度   解决办法   原因

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!