GRU与LSTM总结

转:https://blog.csdn.net/lreaderl/article/details/78022724

一、LSTM(长短期记忆网络)

LSTM是一种特殊的RNN类型,一般的RNN结构如下图所示,是一种将以往学习的结果应用到当前学习的模型,但是这种一般的RNN存在着许多的弊端。举个例子,如果我们要预测“the clouds are in the sky”的最后一个单词,因为只在这一个句子的语境中进行预测,那么将很容易地预测出是这个单词是sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。 
RNN训练过程
标准RNN结构
标准的RNN结构中只有一个神经元,一个tanh层进行重复的学习,这样会存在一些弊端。例如,在比较长的环境中,例如在“I grew up in France… I speak fluent French”中去预测最后的French,那么模型会推荐一种语言的名字,但是预测具体是哪一种语言时就需要用到很远以前的Franch,这就说明在长环境中相关的信息和预测的词之间的间隔可以是非常长的。在理论上,RNN 绝对可以处理这样的长环境问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 并不能够成功学习到这些知识。然而,LSTM模型就可以解决这一问题。 
LSTM网络结构
如图所示,标准LSTM模型是一种特殊的RNN类型,在每一个重复的模块中有四个特殊的结构,以一种特殊的方式进行交互。在图中,每一条黑线传输着一整个向量,粉色的圈代表一种pointwise 操作(将定义域上的每一点的函数值分别进行运算),诸如向量的和,而黄色的矩阵就是学习到的神经网络层。 
LSTM模型的核心思想是“细胞状态”。“细胞状态”类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。 
细胞状态
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。 
LSTM门 
Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”。LSTM 拥有三个门,来保护和控制细胞状态。 
LSTM——第一步
在LSTM模型中,第一步是决定我们从“细胞”中丢弃什么信息,这个操作由一个忘记门层来完成。该层读取当前输入x和前神经元信息h,由ft来决定丢弃的信息。输出结果1表示“完全保留”,0 表示“完全舍弃”。 
确定更新
第二步是确定细胞状态所存放的新信息,这一步由两层组成。sigmoid层作为“输入门层”,决定我们将要更新的值i;tanh层来创建一个新的候选值向量~Ct加入到状态中。在语言模型的例子中,我们希望增加新的主语到细胞状态中,来替代旧的需要忘记的主语。 
确定更新的信息
第三步就是更新旧细胞的状态,将Ct-1更新为Ct。我们把旧状态与 ft相乘,丢弃掉我们确定需要丢弃的信息。接着加上 it * ~Ct。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的信息并添加新的信息的地方。 
输出
最后一步就是确定输出了,这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。在语言模型的例子中,因为语境中有一个代词,可能需要输出与之相关的信息。例如,输出判断是一个动词,那么我们需要根据代词是单数还是负数,进行动词的词形变化。

二、GRU( Gated Recurrent Unit,LSTM变体)

GRU
GRU作为LSTM的一种变体,将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,加诸其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。

三、对比

LSTM与GRU对比 
概括的来说,LSTM和GRU都能通过各种Gate将重要特征保留,保证其在long-term 传播的时候也不会被丢失。 
结果对比1 
可以看出,标准LSTM和GRU的差别并不大,但是都比tanh要明显好很多,所以在选择标准LSTM或者GRU的时候还要看具体的任务是什么。 
使用LSTM的原因之一是解决RNN Deep Network的Gradient错误累积太多,以至于Gradient归零或者成为无穷大,所以无法继续进行优化的问题。GRU的构造更简单:比LSTM少一个gate,这样就少几个矩阵乘法。在训练数据很大的情况下GRU能节省很多时间。

五、应用

样例:预测当前词。每个时刻的输入都是一个embedding向量,它的长度是输入层神经元的个数,与时间步的个数(即句子的长度)没有关系。 
每个时刻的输出是一个概率分布向量,其中最大值的下标决定了输出哪个词。 
RNN&LSTM实际应用: 
1. Language ModelThe Unreasonable Effectiveness of Recurrent Neural Networks http://karpathy.github.io/2015/05/21/rnn-effectiveness/ 
2. Image Captioning[CVPR15]]Long-term Recurrent Convolutional Networks for Visual Recognition and DescriptionDeep Visual-Semantic Alignments for Generating Image Descriptions http://cs.stanford.edu/people/karpathy/deepimagesent/
3. Speech Recognition 
4. Machine Translation[NIPS15]Sequence to Sequence Learning 
with Neural Networks. http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf

-----------------------

转:https://blog.csdn.net/suiling1/article/details/80132127

引言

RNN是深度学习中用于处理时序数据的关键技术, 目前已在自然语言处理, 语音识别, 视频识别等领域取得重要突破, 然而梯度消失现象制约着RNN的实际应用。LSTM和GRU是两种目前广为使用的RNN变体,它们通过门控机制很大程度上缓解了RNN的梯度消失问题,但是它们的内部结构看上去十分复杂,使得初学者很难理解其中的原理所在。本文介绍”三次简化一张图”的方法,对LSTM和GRU的内部结构进行分析。该方法非常通用,适用于所有门控机制的原理分析。

预备知识: RNN

RNN (recurrent neural networks, 注意不是recursiveneural networks)提供了一种处理时序数据的方案。和n-gram只能根据前n-1个词来预测当前词不同, RNN理论上可以根据之前所有的词预测当前词。在每个时刻, 隐层的输出ht依赖于当前词输入xt和前一时刻的隐层状态ht-1:

图片描述

其中:=表示”定义为”, sigm代表sigmoid函数sigm(z):=1/(1+exp(-z)), Wxh和Whh是可学习的参数。结构见下图:

图片描述

图中左边是输入,右边是输出。xt是当前词,ht-1记录了上文的信息。xt和ht-1在分别乘以Wxh和Whh之后相加,再经过tanh非线性变换,最终得到ht。

在反向传播时,我们需要将RNN沿时间维度展开,隐层梯度在沿时间维度反向传播时需要反复乘以参数。因此, 尽管理论上RNN可以捕获长距离依赖, 但实际应用中,根据谱半径(spectralradius)的不同,RNN将会面临两个挑战:梯度爆炸(gradient explosion)和梯度消失(vanishing gradient)。梯度爆炸会影响训练的收敛,甚至导致网络不收敛;而梯度消失会使网络学习长距离依赖的难度增加。这两者相比, 梯度爆炸相对比较好处理,可以用梯度裁剪(gradientclipping)来解决,而如何缓解梯度消失是RNN及几乎其他所有深度学习方法研究的关键所在。

LSTM 
LSTM通过设计精巧的网络结构来缓解梯度消失问题,其数学上的形式化表示如下:

图片描述

其中代表逐元素相乘。这个公式看起来似乎十分复杂,为了更好的理解LSTM的机制, 许多人用图来描述LSTM的计算过程, 比如下面的几张图:

图片描述

似乎看完了这些图之后,你对LSTM的理解还是一头雾水? 这是因为这些图想把LSTM的所有细节一次性都展示出来,但是突然暴露这么多的细节会使你眼花缭乱,从而无处下手。

因此,本文提出的方法旨在简化门控机制中不重要的部分,从而更关注在LSTM的核心思想。整个过程是“三次简化一张图”,具体流程如下:

第一次简化: 忽略门控单元i,f,o的来源。3个门控单元的计算方法完全相同, 都是由输入经过线性映射得到的, 区别只是计算的参数不同。这样做的目的是为了梯度反向传导时能对门控单元进行更新。这不是LSTM的核心思想, 在进行理解时,我们可以假定各门控单元是给定的。

第二次简化: 考虑一维情况。LSTM中对各维是独立进行门控的,所以为了理解方便,我们只需要考虑一维情况。

第三次简化: 各门控单元0/1输出。 门控单元输出是[0,1]实数区间的原因是阶跃激活函数无法反向传播进行优化, 所以各门控单元使用sigmoid激活函数去近似阶跃函数。 因此, 为了理解方便, 我们只需要考虑理想情况, 即各门控单元是{0,1}二值输出的,即门控单元扮演了电路中”开关”的角色, 用于控制信息传输的通断。

一张图: 将三次简化的结果用”电路图”表述出来,左边是输入,右边是输出。另外需要特别注意的是LSTM中的c实质上起到了RNN中h的作用, 这点在其他文献资料中不常被提到。最终结果如下:

图片描述

和RNN相同的是,网络接受两个输入,得到一个输出。不同之处在于, LSTM中通过3个门控单元来对记忆单元c的信息进行交互。

根据这张图,我们可以对LSTM中各单元作用进行分析:

输入门it: it控制当前词xt的信息融入记忆单元ct。在理解一句话时,当前词xt可能对整句话的意思很重要,也可能并不重要。输入门的目的就是判断当前词xt对全局的重要性。当it开关打开的时候,网络将不考虑当前输入xt。

遗忘门ft: ft控制上一时刻记忆单元ct-1的信息融入记忆单元ct。在理解一句话时,当前词xt可能继续延续上文的意思继续描述,也可能从当前词xt开始描述新的内容,与上文无关。和输入门it相反, ft不对当前词xt的重要性作判断, 而判断的是上一时刻的记忆单元ct-1对计算当前记忆单元ct的重要性。当ft开关打开的时候,网络将不考虑上一时刻的记忆单元ct-1。

输出门ot: 输出门的目的是从记忆单元ct产生隐层单元ht。并不是ct中的全部信息都和隐层单元ht有关,ct可能包含了很多对ht无用的信息,因此, ot的作用就是判断ct中哪些部分是对ht有用的,哪些部分是无用的。

记忆单元ct:ct综合了当前词xt和前一时刻记忆单元ct-1的信息。这和ResNet中的残差逼近思想十分相似,通过从ct-1到ct的”短路连接”, 梯度得已有效地反向传播。 当ft处于闭合状态时, ct的梯度可以直接沿着最下面这条短路线传递到ct-1,不受参数W的影响,这是LSTM能有效地缓解梯度消失现象的关键所在。

GRU

GRU是另一种十分主流的RNN衍生物。RNN和LSTM都是在设计网络结构用于缓解梯度消失问题, 只不过是网络结构有所不同。GRU在数学上的形式化表示如下:

图片描述

为了理解GRU的设计思想,我们再一次运用“三次简化一张图”的方法来进行分析:

第一次简化: 忽略门控单元z, r的来源。 
第二次简化: 考虑一维情况。 
第三次简化: 各门控单元0/1输出。这里和LSTM略有不同的地方在于,GRU需要引入一个”单刀双掷开关”。 
一张图: 把三次简化的结果用”电路图”表述出来,左输入,右输出:

图片描述

与LSTM相比,GRU将输入门it和遗忘门ft融合成单一的更新门zt,并且融合了记忆单元ct和隐层单元ht,所以结构上比LSTM更简单一些。

根据这张图,我们可以对GRU的各单元作用进行分析:

重置门rt:rt用于控制前一时刻隐层单元ht-1对当前词xt的影响。如果ht-1对xt不重要,即从当前词xt开始表述了新的意思,与上文无关, 那么rt开关可以打开, 使得ht-1对xt不产生影响。

更新门zt:zt用于决定是否忽略当前词xt。类似于LSTM中的输入门it, zt可以判断当前词xt对整体意思的表达是否重要。当zt开关接通下面的支路时,我们将忽略当前词xt,同时构成了从ht-1到ht的”短路连接”,这梯度得已有效地反向传播。和LSTM相同,这种短路机制有效地缓解了梯度消失现象, 这个机制于highwaynetworks十分相似。

小结

尽管RNN, LSTM,和GRU的网络结构差别很大,但是他们的基本计算单元是一致的,都是对xt和ht-1做一个线性映射加tanh激活函数,见三个图的红色框部分。他们的区别在于如何设计额外的门控机制控制梯度信息传播用以缓解梯度消失现象。LSTM用了3个门,GRU用了2个,那能不能再少呢? MGU (minimal gate unit)尝试对这个问题做出回答, 它只有一个门控单元。

最后留个小练习, 参考LSTM和GRU的例子,你能不能用“三次简化一张图”的方法来分析一下MGU呢?

参考文献 
Bengio, Yoshua, Patrice Simard, and Paolo Frasconi. “Learning long-term 
dependencies with gradient descent is difficult.” IEEE transactions on 
neural networks 5.2 (1994): 157-166. 2. Cho, Kyunghyun, et al. “Learning phrase representations using RNN 
encoder-decoder for statistical machine translation.” arXiv preprint 
arXiv:1406.1078 (2014). 3. Chung, Junyoung, et al. “Empirical evaluation of gated recurrent neural 
networks on sequence modeling.” arXiv preprint arXiv:1412.3555 (2014). 4. Gers, Felix. “Long short-term memory in recurrent neural networks.” Unpublished PhD dissertation, Ecole Polytechnique Fédérale de Lausanne, Lausanne, Switzerland (2001). 5. Goodfellow, Ian, Yoshua Bengio, and Aaron Courville. Deep learning. MIT 
press, 2016. 6. Graves, Alex. Supervised sequence labelling with recurrent neural networks. Vol. 385. Heidelberg: Springer, 2012. 7. Greff, Klaus, et al. “LSTM: A search space odyssey.” IEEE transactions on 
neural networks and learning systems (2016). 8. He, Kaiming, et al. “Deep residual learning for image recognition.” Proceedings of the IEEE conference on computer vision and pattern 
recognition. 2016. 9. He, Kaiming, et al. “Identity mappings in deep residual networks.” European 
Conference on Computer Vision. Springer International Publishing, 2016. 10. Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780. 11. Jozefowicz, Rafal, Wojciech Zaremba, and Ilya Sutskever. “An empirical 
exploration of recurrent network architectures.” Proceedings of the 32nd 
International Conference on Machine Learning (ICML-15). 2015. 12. Li, Fei-Fei, Justin Johnson, and Serena Yeung. CS231n: Convolutional Neural 
Networks for Visual Recognition. Stanford. 2017. 13. Lipton, Zachary C., John Berkowitz, and Charles Elkan. “A critical review of 
recurrent neural networks for sequence learning.” arXiv preprint 
arXiv:1506.00019 (2015). 14. Manning, Chris and Richard Socher. CS224n: Natural Language Processing 
with Deep Learning. Stanford. 2017. 15. Pascanu, Razvan, Tomas Mikolov, and Yoshua Bengio. “On the difficulty of 
training recurrent neural networks.” International Conference on Machine 
Learning. 2013. 16. Srivastava, Rupesh Kumar, Klaus Greff, and Jürgen Schmidhuber. “Highway 
networks.” arXiv preprint arXiv:1505.00387 (2015). 17. Williams, D. R. G. H. R., and Geoffrey Hinton. “Learning representations by 
back-propagating errors.” Nature 323.6088 (1986): 533-538. 18. Zhou, Guo-Bing, et al. “Minimal gated unit for recurrent neural networks.” 
International Journal of Automation and Computing 13.3 (2016): 226-234.

本文是投稿文章,作者:张皓。南京大学计算机系机器学习与数据挖掘所(LAMDA)研究生,研究方向为计算机视觉和机器学习,特别是视觉识别和深度学习。

个人主页:http://lamda.nju.edu.cn/zhangh/


猜你喜欢

转载自blog.csdn.net/m0_37870649/article/details/80968621