如何防止梯度消失或梯度爆炸?

数据挖掘 梯度下降 深度学习
2021-09-19 11:35:07

是什么导致梯度消失或爆炸梯度发生,有哪些措施可以防止呢?

1个回答

梯度消失和梯度爆炸是与训练深度神经网络相关的两种常见效应,它们的影响通常越深网络越强。

如您所知,训练神经网络时的两个基本操作是前向传播和反向传播。当我们进行反向传播,即在网络中向后移动以计算损失函数相对于权重的梯度时,梯度值往往会急剧减少或增加,我们回到网络中越远。这发生在我们有激活函数(如 Sigmoid 或 TanH)的情况下,其非线性区域低于 0(即 x << -5)和高于 0(即 x >> 5)在饱和区域返回梯度值。这意味着 (x << -5) 与位于网络中较晚的那些层相比,较早层中的神经元将以非常慢的速度学习(梯度消失问题)。爆炸梯度是硬币的另一面,即

尝试防止这些问题的一些可能技术是,按相关性顺序排列:

  • 使用类似 ReLu 的激活函数:ReLu 激活函数在 sigmoid 和 TanH 饱和的区域保持线性,从而更好地响应梯度消失/爆炸。您还可以使用不同的类型,例如 Leaky-ReLu、Randomized ReLu 等。

  • 使用批量标准化(BN):这是您可以使用的另一种解决方案,以使您的网络对梯度消失/爆炸更加稳健,特别是如果您使用 sigmoid 或 TanH 作为激活函数。实际上,BN 在为您的网络选择激活函数时为您提供了更大的灵活性。获得的架构在训练时变得更加健壮,因为它不太容易由于初始化值或更高的学习率而发散。

  • 降低学习率:如果您在不考虑使用类似 ReLu 的激活函数和/或不使用 BN 的情况下提高学习率,您的网络在训练期间会更容易发散。通过降低学习率,您可以减少遭受梯度消失/爆炸问题的机会,但您的网络将需要更长的时间来学习。这就是为什么前两个选项在列表中位于首位的原因。

  • 改变你的架构:例如,如果你正在使用卷积神经网络,并且你正遭受梯度消失/爆炸的痛苦,那么迁移到像 ResNETs 这样的新架构可能是有意义的。与其他网络相比,这些结构将不同的层相互连接起来,即所谓的跳跃连接,充当梯度高速公路,允许梯度在不同层之间畅通无阻地流动。

  • 使用适当的权重初始化:例如,您可以使用 Xavier 初始化Xavier et al。以减少遭受消失/爆炸梯度的机会。此选项本身并不能保证您会解决这些问题,但与其他方法结合使用时,它会使您的网络更加健壮。

  • 梯度裁剪:这可以在梯度爆炸问题时使用。首先,我们选择一个阈值,如果梯度函数返回的值大于该阈值,我们将其设置为不同的值。您可以在此处查看更多信息