LSTM的“前生今世”

简介: 本文介绍了LSTM的发展历史,并且深入浅出的介绍了LSTM的核心思想(无非就是几个高深莫测的公式),作者通过图形化的方法解释了公式,使得核心思想更加容易理解。

更多深度文章,请关注:https://yq.aliyun.com/cloud


循环神经网络(RNN

人脑因为某种机制的存在,从来不会从头开始思考。当你阅读这篇文章时,你会根据你对以前的词意的理解来理解每个单词。你从来不会把所有东西都扔掉,再从头开始思考。由于这种机制的存在,我们的大脑变得无比高效。算法其实就是模拟我们人类思维的一种真实映射。不管是RNN,还是LSTM它们都是基于人类思维的一种数学表现形式。

但传统神经网络不能做到这一点,这似乎是一个很大的缺陷。例如,想象一下你想要分析一个电影中每个点发生什么样的事件。传统的神经网络是不能够利用电影中以前的事件的来推理出以后的事件。但循环神经网络解决了这个问题。它是具有循环的网络,允许信息持续存在。

5febd36a6f59084cf2152cad8d3476f9332c5e70

在上图中,一个神经网络,A输入Xt并输出Ht。循环允许信息从网络的一个步骤传递到下一个。

这些循环使得循环神经网络看起来很神秘。然而,如果你在深入的思考一下,那就证明它们并不是一般的神经网络。一个循环的神经网络可以被认为是同一个网络的多个副本,它们每一个都会传递给后继者的消息。考虑如果我们展开循环神经网络会发生什么呢?请看下图:

dab0c7876e41f2ccd67aff0d289fa5529331195e

这种链状特征揭示了循环神经网络与序列和列表的关系非常密切。RNN是用于分析此类数据的神经网络的自然结构。

在过去的几年里,RNN应用于语音识别,语言建模,翻译,图像字幕等各种问题上,并且取得了巨大的成功。这些成功的基础是使用“LSTM”,这是一种非常特殊的循环神经网络,对于许多任务来说,它比标准版本要好的多。几乎所有基于循环神经网络的令人兴奋的结果都是通过它实现的。本文就着重探讨LSTM

长期依赖的问题

RNN的功能之一就是他们可以能够将先前的信息连接到当前任务,例如使用先前的视频帧可以增加对当前帧的理解。如果RNN可以做到这一点,他们将非常有用。

但有时,我们只需要查看最近的信息来执行当前的任务。例如,考虑一种语言模型,尝试基于以前的单词来预测下一个单词。例如我们试图预测云在天空 ”中的最后一个字,我们就不需要任何其他的语境。在这种情况下,如果相关信息与所需神经元之间的差距很小,则RNN可以使用过去的信息。

67211ffb3baf340bbabd4a34d8b97eea740f5228

但也有需要更多上下文的情况。考虑尝试预测文本中的最后一个单词我在法国长大…….我说流利的法语。最近的信息表明,下一个单词可能是一种语言的名称,但是如果我们想缩小范围确定是哪种语言,我们需要法国的背景,从而进一步的来确定。这时,相关信息之间的差距就变得非常大。不幸的是,随着距离的扩大,RNN无法学会使用过去信息。

2267a455ae7cd59d70a88417dcb14dc0076ebb55

理论上,RNN绝对有能力处理类似的长期依赖。人们可以仔细挑选参数来解决这种形式的玩具问题。不幸的是,在实践中,RNN似乎没有办法做到这些。Hochreiter1991[German]Bengio等人深入探讨了这个问题他们发现解决这个问题是非常困难的。幸运的是,LSTM成功的解决了这个问题!

LSTM网络

Long Short Term Memory(通常称为“LSTM”)是一种特殊的RNN,能够保存长期的依赖关系。在这个模型中,常规的神经元,即一个将S型激活应用于其输入线性组合的单位,被存储单元所代替。每个存储单元是与一个输入门,一个输出门和一个跨越时间步骤无干扰送入自身的内部状态相关联。它是由HochreiterSchmidhuber1997)介绍,并且许多人对它进行了精炼和普及。

所有的循环神经网络都具有神经网络重复模块链。在标准的RNN中,该重复模块具有非常简单的结构,例如单个tanh层。

59497a66c8ee8143e5dcd545325c7e37f3448767

LSTM也具有这样的链结构,但是重复模块具有不同的结构。没有一个单一的神经网络层,而是有四个,并且以非常特殊的方式进行交互。

c024344fc8d1c6ee33131243a335de218c49700f

不要担心改变了什么细节。接下来我们将逐步介绍LSTM。现在,先熟悉我们将要使用的符号。

在上图中,每一行都含有从一个节点的输出到其他节点的输入的整个向量。粉色圆圈表示点向运算,如向量加法,而黄色框是神经网络层。行合并表示连接,而行交叉表示其内容正在复制,副本将转送到不同的位置。

LSTM的核心思想

LSTM的关键是细胞状态,即水平线穿过图的顶部。

dfddc7c175e9e0a485e449a5a43d5429cf86e8d0

细胞状态类似于输送带。它直接在整个链上运行,只有一些小的线性相互作用。信息很容易的可以通过它并且保持不变。

f2b93e5f3950eadbc4d2f846128474331eb541b4

LSTM确实具有删除或添加信息到细胞状态的能力,这种能力由被称为门的结构调节使用。门是一种可选择地让信息通过的方式。它们由S形的神经网络层和点向乘法运算组成。

7d90b25dff4dbf13cbc31963e3bce8e8088b1f47

SIGMOID函数输出值是0或者1,它描述每个组件应该通过多少数据。值为0表示如何都不能通过,而值为1意味着让一切通过!

LSTM有三个门,用于保护和控制细胞状态。

一步一步“走过”LSTM

LSTM的第一步就是决定我们要从单元格中丢弃什么信息。这一决定是由一个sigmoid layer控制的。它主要控制ht1xt之间的计算,输出0或者11代表完全保持,而0 代表彻底丢弃

我们回到一个语言模型的例子,试图根据所有以前的语料来预测下一个单词。在这样的问题中,细胞状态可能包括当前主题(subject)的词性的分析,从这些分析中,我们可以使用正确的代词或者动词。

2673f55dd26c0cb14ee3a9e179fdf4f2b576501f

下一步是决定我们要在单元格状态下存储的新信息。这有两部分,首先,称为输入门层S形层(sigmoid layer)决定了我们将更新哪些值。接下来,tanh层会创建新的候选值的向量。在下一步中,我们将结合这两个来创建对状态的更新。

在我们的语言模型的例子中,我们希望将新主题的词性可以添加到单元格状态,以替换我们忘记的旧词性。

98058bbf65a58984806959e5ef3a49f7ddab93ff

现在是更新旧细胞状态的时候了,我们把旧状态乘以ft忘记我们之前决定忘记的事情。然后我们加itCt,这是新的候选状态,按照我们决定更新每个状态值的程度来衡量。

在语言模型的情况下,我们实际上已经删除关于旧主题词性的信息,并添加了新信息,正如我们在之前的步骤中所做的。

e1aa2aff5dc659b9c7636de7ec1fc63e3fa0d415

最后,我们需要决定我们要输出什么。此输出将基于我们的单元格状态,但这将是一个过滤版本。首先,我们运行一个sigmoid层,它决定了我们要输出的单元格状态的哪些部分。然后,我们把细胞状态通过tanh,并将其乘以sigmoid门的输出,以便我们只输出我们需要的部分。

对于语言模型,由于它只是看到一个主题,它可能需要输出与动词相关的信息,以防下一步需要。例如,它可能会输出主题是单数还是复数,以便我们知道动词应该如何组合在一起。

e9bb6a3e26b5029bc6867978b0fee6685ed08e4f

LSTM变异

到目前为止我所描述的是一个很正常的LSTM。但并不是所有的LSTM都与上述相同。事实上,几乎每一篇涉及LSTM的论文都使用了一个略有不同的版本。差异很小,但值得一提的是它们。

GersSchmidhuber2000介绍的一种受欢迎的LSTM变体添加了窥视孔连接(peephole connections。这意味着我们让门层看着单元格状态。

fcc19044e4f1583ce1e547391573e331c1f9f05e

上面的图就是增加了所有的门的窥视。

另一种变异是使用耦合的忘记(coupled forget)和输入门。而不是单独决定要忘记什么,我们应该添加新信息,然后一起做出这些决定。

75e1d6001bda5ae875373b17988dcc5e58ca31c5

LSTM的更显著的变化是由Cho等人2014介绍的门控循环单元或GRU 。它将忘记和输入门组合成一个单一的更新门,还合并了单元格状态和隐藏状态,并进行了一些其他更改。所得到的模型比标准LSTM模型更简单,并且越来越受欢迎。

65f1a36ee933e430ae55f30d8bd500480d575c69

这些是最显著的LSTM变体。还有很多其他的,如Yao等人2015 Depth Gated RNNs 。还有一些完全不同的处理长期依赖的方法,例如Koutnik2014等人的 Clockwork RNNs

哪些变体最好?分歧是否重要?Greff等人 2015做了一个很好的比较流行的变种,发现这些变异都是一样的。Jozefowiczet al2015测试了一万多个RNN架构,发现在某些任务上它们的表现比LSTM更好。

结论

此前,我说人们通过RNN取得了显著的成果,这些成果基本上都是使用LSTM实现的。这足以表明LSTM的强大。可能写成一组方程式,会让LSTM看起来很吓人。但我希望在这篇文章中你会对它有一个认识,使他们变得更加平易近人。

LSTMRNN发展的一大步。很自然的想法:还有另一大步吗?研究人员的共同观点是:是的!还有下一步,值得关注!这个想法是让RNN的每个步骤从一些较大的信息集合中挑选信息。例如,如果您使用RNN创建描述图像的标题,则可能会选择图像的一部分来查看其输出的每个字。事实上,2015做到了这一点 ,如果你想要引起注意,这可能是一个有趣的起点!

致谢

我很感谢一些人帮助我更好地了解LSTM 我非常感谢Google的同事们有用的反馈,特别是Oriol VinyalsGreg CorradoJon ShlensLuke VilnisIlya Sutskever。我也感谢许多其他朋友和同事花时间帮助我,包括达里奥·阿莫德迪雅各布·斯坦哈特

本文由@阿里云云栖社区组织翻译。

文章原标题《Understanding LSTM Networks

作者:colah 博客:http://colah.github.io

译者:袁虎 审阅:

文章为简译,更为详细的内容,请查看原文


相关文章
|
7月前
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
4月前
|
机器学习/深度学习 API 异构计算
7.1.3.2、使用飞桨实现基于LSTM的情感分析模型的网络定义
该文章详细介绍了如何使用飞桨框架实现基于LSTM的情感分析模型,包括网络定义、模型训练、评估和预测的完整流程,并提供了相应的代码实现。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
4月前
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
193 2
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
RNN、LSTM、GRU神经网络构建人名分类器(三)
这个文本描述了一个使用RNN(循环神经网络)、LSTM(长短期记忆网络)和GRU(门控循环单元)构建的人名分类器的案例。案例的主要目的是通过输入一个人名来预测它最可能属于哪个国家。这个任务在国际化的公司中很重要,因为可以自动为用户注册时提供相应的国家或地区选项。
|
6月前
|
机器学习/深度学习 数据采集
RNN、LSTM、GRU神经网络构建人名分类器(一)
这个文本描述了一个使用RNN(循环神经网络)、LSTM(长短期记忆网络)和GRU(门控循环单元)构建的人名分类器的案例。案例的主要目的是通过输入一个人名来预测它最可能属于哪个国家。这个任务在国际化的公司中很重要,因为可以自动为用户注册时提供相应的国家或地区选项。
|
6月前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
116 6
|
6月前
|
机器学习/深度学习 存储 自然语言处理
RNN与LSTM:循环神经网络的深入理解
【6月更文挑战第14天】本文深入探讨RNN和LSTM,两种关键的深度学习模型在处理序列数据时的作用。RNN利用记忆单元捕捉时间依赖性,但面临梯度消失和爆炸问题。为解决此问题,LSTM引入门控机制,有效捕获长期依赖,适用于长序列处理。RNN与LSTM相互关联,LSTM可视为RNN的优化版本。两者在NLP、语音识别等领域有广泛影响,未来潜力无限。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】36. 门控循环神经网络之长短期记忆网络(LSTM)介绍、Pytorch实现LSTM并进行训练预测
【从零开始学习深度学习】36. 门控循环神经网络之长短期记忆网络(LSTM)介绍、Pytorch实现LSTM并进行训练预测
|
5月前
|
机器学习/深度学习 数据采集 数据挖掘
Python实现循环神经网络RNN-LSTM回归模型项目实战(股票价格预测)
Python实现循环神经网络RNN-LSTM回归模型项目实战(股票价格预测)

热门文章

最新文章