梯度消失/爆炸:原因,影响,解决方案,误区。

BP算法中的梯度值——梯度消失/爆炸的起因!

常规的前馈网络具有以下的单层形式: 

而对于某层权值的梯度计算,采用以下公式:

其中E代表损失值;O代表网络输出层;h代表隐藏层;w为根据梯度值更新的权重。

通过BP算法的观察发现,梯度的计算与以下几个因素有关(不理解这一点可以尝试将梯度的偏导计算展开):

  • 1. (y-y'):预测与真实值的偏差。
  • 2. 激活函数求导。
  • 3. W:权重值。
  • 4. 神经元(输入)的值。

根据梯度链式传递法则,可以发现,激活函数的求导值(2)和权重值(3)会以连乘的形式参与到该层权重的梯度计算中,而预测值与真实值的偏差(1)以及神经元的输入值(4)只是以常数的形式参与计算。

梯度消失/爆炸是什么?

梯度消失/爆炸是反向传播训练法则的先天性不足,本质是梯度反向传播中的连乘效应。

梯度消失/爆炸的产生原因在于神经网络的更新中,梯度的传递是采用连乘函数的形式。众所周知,指数级别的增长是爆炸式的,因此可能引起深层网络的浅层节点更新使用一个过小或者过大的梯度值,这种深度学习现象叫做梯度消失/爆炸。

怎么引起的?

梯度消失:采用不合适的激活函数(类似于Sigmoid激活函数,梯度值恒小于一);网络初始权重过小。

梯度爆炸:网络初始权重过大。

梯度消失/爆炸带来了什么影响?

梯度消失:接近输入层的权重更新缓慢,导致网络更多的依靠更深层的学习,而浅层网络难以学习到有用的知识。

梯度爆炸:接近输入层的权重更新太快,致使模型不稳定,更新过程中损失函数显著变化;且训练权重的值变得异常大。

梯度消失/爆炸解决方案。

适用于梯度爆炸/梯度消失:

  1. 更合理的初始化权重。如采用预训练获得一个更优的初始化权重。
  2. 使浅层网络Layer跨层连接到更深层的Layer——Shortcut连接(残差网络)。需要注意的是,残差网络的引入主要是为了解决网络退化问题,其次才是梯度消失/爆炸问题。
  3. BatchNorm具有缓解梯度消失/爆炸的功能,BatchNorm的主要思想可以浓缩为缩放与平移,其中缩放操作会使反向传播的梯度值更加平稳。

单独适用于梯度爆炸:

  1. 通过权重(L1/L2)正则化,限制权重的大小。
  2. 梯度裁剪:将梯度限制在阈值以下。

单独适用于梯度消失:选择更优的激活函数(如Relu等),控制因为激活函数引起的梯度消失现象。

梯度消失与梯度爆炸一些小误区。

  • Error:使用Sigmiod激活函数会出现梯度消失,使用Relu等不会。
  • A:梯度值同样受到权重的影响,所以这种说法是不成立的。而Sigmiod激活梯度值恒小于0.25,这种性质使得深层网络中如果使用Sigmoid作为每层的激活函数,该网络极大概率会出现梯度消失现象,但需要说明,由于梯度值是收到两个因素的指数级影响的,所以极大概率≠一定。

  • Error:梯度消失/爆炸会受到当前神经元输入的影响。
  • A:梯度值会受到当前神经元的影响,但这种常数级别的影响基本不会是导致梯度消失/爆炸的根本原因。

  • Error:梯度消失/爆炸在深层网络中是一定发生的。
  • A:并不,但是网络层数加深,极大地增加了引起梯度消失/爆炸的可能性。

猜你喜欢

转载自blog.csdn.net/weixin_54633033/article/details/131684600