lstm原文_步步为营:图解LSTM和GRU

776b42b18bbe745a18c4722cb33ef32c.png

本文翻译自michalphi的博客

原文链接:https://www.michaelphi.com/illustrated-guide-to-lstms-and-grus-a-step-by-step-explanation/

eed1ea53d05c0104d669489e4e3a5718.png

在本文中,我们将首先直观感受LSTM和GRU,然后再解释使LSTM和GRU表现出色的内部机制。

短期记忆的问题

循环神经网络(Recurrent Neural Networks,RNN)遭受短期记忆的困扰。如果一个序列足够长,则很难将信息从较早的步骤传递到较晚的步骤。因此,如果我们尝试处理一段文字以进行预测,则RNN可能会从一开始就遗漏重要信息。

在反向传播(back propagation)期间,循环神经网络遭受梯度消失的困扰。梯度是用于更新神经网络权重的值。梯度消失指梯度随着时间的流逝而缩小。如果梯度值变得非常小,那么它对学习的贡献就不会太大。

89f343200fd480b843f1f3e512487afb.png

因此,在循环神经网络中,获得较小梯度更新的层将停止学习。这些通常是较早的层。因此,由于这些层都不学习,因此RNN可以忘记较长时间序列中看到的内容,从而具有短期记忆。

解决方案::LSTM和GRU

长期短期记忆(Long Short-Term Memory,简称LSTM)和门控循环单位(Gated Recurrent Units ,GRU),是为了解决短期记忆的问题而诞生的。它们具有称为闸门(gates)的内部机制,而这些闸门可以控制信息流。

c99ea943cc458b3d3d9b4a73f37206db.png

这些闸门可以学习到序列中的哪些数据是要保留的,哪些数据是要舍弃的。通过这样做,它可以将相关信息沿序列的长链传递下来并进行预测。

几乎所有基于循环神经网络(RNN)的技术成果都是通过这两个网络(LSTM&GRU)实现的。LSTM和GRU可以应用在语音识别,语音合成和文本生成中。我们甚至可以使用它们为视频生成字幕。

直观感受

接下来我们将从一个思想实验开始,对LSTM进行直观感受。

假设我们正在查看某样商品的评论,以确定我们是否要购买该项商品。我们将首先阅读该评论,然后得到其他人对该商品的评价。

777324d9e87bfb8a66488fe116d1a2fb.png

当我们阅读上面的评论时,大脑的潜意识只会记住重要的关键词。我们可能会记住"amazing"和"perfectly balanced breakfast"之类的词,但会忽略"this"、"gave"、"all"和"should"之类的词。如果第二天一个朋友问我们昨天看的评论怎么说,我们无法逐词逐句地记起评论,但可能会记得像"will definitely be buying again"之类的关键词。

5174363afd8578b5f393dc785bcf1b99.png

上面我们了解了大脑的记忆或遗忘机制,而这也就是LSTM和GRU的机制。它们可以学习仅保留相关信息而忘记不相关的数据来进行预测。在上面的实验中,我们大脑记下的关键词使得我们对这样商品做出不错的评价。

RNN综述

为了更好地理解LSTM或GRU,让我们回顾一下循环神经网络(RNN)。

在上面的实验中, RNN的工作方式如下:首先,单词被转换为机器可读的向量。然后,RNN逐一处理向量序列。

0a77ba2ae408c056d68d0d1c73f581a0.png

在处理时,它将先前的隐藏状态(hidden state)传递到序列的下一个步骤。隐藏状态充当神经网络的内存。它包含有该神经网络之前接收数据的信息。

c76c597c36c533020d8cbd55520c12d7.png

让我们看一下RNN的一个单元,看看如何计算隐藏状态。首先,将输入状态和先前的隐藏状态合并以形成向量。现在,该向量具有有关当前输入和先前输入的信息。该向量经过tanh激活,输出为新的隐藏状态。

038e9a8fda00201d314c7b29a6a9ca9d.gif

Tanh激活

tanh激活用于帮助调节流经网络的值。tanh函数将值压缩为始终在-1和1之间。

76e89e5241f11e61dc58d4cad4d353d7.png

当向量流过神经网络时,由于各种数学运算,它会经历许多变换。因此,想象一个对输入值连续乘以3的RNN。您可以看到一些值如何爆炸并成为天文数字,从而导致其他值显得微不足道。

c717b3b38ae10ac88c1a7ac83a5e495f.png

tanh函数可确保值保持在-1和1之间,从而调节神经网络的输出。我们可以看到在相同输入的情况下,tanh函数如何输出。

8153bbc680b81a424616480a9f9aecb2.png

这就是RNN。它内部几乎没有操作,但是在适当的情况下(如短序列)可以很好地工作。与经过改进的LSTM和GRU变体相比,RNN所使用的计算资源要少得多。

LSTM

LSTM具有与RNN类似的控制流。向前传播时,它在处理处理数据的同时进行信息传递。LSTM与RNN的区别在于单元内的操作。

ee7287f0cae2aea83c3940e0900eec4b.png

这些操作帮助LSTM保留或忘记信息。乍一看这些操作可能会觉得很复杂,因此我们将逐步进行这些操作。

核心概念

LSTM的核心概念是单元状态(cell state)及其各种闸门(gates)。

单元状态充当信息传输的高速公路,一直沿着序列传递相关信息。我们可以将其视为神经网络的“内存”。理论上,单元状态可以在整个序列处理过程中携带相关信息。因此,即使来自较早时间的信息也可以使其传递到较晚的时间,从而减少了短期记忆的影响。

在单元状态传递信息的过程中,信息会通过闸门添加到单元状态或从单元状态删除。而闸门是不同的神经网络,它们决定保留那些有关单元状态的信息,而忘记那些无关信息。

Sigmoid激活

Sigmoid激活类似于tanh激活。但它不是将数据压缩至-1和1之间,而是压缩到0和1之间。这对更新或忘记数据很有帮助,因为任何乘以0的数字都是0,从而导致值消失或“被遗忘”。任何数字乘以1就是相同的值,因此该值保持不变或被“保留”。网络可以学习到哪些数据不重要并将其遗忘,也可以学习到哪些数据重要并进行保留。

5a3376e41154a43f24b9aea64db34daa.png

接下来我们将更深入地研究各个闸门的作用。在LSTM中,我们有三个不同的闸门来调节LSTM单元中的信息流。它们分别是遗忘门、输入门和输出门。

遗忘门(Forget gate)

首先,我们来看遗忘门。此门决定应该丢弃或保留哪些信息。来自先前隐藏状态的信息和来自当前输入的信息通过Sigmoid函数传递。输出值介于0到1之间,接近0表示忘记,接近1表示保留。

2e7716c47e8e0af95cd99e34ff0b0a01.png

输入门(Input Gate)

输入门用于更新单元状态。

首先,我们将先前的隐藏状态和当前输入传递到Sigmoid函数中。通过将值转换为介于0和1之间的值,我们可以决定来更新哪些值,0表示不重要,而1表示重要。我们还可以将隐藏状态和当前输入传递到tanh函数中,将其压缩为介于-1和1之间的值,以帮助调节网络。然后将tanh输出与Sigmoid输出相乘。Sigmoid输出将决定从tanh输出中保留哪些重要信息。

bc4bf88f3c901d19dff5b4fcd91867bb.gif

单元状态(Cell State)

现在我们应该有足够的信息来计算单元状态。首先,单元状态逐点乘以遗忘向量。如果将其乘以接近0的值,则有可能丢弃单元状态中的值。然后,我们从输入门获得输出,并进行逐点加法,将单元状态更新为神经网络发现相关的新值。这为我们提供了新的单元状态。

24e50bac5a33bef7609343fe8440d671.png

输出门(Output Gate)

最后,我们有输出门。输出门决定下一个隐藏状态应该是什么。请记住,隐藏状态包含有关先前输入的信息。隐藏状态也用于预测。

首先,我们将先前的隐藏状态和当前输入传递到Sigmoid函数中。然后,我们将新修改的单元状态传递给tanh函数。我们将tanh输出与Sigmoid输出相乘,以确定隐藏状态应携带哪些信息。输出为新的隐藏状态。然后将新的单元状态和新的隐藏状态转移到下一个时间步骤。

44dcf7a95feb98d64f5ff25349195720.gif

简单总结下,遗忘门保留了先前步骤相关的内容,输入门决定从当前步骤开始要添加哪些信息,输出门确定下一个隐藏状态应该是什么。

代码演示

对于那些倾向于通过阅读代码理解的人,这里有一个使用python伪代码的示例。

ee8fad588031c5941a09154dec85d64d.png
  1. 首先,将先前的隐藏状态和当前输入连接在一起。我们将其称为合并。
  2. 将获取的信息合并到忘记层。该层删除无关数据。
  3. 使用合并创建候选层。候选层中包含有可能添加到单元状态的值。
  4. 将合并后的内容也输入到输入层中。该层决定应将来自候选层的哪些数据添加到新的单元状态。
  5. 在计算了遗忘层,候选层和输入层之后,使用这些向量和先前的单元状态来计算单元状态。
  6. 计算输出。
  7. 将输出与新的单元状态逐点相乘,可以得到新的隐藏状态。

这就是LSTM的内部机制了!LSTM网络的控制流程包括一些张量操作(tensor operations)和一个for循环(a for loop)。我们可以将隐藏状态用于预测。结合所有这些机制,LSTM可以选择在序列处理过程中要记住或忘记哪些信息。

GRU

现在,我们了解了LSTM的工作原理,下面简要介绍一下GRU。GRU是新一代的循环神经网络,与LSTM非常相似。GRU摆脱了单元状态,并使用隐藏状态来传输信息。另外,它只有两个闸门,一个复位门和一个更新门。

a58b58f53a6e58e40e081c2de4e0e41c.png

更新门(Update Gate)

更新门的作用类似于LSTM的遗忘门和输入门,它决定丢弃哪些信息以及添加哪些新信息。

复位门(Reset Gate)

复位门是另一个门,用于确定要忘记多少过去的信息。

关于GRU就介绍这么多了。与LSTM相比,GRU的张量运算较少;因此,它们的训练速度更快。 但并没有哪个模型更好。实际中通常根据应用场景进行相应选择。

总结

综上所述,RNN可以很好地处理序列数据以进行预测,但会遭受短期记忆的困扰。LSTM和GRU通过创建闸门机制来减轻短期记忆带来的影响。其中,闸门是可调节流经序列信息流的神经网络。LSTM和GRU用于最先进的深度学习应用程序中,例如语音识别,语音合成,自然语言理解等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值