理解 LSTM 网络

来源:互联网 发布:by什么意思网络用语 编辑:程序博客网 时间:2024/06/06 16:58

Recurrent Neural Networks

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

在上面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。
这些循环使得 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 come from China… I speak fluent Chinese”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 China 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。即决定Chinese的China距离Chinese距离远,难以产生关联。
不幸的是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。
这里写图片描述
在理论上,RNN 绝对可以处理这样的 长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。Bengio, et al. (1994)等人对该问题进行了深入的研究,他们发现一些使训练 RNN 变得非常困难的相当根本的原因。
然而,幸运的是,LSTM 并没有这个问题!
解决方案:设计Gate,保存重要的记忆。
这里写图片描述

LSTM 网络

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

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

不必担心这里的细节。我们会一步一步地剖析 LSTM 解析图。现在,我们先来熟悉一下图中使用的各种元素的图标。
这里写图片描述
在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和、积而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

LSTM 的核心思想

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

LSTM 有通过精心设计的称作为“门”(Gate)的结构来去除或者增加信息到细胞状态的能力。”门”是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。
一个Cell由三个Gate(input、forget、output)和一个cell单元组成。Gate使用一个sigmoid激活函数,而input和新时刻的cell state通常会使用tanh来转换。(下图黄色的就是Gate
这里写图片描述
Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!

逐步理解 LSTM

一、丢弃信息

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

二、输入信息,产生新的细胞状态

下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量C~t,会被加入到状态中。接着,我们会讲这两个信息来产生对状态的更新。
在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语
这里写图片描述
现在是更新旧细胞状态的时间了,Ct1 更新为 Ct。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。
我们把旧的细胞状态Ct1ft 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 it * C~t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。
这里写图片描述

三、输出信息

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

RNN的梯度弥散、爆炸现象

这里,我想回顾一下造成RNN无法保存一段时间之前的内容的问题:Vanishing Gradient.
①同传统的神经网络类似,RNN也需要通过反向运算来更新权重。
这里写图片描述
即:当前时刻的隐藏层的activation unit的计算,需要当前的xt和前一个时刻隐藏层的输出st1。下面以单个Hidden layer为例进行说明。
这里写图片描述
E0E1、….、En为t=0,1,2,…时刻的代价函数(损失函数)。形式为:
这里写图片描述

因为不同时刻有不同的损失函数形式,以E3为例
这里写图片描述
可知,E3由t0,t1,t2,t3时刻的输入和权值W共同确定。
对t3时刻:

E3w=Δs3s3w

其中:
Δs3=E3s3

对t2时刻:
E3w=Δs3s3s2s2w

同样的,对t=n,根据链式法则
Enw=Δsnsnsn1sn1sn2..s2s1s1w

②对U求导,由①中的图可知,U不同时刻中间状态之间的变化关系。其中,E3的生成过程中,U参与计算了3次(分别是计算s1,s2,s3用到了)。
这里,和求权值的梯度不一样,对U的求导为求和

E3U=Δs3k=03s3skskU

③说到这里,还是没有提到梯度弥散、爆炸啊?那这个问题究竟是怎么回事呢?
这里写图片描述
如上图所示,因为不同时间状态的转移矩阵U的最大特征值大于1的时候,且En中n很大的时候,矩阵U需要做n次矩阵乘法操作。下面附上一张网上著名的图片,大家就会理解为什么会有梯度弥散和爆炸现象了。
这里写图片描述

因为RNN这个缺陷,我们首先想到的是更改非线性激励单元(比如将sigmoid和tanh改成别的,比如relu等,但是经过试验, 效果一样不好。)。于是,1997年Hochreiter & Schmidhuber 提出了LSTM,是对RNN的结构性创新,目前其在NLP领域应用的很广泛。

LSTM 的几个常见变化

一、Gers & Schmidhuber (2000)提出的peephole connections。此方法即让Cell state参与门层(Gate layer)的输入。
这里写图片描述

上图中,对每个门层都考虑了Cell state的输入,但在实际中,很多paper的方法是部分考虑Cell state的输入。比如,output gate不考虑Cell state对output门层的输入。

二、使用coupled forget and input gates。可以这么理解:input Gate取消。利用1-ft作为it
这里写图片描述

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

Conclusion

Earlier, I mentioned the remarkable results people are achieving with RNNs. Essentially all of these are achieved using LSTMs. They really work a lot better for most tasks!

Written down as a set of equations, LSTMs look pretty intimidating.
(通过上述一系列的方程式,LSTM看起来更容易理解了。) Hopefully, walking through them step by step in this essay has made them a bit more approachable.

LSTMs were a big step in what we can accomplish with RNNs. It’s natural to wonder: is there another big step? A common opinion among researchers is: “Yes! There is a next step and it’s attention!(LSTM的下一步可能取得重大突破领域是注意力方面。)” The idea is to let every step of an RNN pick information to look at from some larger collection of information. For example, if you are using an RNN to create a caption describing an image, it might pick a part of the image to look at for every word it outputs. In fact, Xu, et al. (2015) do exactly this – it might be a fun starting point if you want to explore attention! There’s been a number of really exciting results using attention, and it seems like a lot more are around the corner…

Attention isn’t the only exciting thread in RNN research. For example, Grid LSTMs by Kalchbrenner, et al. (2015) seem extremely promising. Work using RNNs in generative models – such as Gregor, et al. (2015), Chung, et al. (2015), or Bayer & Osendorfer (2015) – also seems very interesting. The last few years have been an exciting time for recurrent neural networks, and the coming ones promise to only be more so!

参考文章:
1、http://colah.github.io/posts/2015-08-Understanding-LSTMs/
2、http://www.jianshu.com/p/9dc9f41f0b29
3、http://blog.csdn.net/zdy0_2004/article/details/49977423

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三星手机忘了解锁密码怎么办 荣耀8密码忘了怎么办 华为4x开不了机怎么办 华为指纹和密码解锁解不开怎么办 华为荣耀5x死机怎么办 华为荣耀开不了机怎么办 荣耀10开不了机怎么办 乐视pro3变砖了怎么办 手机升级后开不了机怎么办 华为g750开不了机怎么办 手机变砖怎么办插电没反应 变砖手机不通电怎么办 小米手机充电口坏了怎么办 小米2s尾插坏了怎么办 小米手机充电插口坏了怎么办 一条网线上两个亚马逊账号怎么办 加拿大28输20万怎么办 买家账户被亚马逊关闭余额怎么办 京东自营物流慢怎么办 京东退货不给退怎么办 刚付款不想要了怎么办 淘宝卖家拒绝退货退款怎么办 投诉不成立卖家怎么办 淘宝卖家被买家投诉卖假货怎么办 天猫三天未发货怎么办 天猫申请换货卖家不处理怎么办 天猫新疆不发货怎么办 天猫商城少发货怎么办 下单了卖家不发货怎么办 天猫超市漏发货怎么办 天猫购物几天不发货怎么办 天猫总是不发货怎么办 申请退款后卖家又发货了怎么办 天猫拍后申请退款卖家发货怎么办 淘宝上没下单却收到了货怎么办 被买家投诉三无产品怎么办 阿里巴巴卖家虚假发货怎么办 淘宝捡到便宜但是卖家不发货怎么办 被工商局查到三无产品怎么办 淘宝买到三无产品电器怎么办 天猫商城被投诉怎么办