【神经网络】图解LSTM和GRU

图解LSTM和GRU

1.问题

循环神经网络(RNN,Recurrent Neural Network)受到短期记忆的影响。如果一个序列足够长,就很难将早期产生的信息带到后续的步骤中来。因此,如果试图处理一段文字来做预测,RNN可能会从一开始就遗漏了重要信息。

在反向传播过程中,循环神经网络会受到梯度消失问题的影响。梯度是用于更新神经网络权重的数值。梯度消失问题是指当梯度通过时间反向传播时,梯度会缩小。如果一个梯度值变得非常小,它就不会有太多的学习贡献。
【神经网络】图解LSTM和GRU_第1张图片
因此,在循环神经网络中,获得小梯度更新的层会停止学习。这些通常是早期的层。因此,在较长序列中,RNN会忘记这些不学习的层,就像有一个短期记忆。

2.解决方法

LSTM(Long Short-Term Memory)和GRU(Gated Recurrent Unit)的诞生是为了解决短期记忆问题。它们利用具有内部机制的门控来调节信息的流动。
【神经网络】图解LSTM和GRU_第2张图片
这些门控可以学习序列中哪些数据是重要的,再决定保留或舍弃。这样就可以将相关信息沿着长长的序列链路传递下去,以进行预测。几乎所有基于循环神经网络的先进成果都是基于这两个网络实现的。LSTM和GRU在语音识别、语音合成和文本生成有着广泛的应用。

3.实例

举一个通俗的例子。假设你正在看网上的评论,决定是否想买一件衣服。你首先阅读评论,然后确定是否有人认为它是好还是坏。

当你阅读评论时,你的大脑下意识地只记住了重要的关键词。你会对像“惊人” 和“完美”这样的词印象深刻。你对“这个”、“给了”、“所有”、“应该”等词不太在意。如果第二天有朋友问你评论说了什么,你可能不会一字不落地记住。但你可能会记得主要内容,如“一定会再次购买”,其他的词则会从记忆中消失了。

这基本上就是LSTM或GRU的作用。它可以学习只保留相关信息来进行预测,而忘记不相关的数据。在这种情况下,你记住的那些话让你判断它是好的。

4.循环神经网络

为了理解LSTM或GRU是如何实现的,我们一起回顾一下循环神经网络。首先,单词被转化为机器可读的向量。然后,RNN逐一处理向量序列。
【神经网络】图解LSTM和GRU_第3张图片
在处理过程中,它将之前的隐藏状态传递给序列的下一步。隐藏状态充当了神经网络的存储器。它保存着网络以前看到的数据信息。
【神经网络】图解LSTM和GRU_第4张图片
让我们看一下RNN的一个单元,看看如何计算隐藏状态。首先,输入和先前的隐藏状态被组合成一个向量。该向量现在有关于当前输入和先前输入的信息。该向量经过tanh激活,输出是新的隐藏状态,或者说是网络的记忆。
【神经网络】图解LSTM和GRU_第5张图片

Tanh激活函数

tanh激活函数被用来帮助调节流经网络的数值,使其总是在-1和1之间。
【神经网络】图解LSTM和GRU_第6张图片
当向量在神经网络中流动时,由于各种数学运算,它经历了许多转换。因此,想象一下一个连续被乘以的数值,比方说3。你可以看到一些数值如何快速增大并成为天文数字,导致其他数值看起来无足轻重。
【神经网络】图解LSTM和GRU_第7张图片所以这就是一个RNN。它的内部操作非常少,但在适当的情况下(如短序列)工作得非常好。RNN使用的计算资源比它的进化变体,如LSTM和GRU少得多。

5.LSTM

LSTM的控制流程与循环神经网络相似。它在向前传播时处理数据并传递信息。不同之处在于LSTM单元内的操作。这些操作是用来让LSTM记住还是忘记信息。
【神经网络】图解LSTM和GRU_第8张图片

核心概念

LSTM的核心概念是单元状态,以及它的各种门。单元状态就像一条运输公路,将相对的信息一直传递到序列链中。你可以把它看作是网络的“存储器”。从理论上讲,单元状态可以在整个序列的处理过程中携带相关信息。因此,即使是较早的时间步骤的信息也可以进入以后的时间步骤,减少短期记忆的影响。在单元状态的旅程中,信息通过门被添加或删除到单元状态中。这些门是不同的神经网络,决定哪些信息可以在单元状态中留下。在训练过程中,门可以学习哪些信息是需要保留或遗忘的。

Sigmoid函数

门控包含sigmoid激活函数。Sigmoid激活类似于tanh激活。这对更新或遗忘数据很有帮助,因为任何数字乘以0都是0,导致数值消失或被遗忘。任何数字乘以1都是相同的值,因此该值保持不变或被保留。网络可以了解哪些数据不重要,因此可以被遗忘,或者哪些数据是重要的,可以保留。
【神经网络】图解LSTM和GRU_第9张图片
所以我们有三个不同的门来调节LSTM单元中的信息流。一个遗忘门,一个输入门,一个输出门。

遗忘门

首先,我们有一个遗忘门。这个门决定哪些信息应该被丢弃或保留。来自前一个隐藏状态的信息和来自当前输入的信息被传递到sigmoid函数中。数值在0和1之间。越接近0意味着遗忘,越接近1意味着保留。
【神经网络】图解LSTM和GRU_第10张图片

输入门

为了更新单元的状态,我们有一个输入门。首先,我们将之前的隐藏状态和当前的输入传给一个sigmoid函数。这决定了哪些值将被更新,将这些值转换为0和1之间。0表示不重要,1表示重要。还要将隐藏状态和当前输入传入tanh函数,以转化为-1和1之间的值,帮助调节网络。然后将tanh输出与sigmoid输出相乘。sigmoid输出将决定哪些信息是重要的,可以从tanh输出中保留。
【神经网络】图解LSTM和GRU_第11张图片

单元状态

现在我们有足够的信息来计算单元的状态。首先,单元状态和遗忘向量点乘。如果被乘以接近0的值,就有可能在单元状态中丢掉数值。然后我们从输入门的输出做一个点加法,将细胞状态更新为神经网络认为相关的新值。这样我们就得到了新的单元格状态。
【神经网络】图解LSTM和GRU_第12张图片

输出门

最后我们有一个输出门。输出门决定下一个隐藏状态应该是什么。隐藏状态包含了以前输入的信息。隐藏状态也用于预测。首先,我们将之前的隐藏状态和当前的输入传给一个sigmoid函数。然后我们把新修改的单元格状态传给tanh函数。我们将tanh输出与sigmoid输出相乘,以决定隐藏状态应该携带什么信息。输出就是隐藏状态。新的单元格状态和新的隐藏状态被带到下一个时间步骤中。
【神经网络】图解LSTM和GRU_第13张图片
总结:遗忘门决定从以前的步骤中保留什么相关信息。输入门决定从当前步骤中添加什么相关信息。输出门决定了下一个隐藏状态应该是什么。

伪代码实现

这里有一个使用python伪代码的例子。

  1. 首先,之前的隐藏状态和当前的输入被串联起来。我们称它为联合。
  2. 合并后的数据被送入遗忘层。这个层会删除不相关的数据。
  3. 使用联合创建一个候选层。候选层持有可能的值以添加到单元格状态中。
  4. 组合也被送入输入层。该层决定候选人中的哪些数据应该被添加到新的单元格状态中。
  5. 在计算完遗忘层、候选层和输入层后,使用这些向量和之前的细胞状态来计算细胞状态。
  6. 然后计算出输出。
  7. 将输出和新的单元格状态相乘,就得到了新的隐藏状态。

【神经网络】图解LSTM和GRU_第14张图片
LSTM网络的控制流程是一些张量操作和一个for循环。你可以使用隐藏状态进行预测。结合所有的这些机制,一个LSTM可以在序列处理过程中选择哪些信息是相关的,以记住或忘记。

6.GRU

我们已经知道了LSTM的工作原理,让我们简单地看看GRU。GRU是较新的一代循环神经网络,与LSTM非常相似。GRU摆脱了单元状态,使用隐藏状态来传递信息。它也只有两个门,一个复位门和更新门。
【神经网络】图解LSTM和GRU_第15张图片

更新门

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

重置门

重置门用于决定遗忘多少过去的信息。

7.总结

GRU的张量运算较少。因此,它比LSTM的训练速度快一些。但是,没有一个标准来确定哪一个更好。研究人员和工程师通常会同时尝试这两种方法,以确定哪种方法更适合实际情况。

你可能感兴趣的:(神经网络,深度学习,神经网络,深度学习,人工智能)