首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止消失梯度或爆炸梯度?

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

Data Science用户
提问于 2020-04-15 05:00:24
回答 3查看 12.6K关注 0票数 5

是什么导致了消失梯度或爆炸梯度的发生,采取了哪些措施来防止它的发生?

EN

回答 3

Data Science用户

发布于 2020-04-15 06:48:38

消隐梯度和爆炸梯度是深层神经网络训练的两种常见效果,它们的影响往往越大。

如你所知,训练神经网络的两个基本操作是前向传播和反向传播.当我们进行反向传播时,即在网络中向后移动,计算损失函数相对于权值的梯度,梯度值有急剧减小或增大的趋势,我们在网络中的回归越深。当我们有像Sigmoid或TanH这样的激活函数,其非线性区域低于0(即x << -5)和超过0(即x >> 5)返回梯度值在饱和区域时,就会发生这种情况。这意味着(x << -5)早期层中的神经元将以非常慢的速度学习,而这些层位于网络的后期(消失梯度问题)。爆炸梯度是硬币的另一面,即当激活函数饱和时(使用x >> 5),梯度值会急剧增加,使得权重的更新不稳定,因此无法收敛。

设法防止这些问题的一些可能的技术按相关性排列如下:

  • 使用类ReLu激活函数:对于乙状结肠和TanH饱和的区域,ReLu激活函数保持线性,从而更好地响应梯度消失/爆炸。您也可以使用不同的类型,如漏-重播,随机ReLu,等等。
  • 使用批处理规范化(BN):这是另一种解决方案,您可以使用它来使您的网络更好地抵御渐变消失/爆炸,特别是当您使用sigmoid或TanH作为激活函数时。实际上,BN在为您的网络选择激活功能时提供了更多的灵活性。所获得的体系结构在训练方面变得更加健壮,因为它不太容易由于初始化值或较高的学习率而发散。
  • 降低学习率:如果你在没有考虑使用类似ReLu的激活函数和/或不使用BN的情况下提高了你的学习率,那么你的网络在训练期间就会更容易分化。通过降低你的学习率,你可以减少遭受消失/爆炸梯度问题的机会,但是你的网络需要更长的时间来学习。这就是为什么前两个选项位于列表的第一位的原因。
  • 改变您的架构:例如,如果您正在使用卷积神经网络,并且您正在遭受消失/爆炸渐变的痛苦,那么迁移到一个新的体系结构(如ResNET)可能是有意义的。与其他网络相比,这些结构相互连接不同的层,即所谓的跳过连接,作为梯度公路,允许不同层间的梯度畅通无阻地流动。
  • 使用适当的权值初始化:例如,您可以使用Xavier初始化泽维尔等人来减少遭受消失/爆炸梯度的几率。这个选项本身并不能保证您将解决这些问题,但是它会使您的网络在与其他方法相结合时更加健壮。
  • 梯度裁剪:这可以用于有爆炸梯度问题。首先,我们选择一个阈值,如果梯度函数返回的值大于此阈值,则将其设置为不同的值。您可以查看更多的信息,这里
票数 8
EN

Data Science用户

发布于 2023-01-29 08:40:14

@juanba1984 1984的答复很好地解释了原因。但是关于爆炸梯度的评论是什么

当激活函数饱和时(使用x >> 5),梯度值会急剧增加。

不是真的。饱和激活函数不会引起梯度的增加。当激活函数如Sigmoid或tanH饱和时,梯度接近于零。

票数 1
EN

Data Science用户

发布于 2023-04-22 09:10:29

在@juanba1984 1984和@但为什么添加了一些摘要:

根据您的网络架构选择合适的网络结构、适当的权值初始化、选择合适的激活函数、批规格化和适当的优化器,这些都是处理两个梯度问题的常用技术。尽管它们无法完全解决这些问题,但正如@juanba1984 1984所提到的,它们使网络对这些问题更加健壮。我们必须增加这些方法,例如:

  1. 通过减少消失梯度问题的层数来降低模型复杂度,因为消失梯度的根本原因在于一束小梯度的乘积,直观地说,通过减少梯度的数目来解决这个问题是有意义的,即减少我们网络中的层数。
  2. 爆炸梯度问题的梯度裁剪和权值正则化。

希望这对你有用。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/72351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档