对于梯度消失和梯度爆炸的理解

对于梯度消失和梯度爆炸的理解

一、梯度消失、梯度爆炸产生的原因

   说白了,对于1.1 1.2,其实就是矩阵的高次幂导致的。在多层神经网络中,影响因素主要是权值和激活函数的偏导数。

1.1 前馈网络

  假设存在一个网络结构如图:

<span>对于梯度消失和梯度爆炸的理解</span>

  其表达式为:

<span>对于梯度消失和梯度爆炸的理解</span>

 

  若要对于w1求梯度,根据链式求导法则,得到的解为:

 <span>对于梯度消失和梯度爆炸的理解</span>

  通常,若使用的激活函数为sigmoid函数,其导数:

<span>对于梯度消失和梯度爆炸的理解</span>

  这样可以看到,如果我们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,导致梯度消失。若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸

   当然,若对于b求偏导的话,其实也是一个道理:

<span>对于梯度消失和梯度爆炸的理解</span>

  推出:

<span>对于梯度消失和梯度爆炸的理解</span>

1.2 RNN

  对于RNN的梯度下降方法,是一种基于时间的反向求导算法(BPTT),RNN的表达式:

<span>对于梯度消失和梯度爆炸的理解</span>

  通常我们会将一个完整的句子序列视作一个训练样本,因此总误差即为各时间步(单词)的误差之和。

<span>对于梯度消失和梯度爆炸的理解</span>

  而RNN还存在一个权值共享的问题,即这几个w都是一个,假设,存在一个反复与w相乘的路径,t步后,得到向量:

<span>对于梯度消失和梯度爆炸的理解</span>

  若特征值大于1,则会出现梯度爆炸,若特征值小于1,则会出现梯度消失。因此在一定程度上,RNN对比BP更容易出现梯度问题。主要是因为RNN处理时间步长一旦长了,W求导的路径也变的很长,即使RNN深度不大,也会比较深的BP神经网络的链式求导的过程长很大;另外,对于共享权值w,不同的wi相乘也在一定程度上可以避免梯度问题。

 1.3 悬崖和梯度爆炸

  对于目标函数,通常存在梯度变化很大的一个“悬崖”,在此处求梯度,很容易导致求解不稳定的梯度爆炸现象。

<span>对于梯度消失和梯度爆炸的理解</span>

 

 三、梯度消失和梯度爆炸哪种经常出现

  事实上,梯度消失更容易出现,因为对于激活函数的求导:

<span>对于梯度消失和梯度爆炸的理解</span>

  可以看到,当w越大,其wx+b很可能变的很大,而根据上面sigmoid函数导数的图像可以看到,wx+b越大,导数的值也会变的很小。因此,若要出现梯度爆炸,其w既要大还要保证激活函数的导数不要太小。

 

 二、如何解决梯度消失、梯度爆炸

  1、对于RNN,可以通过梯度截断,避免梯度爆炸

  2、可以通过添加正则项,避免梯度爆炸

  3、使用LSTM等自循环和门控制机制,避免梯度消失,参考:https://www.cnblogs.com/pinking/p/9362966.html

  4、优化激活函数,譬如将sigmold改为relu,避免梯度消失

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119443.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java帝国时代_new java project

    java帝国时代_new java project1.C语言帝国的统治现在是公元1995年,C语言帝国已经统治了我们20多年,实在是太久了。1972年,随着C语言的诞生和Unix的问世,帝国迅速建立统治,从北美到欧洲,从欧洲到亚洲,无数程序员臣服在他的脚下。帝国给我们提供了极好的福利:贴近硬件,运行极快,效率极高。使用这些福利,程序员们用C开发了很多系统级软件,操作系统,编译器,数据库,网络系统..

    2022年9月23日
    0
  • POJ–1300–Door Man【推断无向图欧拉通路】

    POJ–1300–Door Man【推断无向图欧拉通路】

    2022年1月26日
    79
  • ubuntu 开机遇到grub解决方法超详细_linux开机grub>命令修复方法

    ubuntu 开机遇到grub解决方法超详细_linux开机grub>命令修复方法grub是引导程序,它可以引导多操作系统。开机出现grub,多半是grub文件损坏了。下面介绍修复方法查找grub所在的分区,ubuntu没有另外建分区是在/boot/grub文件夹#第一步:输入ls出现(hd0,msods1),(hd0,msdos5),(hd0,msods7)#不同的电脑不一样,这是我电脑中的磁盘分区,和系统中的表示方法不一样,#linux…

    2022年10月23日
    0
  • ipfs矿机挖的是什么币(ipfs矿机19年一天收益)

    本文作者:火雷神算,如遇文章内容问题,请立即联系本人删除。感谢您的支持!很多人说,现在的FIL币价如此之低,还需要挖矿吗?火雷神算无法否认,ipf的价值在真正实现之前还有很长的路要走,但是对于ipfs,它只是缺少一个应用程序接口。随着FIL挖矿技术的发展,ipfs将在未来的网络应用道路上走得更快更远!虽然fil的价值下降现在影响到人们对fil矿挖矿预期收益的担忧,但对于那些长期看涨该矿的人来说,这是一个好时机,因为挖矿的成本和门槛也降低了。随着Filecoin网络的不断创新发展、稳..

    2022年4月14日
    59
  • Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)

    Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)

    2022年1月31日
    54
  • Java中的WeakHashMap

    Java中的WeakHashMap楔子WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,所以比较适合做缓存。WeakHashMap的这种特性比较适合实现类似本地、堆内缓存的存储机制——缓存的失效依赖于GC收集器的行为WeakHashMap的定义如下:publicclassWeakHashMap<K,V>extendsAbstract…

    2022年5月6日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号