也来谈谈RNN的梯度消失/爆炸问题
©PaperWeekly 原创 · 作者|苏剑林
单位|追一科技
研究方向|NLP、神经网络
尽管 Transformer 类的模型已经攻占了 NLP 的多数领域,但诸如 LSTM、GRU 之类的 RNN 模型依然在某些场景下有它的独特价值,所以 RNN 依然是值得我们好好学习的模型。而于 RNN 梯度的相关分析,则是一个从优化角度思考分析模型的优秀例子,值得大家仔细琢磨理解。君不见,诸如“LSTM 为什么能解决梯度消失/爆炸”等问题依然是目前流行的面试题之一。
▲经典的LSTM
关于此类问题,已有不少网友做出过回答,然而笔者查找了一些文章(包括知乎上的部分回答、专栏以及经典的英文博客),发现没有找到比较好的答案:有些推导记号本身就混乱不堪,有些论述过程没有突出重点,整体而言感觉不够清晰自洽。为此,笔者也尝试给出自己的理解,供大家参考。
RNN及其梯度
RNN 的统一定义为:
其中
是每一步的输出,它由当前输入 和前一时刻输出 共同决定,而 则是可训练参数。在做最基本的分析时,我们可以假设 都是一维的,这可以让我们获得最直观的理解,并且其结果对高维情形仍有参考价值。之所以要考虑梯度,是因为我们目前主流的优化器还是梯度下降及其变种,因此要求我们定义的模型有一个比较合理的梯度。我们可以求得:
可以看到,其实 RNN 的梯度也是一个 RNN,当前时刻梯度
是前一时刻梯度 与当前运算梯度 的函数。同时,从上式我们就可以看出,其实梯度消失或者梯度爆炸现象几乎是必然存在的:
当
时,意味着历史的梯度信息是衰减的,因此步数多了梯度必然消失(好比
)
)
所以步数多了,梯度消失或爆炸几乎都是不可避免的,我们只能对于有限的步数去缓解这个问题。
消失还是爆炸?
说到这里,我们还没说清楚一个问题:什么是 RNN 的梯度消失/爆炸?梯度爆炸好理解,就是梯度数值发散,甚至慢慢就 NaN 了;那梯度消失就是梯度变成零吗?并不是,我们刚刚说梯度消失是
一直小于 1,历史梯度不断衰减,但不意味着总的梯度就为 0 了,具体来说,一直迭代下去,我们有:
显然,其实只要
不为 0,那么总梯度为 0 的概率其实是很小的;但是一直迭代下去的话,那么
这才是 RNN 中梯度消失的含义:距离当前时间步越长,那么其反馈的梯度信号越不显著,最后可能完全没有起作用,这就意味着 RNN 对长距离语义的捕捉能力失效了。
说白了,你优化过程都跟长距离的反馈没关系,怎么能保证学习出来的模型能有效捕捉长距离呢?
几个数学公式
上面的文字都是一般性的分析,接下来我们具体 RNN 具体分析。不过在此之前,我们需要回顾几条数学公式,后面的推导中我们将多次运用到这几条公式:
其中
是 sigmoid 函数。这几条公式其实就是说了这么一件事:
简单RNN分析
首先登场的是比较原始的简单 RNN(有时候我们确实直接称它为 SimpleRNN),它的公式为:
其中 W,U,b 是待优化参数。看到这里很自然就能提出第一个疑问:为什么激活函数用
而不是更流行的
从上面的讨论中我们已经知道,梯度消失还是爆炸主要取决于
,所以我们计算:
由于我们无法确定 U 的范围,因此
可能小于 1 也可能大于 1,梯度消失/爆炸的风险是存在的。但有意思的是,如果 |U| 很大,那么相应地
这样一来,我们就能回答为什么激活函数要用
了,因为激活函数用
所以,RNN 用
而不是
当然,又有读者会问,既然裁剪可以解决问题,那么是不是可以用
了?确实是这样子,配合良好的初始化方法和参数/梯度裁剪方案,
LSTM的结果
当然,裁剪的方式虽然也能 work,但终究是无奈之举,况且裁剪也只能解决梯度爆炸问题,解决不了梯度消失,如果能从模型设计上解决这个问题,那么自然是最好的。传说中的 LSTM 就是这样的一种设计,真相是否如此?我们马上来分析一下。
LSTM 的更新公式比较复杂,它是:
我们可以像上面一样计算
,但从
同样地,我们先只关心 1 维的情形,这时候根据求导公式,我们有:
右端第一项
,也就是我们所说的“遗忘门”,从下面的论述我们可以知道一般情况下其余三项都是次要项,因此
但非常碰巧的是,这里有个相当自洽的结论:如果我们的任务比较依赖于历史信息,那么
就会接近于 1,这时候历史的梯度信息也正好不容易消失;如果
所以,现在的关键就是看“其余三项都是次要项”这个结论能否成立。后面的三项都是“一项乘以另一项的偏导”的形式,而且求偏导的项都是
或
注意到
,都是在 0~1 之间,也可以证明
跟简单 RNN 的梯度(6)相比,它也多出了 3 个门,说直观一点那就是:1 个门我压不垮你,多来几个门还不行么?
剩下两项的结论也是类似的:
所以,后面三项的梯度带有更多的“门”,一般而言乘起来后会被压缩的更厉害,因此占主导的项还是
,
因此,LSTM 同时较好地缓解了梯度消失/爆炸问题,现在我们训练 LSTM 时,多数情况下只需要直接调用 Adam 等自适应学习率优化器,不需要人为对梯度做什么调整了。
当然,这些结果都是“概论”,你非要构造一个会梯度消失/爆炸的 LSTM 来,那也是能构造出来的。此外,就算 LSTM 能缓解这两个问题,也是在一定步数内,如果你的序列很长,比如几千上万步,那么该消失的还会消失。毕竟单靠一个向量,也缓存不了那么多信息啊~
顺便看看GRU
在文章结束之前,我们顺便对 LSTM 的强力竞争对手 GRU 也做一个分析。GRU 的运算过程为:
还有个更极端的版本是将
合成一个:
不管是哪一个,我们发现它在算
的时候,
首先我们观察到,而
一般全零初始化,
其实结果跟 LSTM 的类似,主导项应该是
,但剩下的项比 LSTM 对应的项少了 1 个门,因此它们的量级可能更大,相对于 LSTM 的梯度其实更不稳定,特别是
针对上述分析结果,个人认为如果沿用 GRU 的思想,又需要简化 LSTM 并且保持 LSTM 对梯度的友好性,更好的做法是把
放到最后:
当然,这样需要多缓存一个变量,带来额外的显存消耗了。
文章总结概述
本文讨论了 RNN 的梯度消失/爆炸问题,主要是从梯度函数的有界性、门控数目的多少来较为明确地讨论 RNN、LSTM、GRU 等模型的梯度流情况,以确定其中梯度消失/爆炸风险的大小。本文属于闭门造车之作,如有错漏,请读者海涵并斧正。
更多阅读
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
???? 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
???? 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
????
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。
也来谈谈RNN的梯度消失/爆炸问题相关推荐
- 谈谈RNN的梯度消失/爆炸问题
尽管 Transformer 类的模型已经攻占了 NLP 的多数领域,但诸如 LSTM.GRU 之类的 RNN 模型依然在某些场景下有它的独特价值,所以 RNN 依然是值得我们好好学习的模型.而于 R ...
- rnn 梯度消失爆炸
文章目录 梯度消失和爆炸原理 求导知识 RNN推导 梯度消失和爆炸原理 求导知识 y=x2y = x^2y=x2 dy\mathrm{d} {y}dy 导数 dydx\Large \frac {\ma ...
- 深度学习100问之深入理解Vanishing/Exploding Gradient(梯度消失/爆炸)
这几天正在看梯度消失/爆炸,在深度学习的理论中梯度消失/爆炸也是极其重要的,所以就抽出一段时间认真地研究了一下梯度消失/爆炸的原理,以下为参考网上的几篇文章总结得出的. 本文分为四个部分:第一部分主要 ...
- 梯度消失/爆炸与RNN家族的介绍(LSTM GRU B-RNN Multi-RNNs)-基于cs224n的最全总结
vanishing gradients and fancy RNNs(RNN家族与梯度消失) 文章目录 vanishing gradients and fancy RNNs(RNN家族与梯度消失) 内 ...
- Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了
作者 | mantch 来源 | 知乎 1. 训练误差和泛化误差 对于机器学习模型在训练数据集和测试数据集上的表现.如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时, ...
- ResNet(残差网络)和梯度消失/爆炸
ResNet解决的不是梯度弥散或爆炸问题,kaiming的论文中也说了:臭名昭著的梯度弥散/爆炸问题已经很大程度上被normalized initialization and intermediate ...
- 深度学习:梯度消失和梯度爆炸
http://blog.csdn.net/pipisorry/article/details/71877840 梯度消失 主要是因为网络层数太多,太深,导致梯度无法传播.本质应该是激活函数的饱和性. ...
- RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题
RNN梯度消失和爆炸的原因 经典的RNN结构如下图所示: 假设我们的时间序列只有三段, 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为 . 则对于一 ...
- ztree在刷新时第一个父节点消失_从反向传播推导到梯度消失and爆炸的原因及解决方案(从DNN到RNN,内附详细反向传播公式推导)...
引言:参加了一家公司的面试和另一家公司的笔试,都问到了这个题!看来很有必要好好准备一下,自己动手推了公式,果然理解更深入了!持续准备面试中... 一. 概述: 想要真正了解梯度爆炸和消失问题,必须手推 ...
最新文章
- 关掉可穿戴部门后,英特尔还将调整自动驾驶业务
- 3.3V与5V的电平转换
- python和javascript哪个好_JavaScript与Python:主要区别
- 学习理发去哪里_学习美发去哪里学
- 局域网中另外一台服务器的内存_局域网共享打印机,但另外一台电脑却看不到,可能是这3个原因...
- javascript sort排序
- delphi FastReport 安装方法
- InstallAnywhere制作出来的安装包在64位机上无法卸载
- 里式替换(LSP)跟多态有何区别?
- 【比赛】CCL“中国法研杯”相似案例匹配评测竞赛 - TOP队伍攻略分享
- 非线性系统的神经网络控制(常用介绍)--理论
- 一个前端所需具备的PS能力
- win10安装Hive3.0.0
- html树形菜单折叠 css,JS+CSS简单树形菜单实现方法
- 聊一聊:苹果发布新款M2 MacBook Air,macOS 13上线
- 基于Paddle复现《Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images》降噪网络
- Vue ElementUI 修改消息提示框样式---messageBox 的大小
- 如何根据自己的需要培养游戏开发技能?又一篇游戏编程入门指南
- donald knuth --图灵奖获奖者
- 安装Kdevelop--我的过程