理解LSTM Networks

【deep learning】理解LSTM Networks

说明

本文总体上是根据Understanding LSTM Networks一文整理翻译过来,添加了一些自己的理解,因水平有限,难免有误,欢迎指出,阅读本文应当有相关最基础的神经网络知识,比如BP神经网络等。

本文目标

让完全没有概念又不想看公式的LSTM小白,可以和LSTM混个脸熟。
原文链接如下:Understanding LSTM Networks

从RNN出发

  • Recurrent Neural Networks一般翻译为 递归神经网络 ,简称RNN

RNN的直观理解

在介绍神经网络模型相关的算法时,一般都会考虑说一说相关生物学上的特点,以此做启发,来对算法进行设计,也是对算法合理性的一种支撑。RNN也不例外,所以,介绍RNN之前,首先说一说,人思考并不是每一秒都是从头开始思考的,可以想一想你读文章的时候,你对当前文字的理解是建立在你对之前的文字的理解之上的,而不是从头开始的,也就是说,思维是有保留,有记忆的,具有持久性
而传统的神经网络(比如BP神经网络)却不是这样的,那么,是否引进这种人的很常见的机制去设置神经网络,是不是会对一些实际问题提供更好的解决方案呢? 于是,RNN被设计出来了。
RNN带有loop的结构,因此使得网络中的信息得到持久保留。在下图中,神经模块A, 它输出为 ht ,输入为 xt

title

这个带有循环(loop)的RNN结构是不是感觉不太好理解呢?因为我们知道传统的BP类似这样的:

title

递归神经网络可以认为是同一个网络结构的多个副本组成,每一个副本将传递消息到下一个副本。那么,我们将这个结构展开如下:

title

这个链式性质表明,RNN和 序列和列表 密切相关,所以,RNN是一种适用于这类数据很自然的一种结构。
而事实上,它们确确实实被运用到这些上面了,在过去的几年里,RNNs有令人难以置信的成功,应用到各种各样的问题上:语音识别,语言建模,翻译,图片描述等。
这些成功的关键是使用LSTM网络,它是非常特殊的递归神经网络,许多任务上比标准的RNN来说更加胜任,取得了很好的结果。几乎所有基于递归神经网络实现令人兴奋的结果都是由LSTM取得的。接下来,本文将探讨LSTM

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

RNN 的关键点之一就是,可以用来连接先前的信息到当前的任务上,例如,基于过去的视频段来推测对当前段的理解。如果 RNN 可以做到这个,他们就变得非常有用。但是真的可以么?Yes,但是还有很多依赖因素。
例如,我们有一个语言模型用来基于先前的词来预测下一个词。一种情况是如果我们仅仅需要知道先前的信息来执行当前的任务,这里,我们试着预测下面文本的最后一个单词

“the clouds are in the sky

显然,在这里我们并不需要任何其他的上下文就可以推测出下一个词是 sky

title
在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。
但也有一些情况下,我们需要更多的上下文,同样我们还是试着预测文本的最后一个单词,文本如下:

“I grew up in France… I speak fluent French.”

根据最近的信息表明,下一个单词的名字可能是一种语言,但是如果我们想要缩小哪一种语言,我们需要在前面的法国的背景下,进一步回来预测得到是French。

title

这是我们发现,要进行有效的预测需要使用离当前位置很远的 France 信息,这样,相关信息和当前预测位置之间的间隔就肯定变得很大。而传统的RNN的缺点是,在这个间隔不断增大时,无法学习到连接如此远的信息。如上图所示,这时候如果输出 ht+1 需要距离它很远的最开始输入信息 x0 x1 ,就会出现长期依赖(Long-Term Dependencies)问题。

这时,将使用LSTM来解决这个问题。

LSTM Networks初探

长短期记忆人工神经网络(Long-Short Term Memory, LSTM)是一种时间递归神经网络(RNN),论文首次发表于1997年。LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。(from 维基百科)

如下图所示,一般的递归神经网络是一连串的重复模块链形式的神经网络。在标准RNNs的结构中,这些重复模块将只有一个非常简单的结构,如一个tanh 双曲正切层。

title

LSTMs也有这种类似的链状结构,但重复模块里面是不同的结构。里面不是一个单一的神经网络层,而是有 四个 ,它们之间按照一个非常特殊的方式进行联接的,如下图所示:

title

好了,看完之后,是不是有点眼花缭乱的感觉,这四扇门其实不可怕,那么接着一步一步去打开每一扇门吧,先从 符号的约定 开始。

符号的约定

本文使用的符号如下所示:

title

在上面的符号图中,每一条线传输着一个完整的矢量,从一个节点的输出到其他节点的输入。粉色圆圈代表逐点运算操作,比如向量加法。而黄色的盒子代表的是神经网络层。合并线表示的是信息联接在一起,而分支线表示其信息被复制和拷贝到其他不同的位置去。
接下来,举个例子,如下:

title

黄色的盒子代表的是sigmoid层,粉色圆圈代表逐点运算操作,中间含有乘法符号,显然这里代表逐点的乘法运算,所以这个结构总体上表示由sigmoid层和逐点的乘法运算组成的cell state中的一扇gate,也就是门。那么什么是cell state?这就是LSTMs背后的核心idea了。

LSTMs背后的核心理念

LSTMs的关键是cell state(元胞状态,细胞状态),穿过图的上方水平线运行,如下图所示,cell state(元胞状态)有点像传送带一样,它经过整个链条向下运行,只有一些小的线性相互作用,这样信息沿着它流动很容易保持不变。

title

LSTM通过一个叫做 gate 的结构来管理信息,可以使得其能够删除或添加信息到 cell state 中,(再次提示一下,注意看上图,记住cell state在图的上方水平线上运行)gate是选择性地让信息的通过,由sigmoid层和逐点的乘法运算组成,如下图所示:

title

sigmoid层输出0和1之间的数字,描述中有多少每个组件应该被允许通过。值0表示“没有通过“,而1表示”让一切都通过!”。(我们知道,在一般的神经网络模型里sigmoid函数常常作为激活函数)

补充:sigmoid and Tanh Function
title
sigmoid函数
f(z)=11+exp(z).
可以看出,这个单一“神经元”的输入-输出映射关系其实就是一个逻辑回归(logistic regression)。
tanh(z) 函数是sigmoid函数的一种变体,它的取值范围为 [1,1] ,而不是sigmoid函数的 [0,1]

LSTM有三个这样的gate(门),保持或者控制 cell state。

下面将为大家打开三重sigmoid门,之外还有一个是tanh。

解析LSTM

第一步 丢弃旧信息

我们LSTM的第一步是,决定哪些信息我们要从前一个cell state(元胞状态)扔掉的,也就是丢弃旧状态信息。这个是由一个 sigmoid层决定的,叫做“忘记门层”。

这里写图片描述

它对应的输入为 ht1 xt ,也就是上一层的输出 ht1 和本层的输入 xt ,如上图的公式,其输出是 ft
对cell state中的每个数字输出0和1之间的数字,1代表“完全保持这个”,而0代表“完全摆脱这个。”

在我们的语言模型试图预测的例子,根据所有之前的信息预测下一个单词。在这样的一个问题里,cell state可能包含当前词的词性,因此正确的代词可以被选择出来。当我们看到新的代词,我们希望忘记旧的代词。

第二步 存储新信息

下一步,决定我们将存储什么新的信息到cell state,用单词 cell 的第一个字母符号 Ct1 表示上一个状态的cell state,在这一步将被更新为新状态 Ct
这一补共包含两个部分。
上一层的输出 ht1 和本层的输入 xt 继续流动,流动到这里的第一个部分,sigmoid 层,这里称为 “输入门层”,决定我们将要更新的值。然后,一个 tanh 层 创建一个新的状态候选值向量 C~t ,它会被加入到cell state中。如下图所示:

title

在语言模型的例子中,我们希望增加新的代词的类别到细胞状态中,来替代旧的需要忘记的代词。

下一步,结合下图的公式和图示,我们会讲根据这两个信息来产生cell state状态的更新。如下所示:更新旧cell state,也就是公式里面 Ct1 更新为 Ct

title

我们把旧状态 Ct1 ft 相乘,丢弃掉我们确定需要丢弃的信息。(提示:还记得什么是 ft 吗?它来自“忘记门”)

接着加上 itC~t ,这就是新的状态候选值,根据我们确定的每一个state值更新程度的大小而变化。

在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的类别信息并添加新的信息的地方。

第三步 输出

最后一步,我们需要确定输出什么值,即输出 ht
如下图所示,我们从上面的来自第二步的 新cell状态 Ct 那里开始分析,自第二步的 新cell状态 Ct 通过 tanh 进行处理(得到一个在 -1 到 1 之间的值),然后, sigmoid 门的输出相乘,最终得到 ht
那么 sigmoid 门的输出的是什么?
看下图的下方,我们运行一个 sigmoid 层,不知道你是否记得最开始的“忘记门“吗?没错,仔细看下图所示,这里的 sigmoid 层的的输入是输入为 ht1 xt ,其实说白了就是一个 后置的“忘记门” ,所以,通过 tanh的cell state和的输出相乘,最终得到的输出,将仅仅是我们确定输出的那部分了。

title

变体LSTM

上面我们介绍了一般的 LSTM,而实际上,几乎所有包含 LSTM 的论文都进行了一些小的改动,虽然他们之间的差异非常小,但是这里选择一种比较流行的变种来进行简单分析,该变种是由 Gers & Schmidhuber (2000) 提出的,其关键点是增加了 “peephole connection”。我们让 忘记门层 也会接受cell state的输入。下图所示,增加了 peephole 到每个门上,但是许多论文会加入部分 peephole ,而不是所有都加。
这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值