分享

学习 |长短时记忆网络LSTM概述

 汉无为 2018-01-23

“长期依赖”问题

RNN最主要的问题就是“长期依赖”问题,也就是 RNN 很容易接受和处理最近的上下文信息,比如:

“天气预报说明天早上要下大雨,出门一定要记得带_____。”

像这样的短期信息,由于相关信息“下大雨”和要填的词之间的距离比较短, RNN 就可以很容易地学会利用过去的信息,预测出来_____里面应该填“雨伞”。

可是当有些时候当相关的信息距离需要预测的位置_____比较远时,比如:

“我出生在中国,但是后来随父母移民到了美国,我......(省略200个字),因此我能讲一口流利的____。”

现在再用 RNN 来预测____里面的词时就存在一定困难,依靠最近的信息很难预测出下一个词是什么,我们可能知道大致是一门语言,因为它依赖的不是短期信息而是长期信息

模型结构上看,RNN 完全能够处理这样的“长期依赖”问题,因为 RNN 每个神经元都接受了上一个神经元的信息,理论上讲,即使信息距离这个神经元很远很远也能够传递下来,这样理解确实没错,理论上讲人们可以通过仔细挑选 RNN 的参数,来解决这种问题,但在实践中,我们发现即使这样 RNN 似乎也不能处理好这些问题,因为随着信息的传递总会有一些信息慢慢地被忽略掉。怎么处理,应该很容易想到,既然信息沿着神经元一个一个往下传容易出现信息丢失的情况,那可不可以找一个处理单元,专门用来保存过去的信息,有用的时候就直接把它取出来,不用的时候就丢弃,需要修改的时候就修改,答案是当然可以,而且 LSTM 就是这么干的。

LSTM网络的概念

长短时记忆网络 LSTM(Long Short Term Memory Network, LSTM)。LSTM 是一种特殊的循环神经网络,具有能够处理长期信息的能力,解决'长期依赖'的问题,比如在文本处理中能够利用很宽范围的上下文信息来判断下一个词的概率。LSTM 在各种各样的问题中都取得了极好的效果,现在正在被更广泛地使用。

LSTM能记住很长时间的信息,实际上是 LSTM 的默认行为,而不是需要努力学习的东西。换句话说,这能力是与生俱来的,前面我们就已经说了 LSTM 直接把过去的信息单独找了一个处理单元给存储起来了,只要决定是保留、去除还是更新即可,根本不需要学习。

既然LSTM 是 RNN 的变种,那么它同样是由神经网络的重复复块组成的链式结构。对于标准的RNN,这种重复模块有一个非常简单的结构,比如一个单一的tanh(双曲正切)层

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

标准RNN结构

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

标准RNN结构

看着下面这个图比上面那个图高大上一点,其实表达的是同一个意思,只不过多了一些细节,把隐含层的激活函数加上了而已。LSTM 和这个很像,只不过在重复模块里多了几个处理单元而已,也就是把我们最初说得保留过去信息的那个功能加上罢了。

看上去比较复杂,其实理解起来很简单,都看到这里了大家沉住气,马上你就能掌握传说中的 LSTM 了 ,懂了就可以尝试用 LSTM 去挑战一下传统的时间序列模型 ARIMA 这些了,也可以建立一个模型来预测股票走势之类的,废话不多说,且听作者对 LSTM 网络结构娓娓道来。

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

LSTM网络结构

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

从图中我们很容易看出 RNNLSTM 的区别,RNN 重复模块中只包括 1 个处理单元,也就是 1 个 tanh 层LSTM也是这样的链式结构,但重复模块却具有和一般RNN不同的结构,具有 4 个交互层,用一种特殊的方式进行交互。

在讲具体怎么交互之前我们先看一下图中的每个符号的意思。每个箭头有一个完整的向量,表示信息流动,从一个输出节点到另外的输入节点。粉红圆圈代逐点操作,比如向量相加或者相乘。而神经网络层黄色的框,框里面具体的操作稍后详细展开。箭头的合并表示串联,即把信息合并到一起,而线分叉表示将其内容复制一份分别到其他地方。

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

LSTM中的符号

LSTM的核心理念

LSTM 的核心理念我们在上面也简单提到过,就是找一个能够单独存储长时间信息的单元状态,这个单元状态就是图中顶部穿过所有重复模块的水平箭头

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

长时间信息按一个方向传递

单元状态,也就是最上面那根线,就像一个传送带,它通过整个链往下运行,只有一些小的线性相互作用信息会很容易地沿着箭头方向流动。

正如前面所说,LSTM 完全可以删除或添加单元状态的的信息,被称为门限( gates)的结构将会控制信息。门限可以有选择地让信息通过,它由 Sigmoid 神经络层点乘操作组成。

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

门限

Sigmoid (σ)层输出 0 和 1 之间的向量,描述每个组件能通过多少信息。0 值表示“不让任何东西通过”,而 1 值的意思是“让所有的信息都通过”。

一个LSTM有 3 种这样的门限,也就是大家在图中看到的 3 个 Sigmoid 层来保护和控制单元的状态

LSTM 的分布执行

  • 第一步:遗忘门限

第一步,决定从单元状态(最上面那根线)扔掉哪些信息。一个叫“遗忘门限”的 Sigmoid 层负责做出这些决定。在单元状态 C_t-1 上,上一时刻传递来的信息 h_t-1这一时刻的信息 x_t合并后经过 Sigmoid 函数输出0 和 1 之间的一个向量。同样,1 代表“完全保留信息”,0代表 “完全丢掉信息”

在实际的语言模型中,当我们试着基于以前的信息预测下一个词语时。在这样的问题中,单元状态可能包括性别的话题,这样模型就能正确使用代词,比如他者她。当我们看到一个新的话题想要忘记旧话题中有关性别的内容时,就可以使用“遗忘门限”

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

遗忘门限

  • 第二步:输入新信息

第二步,我们要决定在单元状态中储存哪些新的信息。这一步分为两个部分组成,首先,一个被称为“输入门限”的 Sigmoid 层决定哪些值会更新。接着,一个tanh 层创建新的候选值向量 ~C_t~C_t 表示这个重复模块所产生的信息,它是一个可添加的状态,之后会决定要不要加到单元状态 C_t-1 中

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

输入门限

  • 第三步:更新单元状态

第三步,结合第一步和第二步创建一个更新的单元状态。比如,在语言模型的例子中,我们想添加有兴趣爱好的新话题,以取代有关性别的话题时,就需要使用“遗忘门限”去除旧的信息'输入门限'用来添加新的信息更新最上面的单元状态从 C_t-1 到 C_t,即旧状态乘以 f_t 表示丢弃我们之前决定忘记的东西,然后,加上新状态乘以 i_t 表示加上新的信息

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

更新单元状态

  • 第四步:重复模块的输出

最后,前面只讲了单元状态的更新部分,别忘了还有一件重要的事,那就是决定要输出什么。先看一下输出由那些信息决定前一个重复模块的输出 h_t-1本重复模块的输入 x_t,以及更新后的单元状态 C_t

首先,前一个重复模块的输出 h_t-1 和 本重复模块的输入 x_t 合并后输入到 Sigmoid 函数中,得到 0 和 1 之间的一个向量,用来决定我们要输出哪些单元状态

然后,我们把单元状态通过 tanh 函数tanh 函数的作用:将输出值规一化于-1到1之间)和 Sigmoid 门限的输出相乘,以便只输出我们决定输出的部分。

比如在语言模型的例子中,当话题由性别主题转移到兴趣爱好主题时,我们可以根据前面的性别信息确定他是男生还是女生一旦性别确定下来后,我们就选择忘记这个信息去记住新的主题信息——“兴趣爱好”,这样的处理对于后面的预测就会很有用,比如前面是男生的话,兴趣就很有可能是“打篮球”,如果前面是女生的话,兴趣就很有可能是“打羽毛球”,这样模型就可以记住长期的信息,并将其用在之后的预测中

神经网络与深度学习概述 第九章 长短时记忆网络LSTM概述

重复模块的输出

LSTM 概述大致就是这么多内容,这里讲得是标准的 LSTM,当然 LSTM 还有很多变体,这里就不详细展开了,如果大家有什么问题,欢迎大家留言讨论。

以下是参考文献以及图片来源,在此致谢。

Reference

colah’ blog 《Understanding LSTM Networks》

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多