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

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

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

   说白了,对于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,避免梯度消失

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 学习PrintWriter类[通俗易懂]

    学习PrintWriter类[通俗易懂]java.io包1)首先先知道它的八种构造方法,但怎么记住这八种呢?我们都知道PrintWriter是一种过滤流,也叫处理流。也就是能对字节流和字符流进行处理,所以它会有:PrintWriter(OutputStreamout) 根据现有的OutputStream创建不带自动行刷新的新PrintWriter。PrintWriter(Writerout) 创建不带自动行刷新

  • 迭代法求行列式(线性代数公式)

    线性代数行列式计算之迭代法声明与简介线性代数行列式计算之迭代法是利用行列式逐阶展开式会发现或总结出n阶和n-1阶、n-2阶以及剩余阶的关系式,进而推算出整个行列式的最终结果。比如可以由或反过来(),总之能找出一个逐级演变的推导关系式。迭代法又称之为递推法。迭代法正向迭代根据给的行列式可以直观的找出n阶和n-1阶的关系式,这种方法叫做直接迭代法。详见如下示例:计算n阶行列式:#1思路Step1先观察行列式的特点,再整理思路Step2如果我们对第…

  • idea下载及汉化

    idea下载及汉化安装软件和汉化插件下载地址 链接:https://pan.baidu.com/s/1ftvTcFvx0ett7IQhU7Hltg 提取码:b43t 复制这段内容后打开百度网盘手机App,操作更方便哦 现在安装idea–>基本大家都会 汉化: 不是很建议使用汉化版本的.但是原界面对新手不是很友好,也有人说汉化后的界面有的按钮会报错,算了..开始正题吧 先把汉化文件夹…

  • rinetd双网卡端口转发(java请求转发)

    目前云数据库Redis版需要通过ECS进行内网连接访问。如果您本地需要通过公网访问云数据库Redis,可以在ECSLinux云服务器中安装rinetd进行转发实现。在云服务器ECSLinux中安装rinetd。wgethttp://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar-…

  • 打开GTA 5竟要跑19.8亿次if语句!黑客嘲讽R星代码烂,修改后直接省70%加载时间

    打开GTA 5竟要跑19.8亿次if语句!黑客嘲讽R星代码烂,修改后直接省70%加载时间本文转载自量子位一支烟的功夫,GTA5联机版终于打开了。「7年了!GTA5联机版加载还是这么慢??」△PleasewaitforevertoplayReddit、Steam、HackerNews上,无数玩家吐槽抱怨……进游戏少则等5、6分钟,多则20分钟。终于,一个黑客大哥实在忍不了,用逆编译器逐条查看运行情况,终于找到原因。原来,R星(游戏开发商RockStar)写的代码太低效,加载时,一个if语句竟然循环了19.8亿次….幕后黑手:谁占用大量时间?加

  • 将截断字符串或二进制数据解决办法_数据库从字符串转换日期失败

    将截断字符串或二进制数据解决办法_数据库从字符串转换日期失败在EF中,使用CodeFirst给实体添加约束的时候,使用NeGut控制台进行更新到数据库中,先使用add-migrationmigrationName命令进行创建(migrationName是进行更新的名字),然后使用Update-Database进行更新到数据库,此时报出问题:将截断字符串或二进制数据。语句已终止。错误原因为什么会报出这个问题,原因就是添加的限制和数据库中已…

发表回复

您的电子邮箱地址不会被公开。

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