理解LSTM网络--Understanding LSTM Networks(翻译一篇colah's blog)
colah的一篇讲解LSTM比较好的文章,翻译过来一起学习,原文地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ,Posted on August 27, 2015。
Recurrent Neural Networks
人类思维具有连贯性。当你看这篇文章时,根据你对前面词语的理解,你可以明白当前词语的意义。即是由前面的内容可以帮助理解后续的内容,体现了思维的连续性。
传统的神经网络(RNN之前的网络)在解决任务时,不能做到像人类思维一样的具有连续性,这成为它的一个主要不足。比如你想对电影不同时刻发生的故事情节进行事件的分类,就无法利用传统的神经网络,根据电影中前面时刻发生的剧情去推理后续的情节。RNN可以解决此类与连续性有关的问题,它们具有循环结构的网络,可以使信息在其中持续保存。
RNN具有循环结构 |
上图中的神经网络结构A,接收输入Xt ,输出ht 。A具有的循环结构使得信息可以从上一个时间步(timestep,t)传到下一时间步(t+1)。带有箭头的循环网络A看起来很复杂,把循环结构展开之后就会比较清晰,从下图的展开结构可以看出循环网络与普通网络的差别也没有那么大。循环神经网络RNN可以看成是同一个网络的复制了几份而已,然后再把这复制的几个网络按照先后顺序排列起来,使得前一个网络的输出刚好作为下一个网络的输入。
RNN的展开示意图 |
这种类似链式的性质表明RNN与序列数据和列表数据有自然地联系,这种结构是神经网络利用序列数据的天然结构。事实也是如此。过去几年里,RNN成功应用于各种问题中:语音识别,语言模型,(机器)翻译,给图像加说明文字等等。Andrej Karpathy的blog讨论了RNN的各种神奇的效果:The Unreasonable Effectiveness of Recurrent Neural Networks。RNN的成功运用得益于一种特殊的循环神经网络结构:LSTM。在循环神经网络的运用领域,几乎所有的令人激动的成果都是基于LSTM做出来的,它远比标准的RNN结构要好得多。本文接下来就是要讨论这些LSTM结构。
长期依赖的问题(The Problem of Long-Term Dependencies)
RNN中的一个引人注意的想法就是它们也许能够将当前的问题与以前的信息联系起来,比如利用电影中前面一些帧的内容也许能够帮助理解后面的电影内容。RNN能否解决这个信息长期依赖的问题,取决于具体的情况。
有时我们只需要查询最近的信息来解决当前的问题,比如一个语言模型基于前面的几个词来预测下一个单词,我们要预测一句话的最后一个词 " the clouds are in the sky ",仅凭sky之前的词,不需要其他更多的信息即可预测到 sky,这种情况下预测位置与相关信息的距离很近,RNN能够学会利用这种之前的信息。
但是还有另外的一些情况RNN无法处理。比如要预测一大段话中最后一个词" I grew up in France.... I speak fluent French. "。最近的信息暗示最后一个词可能是一种语言,但是如果要确定是 French 就得需要远处的France这个上下文的信息。这种情况,France与French距离可能会比较的远,RNN就无法学会将这些信息关联起来。
理论上RNN是可以处理这种“长期依赖”问题的,人们可以手工的仔细选择RNN的参数来解决小问题,但是实际中RNN还是无法学到“长期依赖”的解决方法, Hochreiter (1991) [German] 和 Bengio, et al. (1994) 深入研究过RNN无法工作的一些主要原因。LSTM没有这样的问题。
LSTM
LSTM(Long Short Term Memory)网络是一种特殊的RNN网络,能够解决“长期依赖”(long-tern dependencies)的问题,由Hochreiter & Schmidhuber (1997)提出的,它在许多问题的表现效果都很好,至今也在广泛应用。
LSTM被明确的设计为可以解决“长期依赖”问题,所以能够记住长期的信息是它们的默认一种属性。
在标准RNN结构中,循环的网络模块中结构比较简单,比如仅有一层tanh层。
RNN中循环模块只有简单的一层网络
LSTM也有与RNN相似的循环结构,但是循环模块中不再是简单的网络,而是比较复杂的网络单元。LSTM的循环模块主要有4个单元,以比较复杂的方式进行连接。
LSTM的循环模块中包含4个网络层 |
先提前熟悉一下将要用到的标记,下面会一步一步的讲解LSTM。
LSTM的主要思想(The Core Idea Behind LSTMs)
每个LSTM的重复结构称之为一个细胞(cell),在LSTM中最关键的就是细胞的状态,下图中贯穿的那条横线所表示的就是细胞状态。
LSTM能够给细胞状态增加或者删除信息,是由一种叫做“门”的结构来控制的,门主要起到开关的作用,它可以选择性的让信息通过,门是由一个sigmoid层与一个点乘操作组成的。
门的组成结构 |
sigmoid层输出的是0-1之间的数字,表示着每个成分能够通过门的比例,对应位数字为0表示不通过,数字1表示全通过。比如一个信息表示为向量[1, 2, 3, 4],sigmoid层的输出为[0.3, 0.5, 0.2, 0.4],那么信息通过此门后执行点乘操作,结果为[1, 2, 3, 4] .* [0.3, 0.5, 0.2, 0.4] = [0.3, 1.0, 0.6, 1.6]。
LSTM共有3种门,通过这3种门控制与保护细胞状态。
逐步详解LSTM(Step-by-Step LSTM Walk Through)
第一步是LSTM决定哪些信息需要从细胞状态中丢弃,由“遗忘门”(sigmoid层)来决定丢弃哪些信息。遗忘门接收上一时刻的输出ht-1 与这一时刻的输入xt,然后输出遗忘矩阵f,决定上一时刻的细胞状态Ct-1 的信息通过情况。
遗忘门
第二步是决定从新的信息中存储哪些信息到细胞状态中去。首先输入门(也是sigmoid层)接收ht-1 与xt,产生决定我们要更新哪些数字。接下来一个tanh层产生候选状态值 \tilde{C}_t 。再联合待更新的数值与候选状态值,对旧的状态Ct-1 进行更新。如下图,
接着是更新旧的状态,如下图,ft 是遗忘矩阵, Ct-1是上一时刻的状态(旧状态),it 是决定要更新哪些数字,~Ct 是候选状态。
最后一步是决定输出哪些信息。首先利用输出门(sigmoid层)产生一个输出矩阵Ot,决定输出当前状态Ct的哪些部分。接着状态Ct通过tanh层之后与Ot相乘,成为输出的内容ht 。如下图。
LSTM的变种
目前讨论的都是普通的LSTM,并非所有的LSTM网络结构都是这样的。
Gers & Schmidhuber (2000) 提出了一个比较流行的LSTM模型,加入了“peephole connections”,也就是增加了细胞状态与3个控制门的直接连接。如下图,
另一个LSTM变种模型是利用耦合的遗忘门与输入门。遗忘门决定哪些状态需要遗忘,输入门决定哪些输入信息加入新的状态,将这个两个分离的过程联合起来,共同做决定。只在要输入新状态的部分对旧的状态进行丢弃,或者只在被遗忘的状态部分输入新的状态。见下图,
另一个更加动态的LST是由 Cho, et al. (2014) 提出的GRU(Gated Recurrent Unit),GRU将遗忘门与输入门整合成一个单独的更新门,还整合了细胞状态与隐藏状态等,结果是GRU比标准的LSTM模型更加的简单。
还有其他的一些变种如Yao, et al. (2015) 提出的Depth Gated RNNs。还有采用其他方法解决长期依赖问题的方案如 Koutnik, et al. (2014) 提出的 Clockwork RNNs。
Greff, et al. (2015) 对比了这些变种发现它们都是一样的,其中的差别并没有太多的影响。 Jozefowicz, et al. (2015) 测试了测试了成千上万的RNN结果,发现有些RNN在某些特定任务上表现比LSTM要好。
结论
LSTM在绝大多数任务上的表现确实比RNN要好。LSTM是一个很大的进步,但是另外一个大的进步是什么呢?研究人员的一个共识就是注意力机制(Attention),注意力机制就是让RNN在每一步的训练都从大的信息集合中挑选需要的信息,类似于注意力集中在某一部分的信息上面。使用注意力机制有很多令人兴奋的成果出来,还有更多的成果即将出现。
注意力机制不是RNN领域唯一的,还有Kalchbrenner, et al. (2015) 的Grid LSTMs,还有 Gregor, et al. (2015), Chung, et al. (2015), or Bayer & Osendorfer (2015) 等人在生成式模型方面利用RNN。
致谢
省略...
理解LSTM网络--Understanding LSTM Networks(翻译一篇colah's blog)的更多相关文章
- 【翻译】理解 LSTM 网络
目录 理解 LSTM 网络 递归神经网络 长期依赖性问题 LSTM 网络 LSTM 的核心想法 逐步解析 LSTM 的流程 长短期记忆的变种 结论 鸣谢 本文翻译自 Christopher Olah ...
- 基于 Keras 用 LSTM 网络做时间序列预测
目录 基于 Keras 用 LSTM 网络做时间序列预测 问题描述 长短记忆网络 LSTM 网络回归 LSTM 网络回归结合窗口法 基于时间步的 LSTM 网络回归 在批量训练之间保持 LSTM 的记 ...
- (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)
@翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...
- 递归神经网络之理解长短期记忆网络(LSTM NetWorks)(转载)
递归神经网络 人类并不是每时每刻都从头开始思考.正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词.你不会丢弃所有已知的信息而从头开始思考.你的思想具有持续性. 传统的神经网络不能做到这 ...
- 理解长短期记忆网络(LSTM NetWorks)
转自:http://www.csdn.net/article/2015-11-25/2826323 原文链接:Understanding LSTM Networks(译者/刘翔宇 审校/赵屹华 责编/ ...
- [译] 理解 LSTM 网络
原文链接:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 吴恩达版:http://www.ai-start.com/dl2017/h ...
- [译] 理解 LSTM(Long Short-Term Memory, LSTM) 网络
本文译自 Christopher Olah 的博文 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有 ...
- [深度学习]理解RNN, GRU, LSTM 网络
Recurrent Neural Networks(RNN) 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义 ...
- [转] 理解 LSTM 网络
[译] 理解 LSTM 网络 http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他 ...
随机推荐
- KDTree 板子
从杨哥哪里偷的板子, 存一下. #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.t ...
- Fractions Again?! UVA - 10976
It is easy to see that for every fraction in the form 1k(k > 0), we can always find two positive ...
- Java复习笔记(二):数据类型以及逻辑结构
一.数据类型 1.数据类型又分为基本数据类型和引用数据类型,而他们的区别在于,引用数据类型需要开辟内存空间来进行分配,什么意思呢?先来看看他们有哪些. 整数型:byte,short,int,long ...
- Vue兄弟组件通信
Vue兄弟组件通信之借助中央事件总线 下载链接:https://www.yinxiangit.com 其实要实现兄弟组件通信,就算是通过父子组件通信的方式也是可以达到的,如 子 ——>父——&g ...
- Storm 系列(一)—— Storm和流处理简介
一.Storm 1.1 简介 Storm 是一个开源的分布式实时计算框架,可以以简单.可靠的方式进行大数据流的处理.通常用于实时分析,在线机器学习.持续计算.分布式 RPC.ETL 等场景.Storm ...
- ASP.NET Core SignalR:集线器Hubs
一.什么是集线器hubs 通过SignalR的集线器hubs中定义的方法,服务器可以调用连接中的客户端定义的方法,而客户端也可以调用服务器端集线器中定义的方法.SignalR负责实现了客户端和服务器之 ...
- pageable多字段排序问题
Sort sort = new Sort(Sort.Direction.DESC, "createdate") .and(new Sort(Sort.Direction.AES, ...
- 浅谈@RestController和@Controller的区别
在做Spring MVC开发时,如果对@RestController或者@Controller这两个注解理解不够清晰的话,就难免会出现用混的情况.而混用的结果往往是无法实现期望的跳转结果或者是直接将跳 ...
- vue报错:[Vue warn]: Do not use built-in or reserved HTML elements as component id: header
报错的信息大致是不要将内置或保留的HTML元素用作组件ID 解决的办法是修改name符合规范或者直接删除组件内的name属性.
- asp.net core + layui.js 搭建仓储系统
先放几张网站图片: 第一步先从layui 网站https://www.layui.com/doc/ 下载相关文件,复制到项目 wwwroot 目录下: 然后在 _Layout.cshtml 中引用 l ...