![776b42b18bbe745a18c4722cb33ef32c.png](https://i-blog.csdnimg.cn/blog_migrate/bafafc93aafa935a1e981a13306d9091.jpeg)
本文翻译自michalphi的博客
原文链接:https://www.michaelphi.com/illustrated-guide-to-lstms-and-grus-a-step-by-step-explanation/
![eed1ea53d05c0104d669489e4e3a5718.png](https://i-blog.csdnimg.cn/blog_migrate/c4f66b1a319f4e4b3ae43731e2aa5e73.png)
在本文中,我们将首先直观感受LSTM和GRU,然后再解释使LSTM和GRU表现出色的内部机制。
短期记忆的问题
循环神经网络(Recurrent Neural Networks,RNN)遭受短期记忆的困扰。如果一个序列足够长,则很难将信息从较早的步骤传递到较晚的步骤。因此,如果我们尝试处理一段文字以进行预测,则RNN可能会从一开始就遗漏重要信息。
在反向传播(back propagation)期间,循环神经网络遭受梯度消失的困扰。梯度是用于更新神经网络权重的值。梯度消失指梯度随着时间的流逝而缩小。如果梯度值变得非常小,那么它对学习的贡献就不会太大。
![89f343200fd480b843f1f3e512487afb.png](https://i-blog.csdnimg.cn/blog_migrate/fa9d706994de26444cd40831ba328990.jpeg)
因此,在循环神经网络中,获得较小梯度更新的层将停止学习。这些通常是较早的层。因此,由于这些层都不学习,因此RNN可以忘记较长时间序列中看到的内容,从而具有短期记忆。
解决方案::LSTM和GRU
长期短期记忆(Long Short-Term Memory,简称LSTM)和门控循环单位(Gated Recurrent Units ,GRU),是为了解决短期记忆的问题而诞生的。它们具有称为闸门(gates)的内部机制,而这些闸门可以控制信息流。
![c99ea943cc458b3d3d9b4a73f37206db.png](https://i-blog.csdnimg.cn/blog_migrate/c1b4981e619f8509ffa637f620b92a47.jpeg)
这些闸门可以学习到序列中的哪些数据是要保留的,哪些数据是要舍弃的。通过这样做,它可以将相关信息沿序列的长链传递下来并进行预测。
几乎所有基于循环神经网络(RNN)的技术成果都是通过这两个网络(LSTM&GRU)实现的。LSTM和GRU可以应用在语音识别,语音合成和文本生成中。我们甚至可以使用它们为视频生成字幕。
直观感受
接下来我们将从一个思想实验开始,对LSTM进行直观感受。
假设我们正在查看某样商品的评论,以确定我们是否要购买该项商品。我们将首先阅读该评论,然后得到其他人对该商品的评价。
![777324d9e87bfb8a66488fe116d1a2fb.png](https://i-blog.csdnimg.cn/blog_migrate/ac08a9905ae67e52ee5ef95b738bc847.jpeg)
当我们阅读上面的评论时,大脑的潜意识只会记住重要的关键词。我们可能会记住"amazing"和"perfectly balanced breakfast"之类的词,但会忽略"this"、"gave"、"all"和"should"之类的词。如果第二天一个朋友问我们昨天看的评论怎么说,我们无法逐词逐句地记起评论,但可能会记得像"will definitely be buying again"之类的关键词。
![5174363afd8578b5f393dc785bcf1b99.png](https://i-blog.csdnimg.cn/blog_migrate/3e79f981cc4b72e00995089e1d36e174.png)
上面我们了解了大脑的记忆或遗忘机制,而这也就是LSTM和GRU的机制。它们可以学习仅保留相关信息而忘记不相关的数据来进行预测。在上面的实验中,我们大脑记下的关键词使得我们对这样商品做出不错的评价。
RNN综述
为了更好地理解LSTM或GRU,让我们回顾一下循环神经网络(RNN)。
在上面的实验中, RNN的工作方式如下:首先,单词被转换为机器可读的向量。然后,RNN逐一处理向量序列。
![0a77ba2ae408c056d68d0d1c73f581a0.png](https://i-blog.csdnimg.cn/blog_migrate/b3ea3ab3e51bd05a49f729194464eb4a.png)
在处理时,它将先前的隐藏状态(hidden state)传递到序列的下一个步骤。隐藏状态充当神经网络的内存。它包含有该神经网络之前接收数据的信息。
![c76c597c36c533020d8cbd55520c12d7.png](https://i-blog.csdnimg.cn/blog_migrate/ec333db2b7e2774d01b6136da27e8fa9.png)
让我们看一下RNN的一个单元,看看如何计算隐藏状态。首先,将输入状态和先前的隐藏状态合并以形成向量。现在,该向量具有有关当前输入和先前输入的信息。该向量经过tanh激活,输出为新的隐藏状态。
![038e9a8fda00201d314c7b29a6a9ca9d.gif](https://i-blog.csdnimg.cn/blog_migrate/ae3343594c5bed4ffe7c0f58b2986330.gif)
Tanh激活
tanh激活用于帮助调节流经网络的值。tanh函数将值压缩为始终在-1和1之间。
![76e89e5241f11e61dc58d4cad4d353d7.png](https://i-blog.csdnimg.cn/blog_migrate/e55256a668a41554f125f0868669e223.png)
当向量流过神经网络时,由于各种数学运算,它会经历许多变换。因此,想象一个对输入值连续乘以3的RNN。您可以看到一些值如何爆炸并成为天文数字,从而导致其他值显得微不足道。
![c717b3b38ae10ac88c1a7ac83a5e495f.png](https://i-blog.csdnimg.cn/blog_migrate/be94bb1bdefd66cb66b592c7f6db2210.png)
tanh函数可确保值保持在-1和1之间,从而调节神经网络的输出。我们可以看到在相同输入的情况下,tanh函数如何输出。
![8153bbc680b81a424616480a9f9aecb2.png](https://i-blog.csdnimg.cn/blog_migrate/89252ea75d79530667263335c0df4053.png)
这就是RNN。它内部几乎没有操作,但是在适当的情况下(如短序列)可以很好地工作。与经过改进的LSTM和GRU变体相比,RNN所使用的计算资源要少得多。
LSTM
LSTM具有与RNN类似的控制流。向前传播时,它在处理处理数据的同时进行信息传递。LSTM与RNN的区别在于单元内的操作。
![ee7287f0cae2aea83c3940e0900eec4b.png](https://i-blog.csdnimg.cn/blog_migrate/920992d295c104fe2e489f3a51391782.jpeg)
这些操作帮助LSTM保留或忘记信息。乍一看这些操作可能会觉得很复杂,因此我们将逐步进行这些操作。
核心概念
LSTM的核心概念是单元状态(cell state)及其各种闸门(gates)。
单元状态充当信息传输的高速公路,一直沿着序列传递相关信息。我们可以将其视为神经网络的“内存”。理论上,单元状态可以在整个序列处理过程中携带相关信息。因此,即使来自较早时间的信息也可以使其传递到较晚的时间,从而减少了短期记忆的影响。
在单元状态传递信息的过程中,信息会通过闸门添加到单元状态或从单元状态删除。而闸门是不同的神经网络,它们决定保留那些有关单元状态的信息,而忘记那些无关信息。
Sigmoid激活
Sigmoid激活类似于tanh激活。但它不是将数据压缩至-1和1之间,而是压缩到0和1之间。这对更新或忘记数据很有帮助,因为任何乘以0的数字都是0,从而导致值消失或“被遗忘”。任何数字乘以1就是相同的值,因此该值保持不变或被“保留”。网络可以学习到哪些数据不重要并将其遗忘,也可以学习到哪些数据重要并进行保留。
![5a3376e41154a43f24b9aea64db34daa.png](https://i-blog.csdnimg.cn/blog_migrate/a15f52ef993e03675dd0df16140ec23c.png)
接下来我们将更深入地研究各个闸门的作用。在LSTM中,我们有三个不同的闸门来调节LSTM单元中的信息流。它们分别是遗忘门、输入门和输出门。
遗忘门(Forget gate)
首先,我们来看遗忘门。此门决定应该丢弃或保留哪些信息。来自先前隐藏状态的信息和来自当前输入的信息通过Sigmoid函数传递。输出值介于0到1之间,接近0表示忘记,接近1表示保留。
![2e7716c47e8e0af95cd99e34ff0b0a01.png](https://i-blog.csdnimg.cn/blog_migrate/c2b1a5c96c841b6c9d57ca6f7f0a8d69.png)
输入门(Input Gate)
输入门用于更新单元状态。
首先,我们将先前的隐藏状态和当前输入传递到Sigmoid函数中。通过将值转换为介于0和1之间的值,我们可以决定来更新哪些值,0表示不重要,而1表示重要。我们还可以将隐藏状态和当前输入传递到tanh函数中,将其压缩为介于-1和1之间的值,以帮助调节网络。然后将tanh输出与Sigmoid输出相乘。Sigmoid输出将决定从tanh输出中保留哪些重要信息。
![bc4bf88f3c901d19dff5b4fcd91867bb.gif](https://i-blog.csdnimg.cn/blog_migrate/1dc895f141c3ed46b501fb91e6022ced.gif)
单元状态(Cell State)
现在我们应该有足够的信息来计算单元状态。首先,单元状态逐点乘以遗忘向量。如果将其乘以接近0的值,则有可能丢弃单元状态中的值。然后,我们从输入门获得输出,并进行逐点加法,将单元状态更新为神经网络发现相关的新值。这为我们提供了新的单元状态。
![24e50bac5a33bef7609343fe8440d671.png](https://i-blog.csdnimg.cn/blog_migrate/1dbc46bf32e561b52e9ba6c355cc6017.png)
输出门(Output Gate)
最后,我们有输出门。输出门决定下一个隐藏状态应该是什么。请记住,隐藏状态包含有关先前输入的信息。隐藏状态也用于预测。
首先,我们将先前的隐藏状态和当前输入传递到Sigmoid函数中。然后,我们将新修改的单元状态传递给tanh函数。我们将tanh输出与Sigmoid输出相乘,以确定隐藏状态应携带哪些信息。输出为新的隐藏状态。然后将新的单元状态和新的隐藏状态转移到下一个时间步骤。
![44dcf7a95feb98d64f5ff25349195720.gif](https://i-blog.csdnimg.cn/blog_migrate/bb87e9731569b1ccffe9d7a74ea6be5c.gif)
简单总结下,遗忘门保留了先前步骤相关的内容,输入门决定从当前步骤开始要添加哪些信息,输出门确定下一个隐藏状态应该是什么。
代码演示
对于那些倾向于通过阅读代码理解的人,这里有一个使用python伪代码的示例。
![ee8fad588031c5941a09154dec85d64d.png](https://i-blog.csdnimg.cn/blog_migrate/9da0310efbb0e7e8a723b92f5fa433c9.jpeg)
- 首先,将先前的隐藏状态和当前输入连接在一起。我们将其称为合并。
- 将获取的信息合并到忘记层。该层删除无关数据。
- 使用合并创建候选层。候选层中包含有可能添加到单元状态的值。
- 将合并后的内容也输入到输入层中。该层决定应将来自候选层的哪些数据添加到新的单元状态。
- 在计算了遗忘层,候选层和输入层之后,使用这些向量和先前的单元状态来计算单元状态。
- 计算输出。
- 将输出与新的单元状态逐点相乘,可以得到新的隐藏状态。
这就是LSTM的内部机制了!LSTM网络的控制流程包括一些张量操作(tensor operations)和一个for循环(a for loop)。我们可以将隐藏状态用于预测。结合所有这些机制,LSTM可以选择在序列处理过程中要记住或忘记哪些信息。
GRU
现在,我们了解了LSTM的工作原理,下面简要介绍一下GRU。GRU是新一代的循环神经网络,与LSTM非常相似。GRU摆脱了单元状态,并使用隐藏状态来传输信息。另外,它只有两个闸门,一个复位门和一个更新门。
![a58b58f53a6e58e40e081c2de4e0e41c.png](https://i-blog.csdnimg.cn/blog_migrate/0f7c37a761cabf050cfa020885185c92.jpeg)
更新门(Update Gate)
更新门的作用类似于LSTM的遗忘门和输入门,它决定丢弃哪些信息以及添加哪些新信息。
复位门(Reset Gate)
复位门是另一个门,用于确定要忘记多少过去的信息。
关于GRU就介绍这么多了。与LSTM相比,GRU的张量运算较少;因此,它们的训练速度更快。 但并没有哪个模型更好。实际中通常根据应用场景进行相应选择。
总结
综上所述,RNN可以很好地处理序列数据以进行预测,但会遭受短期记忆的困扰。LSTM和GRU通过创建闸门机制来减轻短期记忆带来的影响。其中,闸门是可调节流经序列信息流的神经网络。LSTM和GRU用于最先进的深度学习应用程序中,例如语音识别,语音合成,自然语言理解等。