梯度消失与梯度爆炸

假设一个5层神经网络:输入层、3层隐藏层、输出层,其中每层只有一个神经元。

对于第i层,输出为zi=σ(yi)=σ(wixi+bi),其中xi=zi1;设损失函数为L,那么在反向传播更新参数时,比如b1,其梯度为:Lb1=Lz4z4y4y4z3z3y3y3z2z2y2y2z1z1y1y1b1=Lz4σ(z4)w4σ(z3)w3σ(z2)w2σ(z1)

在深度学习的深层网络中:
如果权重值比较大,多次连乘会导致梯度指数增加,引起梯度爆炸的问题。
如果权重值比较小,多次连乘会导致梯度指数衰减,引起梯度消失的问题。

此外,如果是sigmoid激活函数,其导数的最大值为0.25,很容易引起梯度消失的问题。

解决梯度爆炸/消失的方法:

  • 使用残差网络结构:即大名鼎鼎的resnet。
  • 选择合适的激活函数以及权重初始值:如使用relu激活函数可以缓解梯度消失(因为其导数值恒为1)。
  • batch normalization:对批样本的同一维度特征做归一化。
  • 梯度剪切:当梯度大于某个阈值时,令其等于这个阈值,从而缓解梯度爆炸。
  • 权重正则化:如L1、L2正则化防止梯度爆炸。L1正则化会使原最优解的元素产生不同量的偏移,并使某些元素为0,从而产生稀疏性;L2正则化的效果是对原最优解的每个元素进行不同比例的放缩。
posted @   MyAJY  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示