在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。
地址:https://www.zhihu.com/people/xu-sen-lin-96
01
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。
02
如果从数学的角度来理解,一般结构的循环神经网络中,网络的状态之间是非线性的关系,并且参数 在每个时间步共享,这是导致梯度爆炸和梯度消失的根本原因。无论是梯度消失,还是梯度爆炸,都是技术实践上的bug,而不是理论上的 BUG
- 首先需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含义不一样。
MLP/CNN 中不同的层有不同的参数,各是各的梯度;而 RNN 中同样的权重在各个时间步共享,最终的梯度 各个时间步的梯度 的和。
- RNN 中总的梯度是不会消失的。即便梯度越传越弱,那也只是远距离的梯度消失,由于近距离的梯度不会消失,所有梯度之和便不会消失。
RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。
- 梯度爆炸从技术上相比梯度消失更好解决,因此,很少有人大篇幅去论证这个问题。
梯度爆炸最常用的解决方案是梯度截断:逐元素的截断参数梯度和截断梯度的范数。第二种方案可以确保截断后的梯度仍然是在正确的梯度方向上。但是实践表明:两种方式的效果相近。因为逐元素的梯度截断时,梯度更新的方向不仅不再是真实梯度方向,甚至也不是 mini-batch 的梯度方向。但是它仍然是一个使得目标值下降的方向。
03
虽然简单循环网络理论上可以建立长时间间隔的状态之间的依赖关系,但是由于梯度爆炸或消失问题,实际上只能学习到短期的依赖关系。这样,如果时刻 的输出 依赖于时刻 的输入 ,当间隔 比较大时,简单神经网络很难建模这种长距离的依赖关系,称为长程依赖问题(Long-Term Dependencies Problem)。
04
为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是引入门控机制来控制信息的累积速度,包括有选择地加入新的信息和有选择地遗忘之前累积的信息。长短期记忆(Long Short-Term Memory,LSTM)网络[Gers 等人; Hochreiter 等人,2000; 1997] 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。与传统的 RNN 相比,LSTM 依然是基于循环机制,只不过对内部的结果进行了更加精细的设计。
LSTM 中梯度的传播有很多条路径,关键在于穿过记忆单元的状态 和 的路径,其上面只有一些少量的线性交互(逐元素乘法和加法),梯度流最稳定,信息在上面流动保持不变会变得容易。但是其他路径上梯度流与普通 RNN 类似,照样会发生相同的权重矩阵反复连乘,所以依然会爆炸或者消失。由于总的远距离梯度 = 各条路径的远距离梯度之和,即便其他远距离路径梯度消失了,只要保证有一条远距离路径(就是上面说的那条路径)梯度不消失,总的远距离梯度就不会消失(正常梯度 + 消失梯度 = 正常梯度)。因此 LSTM 通过改善一条路径上的梯度问题拯救了总体的远距离梯度。
LSTM 网络引入门控机制(Gating Mechanism)来控制信息传递的路径。LSTM网络中的“门”是一种“软”门,取值在 之间,表示以一定的比例运行信息通过。05
遗忘门 控制上一个时刻的内部状态 需要遗忘多少信息。
06
输入门决定让多少新的信息加入到当前的 中来。实现这个需要两个步骤:
07
最终,我们需要确定输出什么值,这个输出将会基于我们的记忆单元的状态,但是也是一个过滤后的版本。首先,我们通过一个 sigmoid 层来确定记忆单元状态的哪些部分将输出出去。接着,我们把记忆单元通过 tanh 进行处理(得到一个 之间的值)并将它和sigmoid 门的输出相乘。
08
在一个训练好的网络中,当输入序列没有出现重要信息时,LSTM遗忘门的值接近为 ,输入门接近 ,此时过去的记忆会被保存,从而实现了长期记忆;当输入的序列中出现了重要信息时,LSTM 会将其存入记忆中,此时输入门的值会接近于 。经过这样的设计,整个网络更容易学习到序列之间的长期依赖。09
在 LSTM 中引入了三个门函数:输入门、遗忘门和输出门来控制信息的传递,由于输入门和遗忘门是互补关系,具有一定的冗余性,GRU 网络 直接使用一个门来控制输入和遗忘之间的平衡,在 GRU 模型中只有两个门:分别是更新门和重置门。图中的 和 分别表示更新门和重置门。更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,更新门的值越大说明前一时刻的状态信息带入越多。重置门控制前一状态有多少信息被写入到当前的候选状态 上,重置门越小,前一状态的信息被写入的越少。LSTM 和 GRU 都是通过各种门函数来将重要特征保留下来,这样就保证了在 long-term 传播的时候也不会丢失。此外 GRU 相对于 LSTM 少了一个门函数,因此在参数的数量上也是要少于LSTM 的,所以整体上 GRU 的训练速度要快于 LSTM 的。参考
https://www.cnblogs.com/xumaomao/articles/11071744.html
https://zhuanlan.zhihu.com/p/359586395
https://www.zhihu.com/question/44895610
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“综述专栏”历史文章
更多综述专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!