lstm_lstm神经网络 - CSDN
lstm 订阅
长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层。 展开全文
长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层。
信息
外文名
Long-Short Term Memory
缩    写
LSTM
中文名
长短期记忆网络
长短期记忆人工神经网络简介
长短期记忆网络(Long-Short Term Memory,LSTM)论文首次发表于1997年。由于独特的设计结构,LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。LSTM的表现通常比时间递归神经网络及隐马尔科夫模型(HMM)更好,比如用在不分段连续手写识别上。2009年,用LSTM构建的人工神经网络模型赢得过ICDAR手写识别比赛冠军。LSTM还普遍用于自主语音识别,2013年运用TIMIT自然演讲数据库达成17.7%错误率的纪录。作为非线性模型,LSTM可作为复杂的非线性单元用于构造更大型深度神经网络。 [1] 
收起全文
精华内容
参与话题
  • 课程讲解深度学习中RNN与LSTM网络结构特点,实例演示如何使用Tensorflow构造网络模型。并且讲解了如何基于唐诗数据集去建立LSTM模型进行序列预测。代码示例演示如何使用Tensorflow从零开始训练唐诗生成网络模型。 ...
  • LSTM这一篇就够了

    千次阅读 多人点赞 2019-09-16 15:14:33
    ▌短时记忆 NN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。 因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。...

    640?wx_fmt=gif

    转自AI大本营https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/82922386

    短时记忆

    NN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。 因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。

    在反向传播期间,RNN 会面临梯度消失的问题。 梯度是用于更新神经网络的权重值,消失的梯度问题是当梯度随着时间的推移传播时梯度下降,如果梯度值变得非常小,就不会继续学习。
    640?wx_fmt=png

                                                                                        梯度更新规则

    因此,在递归神经网络中,获得小梯度更新的层会停止学习—— 那些通常是较早的层。 由于这些层不学习,RNN 可以忘记它在较长序列中看到的内容,因此具有短时记忆。

    作为解决方案的 LSTM 和 GRU

    LSTM 和 GRU 是解决短时记忆问题的解决方案,它们具有称为“门”的内部机制,可以调节信息流。

    640?wx_fmt=png

    这些“门”可以知道序列中哪些重要的数据是需要保留,而哪些是要删除的。 随后,它可以沿着长链序列传递相关信息以进行预测,几乎所有基于递归神经网络的技术成果都是通过这两个网络实现的。

    LSTM 和 GRU 可以在语音识别、语音合成和文本生成中找到,你甚至可以用它们为视频生成字幕。对 LSTM 和 GRU 擅长处理长序列的原因,到这篇文章结束时你应该会有充分了解。 

    下面我将通过直观解释和插图进行阐述,并避免尽可能多的数学运算。

    RNN 述评

    为了了解 LSTM 或 GRU 如何实现这一点,让我们回顾一下递归神经网络。 RNN 的工作原理如下;第一个词被转换成了机器可读的向量,然后 RNN 逐个处理向量序列。

    640?wx_fmt=gif

    处理时,RNN 将先前隐藏状态传递给序列的下一步。 而隐藏状态充当了神经网络记忆,它包含相关网络之前所见过的数据的信息。

    640?wx_fmt=gif

    让我们看看 RNN 的一个细胞,了解一下它如何计算隐藏状态。 首先,将输入和先前隐藏状态组合成向量, 该向量包含当前输入和先前输入的信息。 向量经过激活函数 tanh之后,输出的是新的隐藏状态或网络记忆。

    640?wx_fmt=gif

     

    激活函数 Tanh

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

    640?wx_fmt=gif

     

    当向量流经神经网络时,由于有各种数学运算的缘故,它经历了许多变换。 因此想象让一个值继续乘以 3,你可以想到一些值是如何变成天文数字的,这让其他值看起来微不足道。

    640?wx_fmt=gif

     

                                                                                          没有 tanh 函数的向量转换

    tanh 函数确保值保持在 -1~1 之间,从而调节了神经网络的输出。 你可以看到上面的相同值是如何保持在 tanh 函数所允许的边界之间的。

    640?wx_fmt=gif

                                                                                        有 tanh 函数的向量转换

    这是一个 RNN。 它内部的操作很少,但在适当的情形下(如短序列)运作的很好。 RNN 使用的计算资源比它的演化变体 LSTM 和 GRU 要少得多。

     

    LSTM

    LSTM 的控制流程与 RNN 相似,它们都是在前向传播的过程中处理流经细胞的数据,不同之处在于 LSTM 中细胞的结构和运算有所变化

    640?wx_fmt=png

     

    这一系列运算操作使得 LSTM具有能选择保存信息或遗忘信息的功能。咋一看这些运算操作时可能有点复杂,但没关系下面将带你一步步了解这些运算操作。

    核心概念

    LSTM 的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。

    因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现,“门”结构在训练过程中会去学习该保存或遗忘哪些信息。
     

    Sigmoid

    门结构中包含着 sigmoid 激活函数。Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到 0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息,因为任何数乘以 0 都得 0,这部分信息就会剔除掉。同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来。这样网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。
    640?wx_fmt=gif

    接下来了解一下门结构的功能。LSTM 有三种类型的门结构:遗忘门、输入门和输出门。

    遗忘门

     

    遗忘门的功能是决定应丢弃或保留哪些信息。来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。

    640?wx_fmt=gif

    输入门

    输入门用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。

    其次还要将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的。
    640?wx_fmt=gif

     

    细胞状态

    下一步,就是计算细胞状态。首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。

    640?wx_fmt=gif

     

    输出门

    输出门用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。

    最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。


    640?wx_fmt=gif

    让我们再梳理一下。遗忘门确定前一个步长中哪些相关的信息需要被保留;输入门确定当前输入中哪些信息是重要的,需要被添加的;输出门确定下一个隐藏状态应该是什么。

    GRU

    知道了 LSTM 的工作原理之后,来了解一下 GRU。GRU 是新一代的循环神经网络,与 LSTM 非常相似。与 LSTM 相比,GRU 去除掉了细胞状态,使用隐藏状态来进行信息的传递。它只包含两个门:更新门和重置门。

    640?wx_fmt=png

     

    更新门

    更新门的作用类似于 LSTM 中的遗忘门和输入门。它决定了要忘记哪些信息以及哪些新信息需要被添加。

    重置门

    重置门用于决定遗忘先前信息的程度。

    这就是 GRU。GRU 的张量运算较少,因此它比 LSTM 的训练更快一下。很难去判定这两者到底谁更好,研究人员通常会两者都试一下,然后选择最合适的。
     

    展开全文
  • 什么是LSTM算法?

    万次阅读 2019-01-16 14:51:34
    经常接触LSTM,GRU,RNN这些模型,对于LSTM的印象只是知道它用来解决梯度消失梯度爆炸问题,对于长距离的句子的学习效果不好的问题,而且大概知道里面是加了一些参数,加了门单元来选择忘记和记住一些信息。...

    个人认为下面这篇博文非常适合初学或者学的很浅的朋友。
    转自http://www.jianshu.com/p/9dc9f41f0b29

    经常接触LSTM,GRU,RNN这些模型,对于LSTM的印象只是知道它用来解决梯度消失梯度爆炸问题,对于长距离的句子的学习效果不好的问题,而且大概知道里面是加了一些参数,加了门单元来选择忘记和记住一些信息。但是具体公式没有推过,所以理解的不够深。

    但是上面这篇长博文,作者真心花了很多心血来创作,写的详细,易懂,对于学习lstm有很大的帮助。

    读完后我觉得要理解几个门的作用,文中作者提到的三个例子恰到好处。个人认为这三个例子是弄明白lstm的关键。

    忘记门:
    作用对象:细胞状态
    作用:将细胞状态中的信息选择性的遗忘
    让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的类别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
    例如,他今天有事,所以我。。。当处理到‘’我‘’的时候选择性的忘记前面的’他’,或者说减小这个词对后面词的作用。

    输入层门:
    作用对象:细胞状态
    作用:将新的信息选择性的记录到细胞状态中
    在我们语言模型的例子中,我们希望增加新的主语的类别到细胞状态中,来替代旧的需要忘记的主语。
    例如:他今天有事,所以我。。。。当处理到‘’我‘’这个词的时候,就会把主语我更新到细胞中去。

    输出层门:
    作用对象:隐层ht
    在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。
    例如:上面的例子,当处理到‘’我‘’这个词的时候,可以预测下一个词,是动词的可能性较大,而且是第一人称。
    会把前面的信息保存到隐层中去。

    Gated Recurrent Unit (GRU)就是lstm的一个变态,这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。

    以上的观点纯属个人通过学习这篇博文后的一些理解,有错误的地方请大家见谅。


    [译] 理解 LSTM 网络

    本文译自 Christopher Olah 的博文

    Recurrent Neural Networks

    人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。
    传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题——使用电影中先前的事件推断后续的事件。
    RNN 解决了这个问题。RNN 是包含循环的网络,允许信息的持久化。


    RNN 包含循环

    在上面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。
    这些循环使得 RNN 看起来非常神秘。然而,如果你仔细想想,这样也不比一个正常的神经网络难于理解。RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:


    展开的 RNN


    链式的特征揭示了 RNN 本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。
    并且 RNN 也已经被人们应用了!在过去几年中,应用 RNN 在语音识别,语言建模,翻译,图片描述等问题上已经取得一定成功,并且这个列表还在增长。我建议大家参考 Andrej Karpathy 的博客文章——The Unreasonable Effectiveness of Recurrent Neural Networks 来看看更丰富有趣的 RNN 的成功应用。
    而这些成功应用的关键之处就是 LSTM 的使用,这是一种特别的 RNN,比标准的 RNN 在很多的任务上都表现得更好。几乎所有的令人振奋的关于 RNN 的结果都是通过 LSTM 达到的。这篇博文也会就 LSTM 进行展开。

    长期依赖(Long-Term Dependencies)问题

    RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。如果 RNN 可以做到这个,他们就变得非常有用。但是真的可以么?答案是,还有很多依赖因素。
    有时候,我们仅仅需要知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测 “the clouds are in the sky” 最后的词,我们并不需要任何其他的上下文 —— 因此下一个词很显然就应该是 sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。


    不太长的相关信息和位置间隔

    但是同样会有一些更加复杂的场景。假设我们试着去预测“I grew up in France... I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。
    不幸的是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。


    相当长的相关信息和位置间隔

    在理论上,RNN 绝对可以处理这样的 长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。Bengio, et al. (1994)等人对该问题进行了深入的研究,他们发现一些使训练 RNN 变得非常困难的相当根本的原因。
    然而,幸运的是,LSTM 并没有这个问题!

    LSTM 网络

    Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。
    LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!
    所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。


    标准 RNN 中的重复模块包含单一的层


    LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。


    LSTM 中的重复模块包含四个交互的层


    不必担心这里的细节。我们会一步一步地剖析 LSTM 解析图。现在,我们先来熟悉一下图中使用的各种元素的图标。


    LSTM 中的图标


    在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

    LSTM 的核心思想

    LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。
    细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。


    Paste_Image.png

    LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。


    Paste_Image.png


    Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!

    LSTM 拥有三个门,来保护和控制细胞状态。

    逐步理解 LSTM

    在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取 h_{t-1}x_t,输出一个在 0 到 1 之间的数值给每个在细胞状态 C_{t-1} 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
    让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语


    决定丢弃信息


    下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,\tilde{C}_t,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。
    在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。


    确定更新的信息

    现在是更新旧细胞状态的时间了,C_{t-1} 更新为 C_t。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。
    我们把旧状态与 f_t 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 i_t * \tilde{C}_t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
    在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。


    更新细胞状态

    最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
    在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。


    输出信息

    LSTM 的变体

    我们到目前为止都还在介绍正常的 LSTM。但是不是所有的 LSTM 都长成一个样子的。实际上,几乎所有包含 LSTM 的论文都采用了微小的变体。差异非常小,但是也值得拿出来讲一下。
    其中一个流形的 LSTM 变体,就是由 Gers & Schmidhuber (2000) 提出的,增加了 “peephole connection”。是说,我们让 门层 也会接受细胞状态的输入。


    peephole 连接

    上面的图例中,我们增加了 peephole 到每个门上,但是许多论文会加入部分的 peephole 而非所有都加。

    另一个变体是通过使用 coupled 忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。


    coupled 忘记门和输入门


    另一个改动较大的变体是 Gated Recurrent Unit (GRU),这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。


    GRU


    这里只是部分流行的 LSTM 变体。当然还有很多其他的,如Yao, et al. (2015) 提出的 Depth Gated RNN。还有用一些完全不同的观点来解决长期依赖的问题,如Koutnik, et al. (2014) 提出的 Clockwork RNN。
    要问哪个变体是最好的?其中的差异性真的重要吗?Greff, et al. (2015) 给出了流行变体的比较,结论是他们基本上是一样的。Jozefowicz, et al. (2015) 则在超过 1 万种 RNN 架构上进行了测试,发现一些架构在某些任务上也取得了比 LSTM 更好的结果。


    Jozefowicz等人论文截图

    结论

    刚开始,我提到通过 RNN 得到重要的结果。本质上所有这些都可以使用 LSTM 完成。对于大多数任务确实展示了更好的性能!
    由于 LSTM 一般是通过一系列的方程表示的,使得 LSTM 有一点令人费解。然而本文中一步一步地解释让这种困惑消除了不少。
    LSTM 是我们在 RNN 中获得的重要成功。很自然地,我们也会考虑:哪里会有更加重大的突破呢?在研究人员间普遍的观点是:“Yes! 下一步已经有了——那就是注意力!” 这个想法是让 RNN 的每一步都从更加大的信息集中挑选信息。例如,如果你使用 RNN 来产生一个图片的描述,可能会选择图片的一个部分,根据这部分信息来产生输出的词。实际上,Xu, et al.(2015)已经这么做了——如果你希望深入探索注意力可能这就是一个有趣的起点!还有一些使用注意力的相当振奋人心的研究成果,看起来有更多的东西亟待探索……
    注意力也不是 RNN 研究领域中唯一的发展方向。例如,Kalchbrenner, et al. (2015) 提出的 Grid LSTM 看起来也是很有前途。使用生成模型的 RNN,诸如Gregor, et al. (2015) Chung, et al. (2015) Bayer & Osendorfer (2015) 提出的模型同样很有趣。在过去几年中,RNN 的研究已经相当的燃,而研究成果当然也会更加丰富!

    致谢

    I’m grateful to a number of people for helping me better understand LSTMs, commenting on the visualizations, and providing feedback on this post.
    I’m very grateful to my colleagues at Google for their helpful feedback, especially Oriol Vinyals,Greg Corrado, Jon Shlens, Luke Vilnis, and Ilya Sutskever. I’m also thankful to many other friends and colleagues for taking the time to help me, including Dario Amodei, and Jacob Steinhardt. I’m especially thankful to Kyunghyun Cho for extremely thoughtful correspondence about my diagrams.
    Before this post, I practiced explaining LSTMs during two seminar series I taught on neural networks. Thanks to everyone who participated in those for their patience with me, and for their feedback.




    原文地址:http://blog.csdn.net/u014422406/article/details/52806430

    http://www.jianshu.com/p/9dc9f41f0b29

    展开全文
  • LSTM 简介

    千次阅读 2017-08-27 14:34:02
    1.RNNRNN, Recurrent Neural Network, 循环神经网络. 图 1-1 循环神经网络可以将循环神经网络展开为普通神经网络来理解: 将其展开为多个同样网络的副本, 每个网络将信息传递给继任者. 图1-2 循环神经网络展开1.1...

    1. 简介

    LSTM, Long-Short Term Memory RNN. 长短期记忆模型循环神经网络.
    LSTM属于RNN, 是它的一种特殊实现.

    2. Long-Short Term Memory

    • short term memory
      对于当前的任务, 有时我们只需考虑最近的信息, 看下面的填空,

      " the clouds are in the __sky__"

      这是常识, 不需要更远的前文环境.
      图片名称
      图2-1 short term memory

    • long term memory
      再看一个填空的例子, 最后一句话中, 要填的很可能是一种语言, 但应该是哪种语言呢? 往前追溯到第一句话, 可由 France 推断出是 French.

    "I grew up in France. ... .I speak fluent __French__."

    这个例子中, 相关信息需要它的点 之间的距离很远.
    图片名称
    图2-2 long term

    RNN在short-term上表现不错, 但long-term就不理想了, 所以有人提出了LSTM.
    它被广泛地运用, 并在相当多的问题上表现得惊人的好!

    图片名称
    图2-3 含有4个交互层的 LSTM重复模型

    3. 组件

    这里写图片描述

    图片名称
    图3-1 LSTM网络及标注示意

    LSTM的关键是细胞状态 .

    • 顶部直线
      图片名称
      穿过图表上方的水平直线, 直接在整个链上运行,只有一些小的线性相互作用, 让信息在流动的同时保持不变性。

    • 阀门
      图片名称
      LSTM有能力向细胞状态中添加或移除信息, 这通过精细调整叫阀门的结构来实现.
      阀门可以让信息有选择地通过. 它们由一个S形网络层和一个逐点乘法操作组成.
      S形网络层输出[0,1]的一个数, 描述应该让每个组件通过多少信息. 0就是什么也不让通过, 1就是每个信息都可以通过.
      一个LSTM含有三个这样的阀门, 来保护和控制细胞状态.

    • 忘记阀门层
      图片名称
      用于决定从细胞状态中扔掉哪些信息, 这由一个叫做忘记阀门层的S形网络层实现.

    • 输入阀门层
      图片名称
      在丢掉一些信息之后, 下一步要决定把哪些信息存储在细胞状态中.由两部分组成.

      1. 决定要更新的值
      2. 创造新的候选值向量
    • 计算细胞状态
      图片名称
      将旧的细胞状态Ct1更新为新的状态Ct.

    • 输出阀门层
      图片名称
      首先, 我们会运行一个s网络层, 用于决定细胞状态的哪些部分会被输出. 然后将细胞状态作 tanh运算, 得到[-1,1]的值,

    参考

    1. colah’s blog, Understanding-LSTM
    2. 机器之心:LSTM入门必读:从入门基础到工作方式详解
    展开全文
  • LSTM原理详解

    万次阅读 多人点赞 2019-03-20 16:14:43
    LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。 长短时记忆网络的思路: 原始 RNN 的隐藏层只有一个状态,...

    LSTM

    长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。

    长短时记忆网络的思路:

    原始 RNN 的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。
    再增加一个状态,即c,让它来保存长期的状态,称为单元状态(cell state)。

    把上图按照时间维度展开:

    在 t 时刻,LSTM 的输入有三个:当前时刻网络的输入值 X_t、上一时刻 LSTM 的输出值 h_t-1、以及上一时刻的单元状态 C_t-1
    LSTM 的输出有两个:当前时刻 LSTM 输出值 h_t、和当前时刻的单元状态 C_t.

    关键问题是:怎样控制长期状态 c ?

    方法是:使用三个控制开关

    第一个开关,负责控制继续保存长期状态c;
    第二个开关,负责控制把即时状态输入到长期状态c;
    第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。

    如何在算法中实现这三个开关?

    方法:用 门(gate)

    定义:gate 实际上就是一层全连接层,输入是一个向量,输出是一个 0到1 之间的实数向量。

    公式为:

    也就是:

    gate 如何进行控制?

    方法:用门的输出向量按元素乘以我们需要控制的那个向量
    原理:门的输出是 0到1 之间的实数向量,当门输出为 0 时,任何向量与之相乘都会得到 0 向量,这就相当于什么都不能通过;
    输出为 1 时,任何向量与之相乘都不会有任何改变,这就相当于什么都可以通过。

    LSTM 的前向计算

    一共有 6 个公式

    遗忘门(forget gate)
    它决定了上一时刻的单元状态 c_t-1 有多少保留到当前时刻 c_t

    输入门(input gate)
    它决定了当前时刻网络的输入 x_t 有多少保存到单元状态 c_t

    输出门(output gate)
    控制单元状态 c_t 有多少输出到 LSTM 的当前输出值 h_t

    遗忘门的计算为:

    遗忘门的计算公式中:
    W_f 是遗忘门的权重矩阵,[h_t-1, x_t] 表示把两个向量连接成一个更长的向量,b_f是遗忘门的偏置项,σ 是 sigmoid 函数。

    输入门的计算:

    根据上一次的输出和本次输入来计算当前输入的单元状态:

    当前时刻的单元状态 c_t 的计算:由上一次的单元状态 c_t-1 按元素乘以遗忘门 f_t,再用当前输入的单元状态 c_t 按元素乘以输入门 i_t,再将两个积加和:这样,就可以把当前的记忆 c_t 和长期的记忆 c_t-1 组合在一起,形成了新的单元状态 c_t。由于遗忘门的控制,它可以保存很久很久之前的信息,由于输入门的控制,它又可以避免当前无关紧要的内容进入记忆。

    输出门的计算:

    关于它的 Tuning 有下面几个建议:

    LSTM的变种

    Cho介绍的门控循环单元(或GRU)

    多层LSTM

    LSTM的手写识别源码链接

    https://github.com/geroge-gao/deeplearning/tree/master/LSTM

    【参考】

    https://www.jianshu.com/p/dcec3f07d3b5

    https://www.cnblogs.com/wangduo/p/6773601.html?utm_source=itdadao&utm_medium=referral

    https://www.jianshu.com/p/4b4701beba92

    Stacked Long Short-Term Memory Networks

    【注】有关LSTM前向传播以及反向传播误差修正部分值得关注!

    展开全文
  • 如何理解LSTM的输入输出格式

    千次阅读 2020-06-06 21:33:15
    1. 定义LSTM结构 bilstm = nn.LSTM(input_size=10, hidden_size=20, num_layers=2, bidirectional=True) 定义一个两层双向的LSTM,input size为10,hidden size为20。 注:定义过LSTM的结构后,同一个程序下面的...
  • Lstm self.lstm = nn.LSTM(input_size=self.input_size, hidden_size=self.hidden_size, num_layers = self.num_layers, batch_first=True, bidirectional=False, drop
  • BiLSTM介绍及代码实现

    2020-02-12 13:48:13
    本文简要介绍了BiLSTM的基本原理,并以句子级情感分类任务为例介绍为什么需要使用LSTM或BiLSTM进行建模。在文章的最后,我们给出在PyTorch下BiLSTM的实现代码,供读者参考。 1.2 情感分类任务 自然语言处理中情感...
  • RNN,LSTM和BiLSTM详解

    2020-05-21 09:45:04
    LSTM和BiLSTM详解
  • LSTM原理及实现(一)

    万次阅读 多人点赞 2019-03-19 13:18:17
    LSTM原理及实现 RNN LSTM 实现 RNN基本原理 前言 当我们处理与事件发生的时间轴有关系的问题时,比如自然语言处理,文本处理,文字的上下文是有一定的关联性的;时间序列数据,如连续几天的天气状况,当日的天气情况...
  • LSTM特点及适用性

    万次阅读 2015-09-10 15:48:39
    这篇博客主要是我之后要做的一个关于LSTM的小报告的梗概,梳理了一下LSTM的特点和适用性问题。
  • 深度学习:长短期记忆模型LSTM

    万次阅读 多人点赞 2020-09-23 23:43:58
    lstm可以减少梯度消失:[RNN vs LSTM: Vanishing Gradients] LSTM模型 长短期记忆模型(long-short term memory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法...
  • LSTM

    千次阅读 2017-03-15 16:04:26
    Ideas behind LSTM: http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Implementation in Theano: http://deeplearning.net/tutorial/lstm.html
  • LSTM进阶:使用LSTM进行多维多步的时间序列预测

    万次阅读 多人点赞 2019-12-23 20:35:28
    各位朋友大家好,今天来讲一下LSTM时间序列的预测进阶。 现在我总结一下常用的LSTM时间序列预测: 1.单维单步(使用前两步预测后一步) 可以看到trainX的shape为 (5,2) trainY为(5,1) 在进行训练的过程中要将...
  • LSTM架构详解

    千次阅读 多人点赞 2019-08-26 10:45:00
    LSTM 是深度学习中很常见也很有用的一种算法,特别是在自然语言处理中更是经常用到,那么 LSTM 架构中的内部结构又是什么样子的呢?首先我们来看 LSTM 的整体框架: 在这幅图中,中间是一个 LSTM 模块,有三个输入...
  • 基于LSTM的股票预测模型_python实现_超详细

    万次阅读 多人点赞 2020-01-31 09:26:49
    文章目录一、背景二、主要技术介绍1、RNN模型2、LSTM模型3、控制门工作原理四、代码实现五、案例分析六、参数设置七、结论 一、背景 近年来,股票预测还处于一个很热门的阶段,因为股票市场的波动十分巨大,随时...
  • LSTM公式及理解

    万次阅读 多人点赞 2019-10-15 17:04:46
    LSTM的基本结构及推导 这部分内容基本都是来自Step-by-step to LSTM: 解析LSTM神经网络设计原理,只是添加了一些贫僧的想法。 从RNN、记忆说起 LSTM(Long Short Term Memory,长短期记忆,注意这里的长短期,...
  • 长短期记忆(Long Short Term Memory, LSTM)也是一种时间递归神经网络,最早由 Hochreiter & Schmidhuber 在1997年提出,设计初衷是希望能够解决RNN中的长期依赖问题,让记住长期信息成为神经网络的默...
  • 简单粗暴LSTMLSTM进行时间序列预测

    万次阅读 多人点赞 2019-11-06 14:53:51
    使用LSTM进行时间序列预测 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新...
  • Pytorch LSTM 时间序列预测

    千次阅读 2019-05-16 11:25:52
    Pytorch LSTM 时间序列预测 https://github.com/pytorch/examples/blob/master/time_sequence_prediction/generate_sine_wave.py Pytorch官网提供初学者入门的一个例子,有助于学习Pytorch时间序列预测。本例中...
1 2 3 4 5 ... 20
收藏数 57,012
精华内容 22,804
关键字:

lstm