如何简单的理解LSTM——其实没有那么复杂(转载)
转载地址:https://www.jianshu.com/p/4b4701beba92
1、循环神经网络
人类针对每个问题的思考,一般不会是完全的从头开始思考。正如当你阅读这篇译文的时候,你会根据已经阅读过的内容来对后面的内容进行理解,你不会把之前的东西都丢掉从头进行思考,你对内容的理解是贯穿的。
传统的神经网络做不到这一点,而这似乎是一个主要的缺点。 例如,假设您想对电影中的每个事件进行分类。我们无法想象传统神经网络如何能够利用前面的场景去干预后面的预测。
幸好循环神经网络解决了这个问题, 它们是具有循环的网络,允许信息持续存在,示意图如下。
在上图中,一组神经网络 A接收某些输入xt,并输出一个值ht。 循环允许信息从网络的一个步骤传递到下一个。
这些循环使得循环神经网络看起来很神秘。 然而,如果你再多考虑一下,你就会发现其实它和传统的神经网络并不是完全不同。 一个循环神经网络可以被认为是同一个网络的多个副本,每一个都传递一个消息给后继者。 我们考虑一下如果将循环展开会发生什么:(示意如下)
这种链状特征揭示了循环神经网络与序列和列表密切相关。 它们是用于此类数据的自然神经网络结构。
他们肯定是有用的! 在过去的几年里,RNN应在语音识别、语言建模、翻译,图像字幕等各种问题上取得了巨大成功。在Andrej Karpathy的这篇博文——RNN的难以理解的有效性(The Unreasonable Effectiveness of Recurrent Neural Networks)中讨论了RNN取得的惊人成果,他们真的很神奇
这些成功的案例的共同点就是都是用了LSTM,这是一种非常特殊的循环神经网络,对于许多任务来说,它们比基准版本好的多。 几乎所有令人兴奋的结果都是基于循环神经网络实现的,这篇文章将探讨这些LSTM,带你解开LSTM的神秘面纱。
2、长依赖存在的问题
RNN显著的魅力是将以前的信息连接到当前任务的这种思路,例如使用先前的视频帧可以有助于对当前帧的理解。 如果RNN可以做到这一点,这将非常有用。 但他可以吗?这要看情况。
有时,为了处理当前的任务,我们只需要查看最近的信息。 例如,考虑一种语言模型,该模型根据前面的词语来预测下一个单词。 如果我们试图预测““the clouds are in the sky”的最后一个单词,我们不需要任何其他的语境信息——下一个单词显然是sky。 在相关信息和需要该信息的距离较近的时候,RNN能够学会去利用历史信息。
但也有需要更多上下文的情况。 考虑尝试预测文本中的最后一个单词“I grew up in France… I speak fluent French.”。最近的信息表明,下一个单词可能是一种语言的名称,但如果我们想缩范围确定那种语言,我们需要从前面获取法国的背景。 相关信息和需要该信息的地方的距离变得非常大的情况是很可能的。
不幸的是,随着距离的增加,RNN无法有效的利用历史信息。
在理论上,RNN绝对有能力处理这样的“长依赖”问题。人们可以仔细挑选参数来解决这种形式的问题。 可悲的是,在实践中,RNN似乎无法学习到这些特征。Hochreiter和Bengio,曾经深入的研究过这个问题,他们发现一些根本性的原因,能够解释RNN为什么不work。
谢天谢地,LSTM没有这个问题!
3、LSTM Networks
长短记忆神经网络——通常称作LSTM,是一种特殊的RNN,能够学习长的依赖关系。 他们由Hochreiter&Schmidhuber引入,并被许多人进行了改进和普及。他们在各种各样的问题上工作的非常好,现在被广泛使用。
LSTM是为了避免长依赖问题而精心设计的。 记住较长的历史信息实际上是他们的默认行为,而不是他们努力学习的东西。
所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。
LSTM也拥有这种链状结构,但是重复模块则拥有不同的结构。与神经网络的简单的一层相比,LSTM拥有四层,这四层以特殊的方式进行交互。
不要过早担心细节问题, 稍后我们将一步一步地剖析LSTM。 现在,让我们先熟悉一下我们将要使用的符号。
在上图中,每一行都带有一个向量,该向量从一个节点输出到其他节点的输入。 粉红色圆圈表示点向运算,如向量加法、点乘,而黄色框是学习神经网络层。 线的合并表示连接,而线的交叉表示其内容正在复制,副本将转到不同的位置。
4、LSTM背后的核心理念
LSTM的关键是细胞状态,表示细胞状态的这条线水平的穿过图的顶部。
细胞的状态类似于输送带,细胞的状态在整个链上运行,只有一些小的线性操作作用其上,信息很容易保持不变的流过整个链。
LSTM确实具有删除或添加信息到细胞状态的能力,这个能力是由被称为门(Gate)的结构所赋予的。正是这种门结构使得LSTM既可以存储近节点的信息也可以存储较远节点的信息。
门(Gate)是一种可选地让信息通过的方式。 它由一个Sigmoid神经网络层和一个点乘法运算组成。
Sigmoid神经网络层输出0和1之间的数字,这个数字描述每个组件有多少信息可以通过, 0表示不通过任何信息,1表示全部通过
LSTM有三个门,用于保护和控制细胞的状态。
5、一步步的拆解LSTM
(1)LSTM的第一步是决定我们要从细胞状态中丢弃什么信息。 该决定由被称为“忘记门”的Sigmoid层实现。ht-1(前一个输出)和xt(当前输入)经过Sigmoid函数输出0和1之间的一个数字,乘上单元格状态Ct-1(上一个状态)。1代表完全保留,而0代表彻底删除。
举例:让我们回到语言模型的例子,试图根据以前的语料来预测下一个单词。 在这样的问题中,细胞状态可能包括当前主题的性别,从而决定使用正确的代词。 当我们看到一个新主题时,我们想要忘记旧主题的性别。
(2)决定我们要在细胞状态中加上什么信息。 这部分分为两步。 首先,称为“输入门层”的Sigmoid层决定了我们将更新多少信息。 接下来一个tanh层创建候选向量Ct,该向量将会被加到细胞的状态中。 在下一步中,我们将结合这两个向量来创建更新值。
举例:在我们的语言模型的例子中,我们希望将新主题的性别添加到单元格状态,以替换我们忘记的旧对象。
(3)更新状态值Ct−1为Ct。
我们将上一个状态值乘以ft,忘记一部分,将得到的值加上 it∗C̃ t得到的是新的细胞状态。
在语言模型的例子中,对应着实际删除关于旧主题性别的信息,并添加新信息,正如在之前的步骤中描述的那样。
(4)输出什么。 此输出将基于我们的细胞状态,但将是一个过滤版本。 首先,我们运行一个sigmoid层,它决定了我们要输出的细胞状态的哪些部分。 然后,我们将单元格状态通过tanh(将值规范化到-1和1之间),并将其乘以Sigmoid门的输出,至此我们只输出了我们决定的那些部分。
对于语言模型的例子,由于只看到一个主题,考虑到后面可能出现的词,它可能需要输出与动词相关的信息。 例如,它可能会输出主题是单数还是复数,以便我们知道动词应该如何组合在一起。
6、LSTM的变种
到目前为止,所描述的是一个很正常的LSTM。 但并不是所有的LSTM都与上述相同。 事实上,似乎几乎每一篇涉及LSTM的论文都使用了一个略有不同的版本,差异很小,但有一些值得一看。
(1)一个比较流行的LSTM变种是由Gers & Schmidhuber (2000)提出的,添加“peephole connections”。这意味着,我们允许gate层去看细胞的状态。
上面的图中所有的Sigmoid层都增加了窥视,但许多论文实现不是针对所有都增加窥探,而是有针对性的增加。
(2)另一种变化是使用耦合的忘记和输入门,而不是单独决定要忘记什么、添加什么,这个决定需要一起做。 只有当需要输入某些信息的时候,我们才会忘记这个位置的历史信息。只有当我们忘记一些历史信息的时候,我们才在状态中添加所有新的信息。
(3)LSTM的一个稍微更显着的变化是由Cho介绍的门控循环单元(或GRU)。 左边是一个重置门,右边是一个更新门。它还将单元格状态和隐藏状态合并,并进行了一些其他更改。 所得到的模型比标准LSTM模型更简单,并且越来越受欢迎。
- 重置⻔有助于捕捉时间序列⾥短期的依赖关系;
- 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。
这些只是最显着的LSTM变体中的几个, 还有很多其他的,比如Depth Gated RNNs,还有一些完全不同的处理长期依赖的方法,例如Clockwork。哪些变体最好、差异的重要性等, Greff做一个很好的变体的比较,发现他们都差不多。 Jozefowicz测试了大量的RNN架构,发现一些RNN结构在某些任务上要比LSTM更好。
7、结论
此前,我提到人们通过RNN实现了显着的成果。 基本上所有这些都是使用LSTM实现的。 对于大多数任务而言LSTM很有效。
一般介绍LSTM的文章大部分会写一大组方程式,这使得LSTM看起来很吓人。 希望通过这篇文章的逐步讲解,帮助读者更好的理解LSTM。
LSTM是我们使用RNN的一个巨大进步。 很自然的想法:更大的进步吗? 研究人员的共同观点是——有,那就是注意力模型。这个想法是让RNN的每一步挑选信息的过程都参照上层的主题信息,关于Attention模型后面我会再进行详尽的描述,这里不再讨论。
希望通过本文让想了解和使用LSTM的人能够了解其工作原理,能更好的使用,不被大量的数学公式和推导所阻碍。
如何简单的理解LSTM——其实没有那么复杂(转载)的更多相关文章
- [译] 理解 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 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有 ...
- (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)
@翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...
- RNN(1) ------ “理解LSTM”(转载)
原文链接:http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这 ...
- [转] 理解 LSTM 网络
[译] 理解 LSTM 网络 http://www.jianshu.com/p/9dc9f41f0b29 Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他 ...
- 技能|三次简化一张图:一招理解LSTM/GRU门控机制
作者 | 张皓 引言 RNN是深度学习中用于处理时序数据的关键技术, 目前已在自然语言处理, 语音识别, 视频识别等领域取得重要突破, 然而梯度消失现象制约着RNN的实际应用.LSTM和GRU是两种目 ...
- 『cs231n』RNN之理解LSTM网络
概述 LSTM是RNN的增强版,1.RNN能完成的工作LSTM也都能胜任且有更好的效果:2.LSTM解决了RNN梯度消失或爆炸的问题,进而可以具有比RNN更为长时的记忆能力.LSTM网络比较复杂,而恰 ...
- 【翻译】理解 LSTM 网络
目录 理解 LSTM 网络 递归神经网络 长期依赖性问题 LSTM 网络 LSTM 的核心想法 逐步解析 LSTM 的流程 长短期记忆的变种 结论 鸣谢 本文翻译自 Christopher Olah ...
- 【翻译】理解 LSTM 及其图示
目录 理解 LSTM 及其图示 本文翻译自 Shi Yan 的博文 Understanding LSTM and its diagrams,原文阐释了作者对 Christopher Olah 博文 U ...
随机推荐
- linux磁盘空间查看
du -h --max-depth=1 du -sh df -h
- Swift学习笔记(一)
1.Constants and Variables(常量和变量) let定义常量,var定义变量. [Note] If a stored value in your code won't change ...
- 菜鸡的Java笔记 数字操作类
数字操作类 Math 类的使用 Random 类的使用 BigInteger 和 BigDecimal 类的使用 Math 是一 ...
- 微信小程序中使用canvas
微信小程序中使用canvas会存在的一些问题: 由于小程序在绘制canvas的时候不能加载网络图片 所以需要把网络图片保存到本地之后再进行绘制 downLoadImg: function (netUr ...
- Hadoop集群 增加节点/增加磁盘
在虚拟机中新建一个机器. 设置静态IP 将修改/etc/hosts 192.168.102.10 master 192.168.102.11 slave-1 192.168.102.12 slave- ...
- [loj2494]寻宝游戏
将$n+1$个数字(还有0)标号为$[0,n]$,那么定义$a_{i,j}$表示第j个数上第i位上的值,如果第$i-1$个数与第$i$个数之间的运算符为与,那么令$b_{i}=1$,否则$b_{i}= ...
- [loj3274]变色龙之恋
首先有一个暴力的做法,将任意两个点判断,可以得到与之相关的1或3只变色龙:1只是两只变色龙相互喜欢,那么剩下那只就是颜色相同:3只从3只选2只并和自己判断一次,结果为1的那次剩下的那个就是他喜欢的,然 ...
- 【机器学习基础】卷积神经网络(CNN)基础
最近几天陆续补充了一些"线性回归"部分内容,这节继续机器学习基础部分,这节主要对CNN的基础进行整理,仅限于基础原理的了解,更复杂的内容和实践放在以后再进行总结. 卷积神经网络的基 ...
- 撸了一个可调试 gRPC 的 GUI 客户端
前言 平时大家写完 gRPC 接口后是如何测试的?往往有以下几个方法: 写单测代码,自己模拟客户端测试. 可以搭一个 gRPC-Gateway 服务,这样就可以在 postman 中进行模拟. 但这两 ...
- Codeforces 1326F2 - Wise Men (Hard Version)(FWT+整数划分)
Codeforces 题目传送门 & 洛谷题目传送门 qwq 这题大约是二十来天前 AC 的罢,为何拖到此时才完成这篇题解,由此可见我是个名副其实的大鸽子( 这是我上 M 的那场我没切掉的 F ...