理解LSTM模型[通俗易懂]

理解LSTM模型[通俗易懂]写在前面:这是翻译自colah的一篇博客,原文关于LSTM神经网络模型的理解写的非常直观、简单易懂,所以翻译过来帮助大家学习理解LSTM模型。当然我不是按照原文一字不落的翻译,而是摘出其中对模型理解最有帮助的部分,然后用我自己理解的方式和语言来写的博文。这是我翻译博文的一贯做法。有兴趣的可以自行去看原文,比较简短,原博客地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/一、循环神经网络RNNRNN循环神经网络使用循环核来实

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

写在前面:这是翻译自colah的一篇博客,原文关于LSTM神经网络模型的理解写的非常直观、简单易懂,所以翻译过来帮助大家学习理解LSTM模型。

当然我不是按照原文一字不落的翻译,而是摘出其中对模型理解最有帮助的部分,然后用我自己理解的方式和语言来写的博文。这是我翻译博文的一贯做法。

有兴趣的可以自行去看原文,比较简短,原博客地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/


一、循环神经网络RNN

RNN循环神经网络使用循环核来实现特征在时间上的共享,记住每个时间步的输入信息。

1、RNN的网络结构

1.1 循环核

RNN中的一个循环核块通常这样表示的:

理解LSTM模型[通俗易懂]

循环核实现参数的时间共享,循环层用来提取时间信息。

理解LSTM模型[通俗易懂]

1.2 循环核按时间步展开

参数ht随着时间的变化而变化,输入数据x也随着变化而变化。训练优化的就是这些参数构成的矩阵,训练完成后,我们选择效果最好的模型,执行前向传播。

上面的一个循环核块按照时间步展开后是:

理解LSTM模型[通俗易懂]

理解LSTM模型[通俗易懂]

理解LSTM模型[通俗易懂]

图中标示的wx,h 、bh、wh,h 就是可训练的参数。这里展示的是每个时间步都有输出的情况。

理解LSTM模型[通俗易懂]

有些循环核块中间时间步是没有输出的,只有最后一个时间步才有输出,即没有h0,h1,..ht-1, 只有ht。样子是这样:

理解LSTM模型[通俗易懂]

1.3  循环计算层

向输出方向生长,循环核中记忆体的个数和参数可以自己设置

理解LSTM模型[通俗易懂]

TF中实现循环计算层的代码

tf.keras.layers.SimpleRNN(记忆体个数,
                          activation = '激活函数',  # 其中默认为tanh
                          return_sequences = Ture or False  # 是否每个时刻输出ht到下一层,
                                                            # 如果不是则仅最后时间步输出ht,False为默认值
                          
)

2、RNN循环核的计算过程

下面展示了循环核是如何根据这些可训练参数来计算ht的过程,也展示了可训练参数矩阵wx,h 、bh、wh,h又是如何做到在各时间步间做到参数共享的。非常直观!

理解LSTM模型[通俗易懂]

二、LSTM模型

LSTM模型要解决什么问题?为什么要不能直接使用RNN模型,而一定要设计LSTM模型来解决这个问题呢?这就是信息的长期依赖问题。

在预测模型中,如果预测所需要的信息离输入信息距离比较近,正确预测出的概率比较大。但如果我们要预测的信息距离输入的信息比较远,正确预测出的可能性就不那么高了。即便能使用RNN神经网络来做到很好的预测结果,那也是需要工程师们很小心的来调整参数的。

在这种情境下,长短期记忆网络,即LSTM模型诞生了。它很好的解决了答案的信息是在较早,还在较晚出现的输入信息中这个问题,预测效果很好,并且不需要工程师们费尽心力的来调参。

1、LSTM模型的结构

LSTM模型也是RNN模型,所有模型结构中也有循环核的部分,它的构成是这样的:

理解LSTM模型[通俗易懂]

我们先说明下这些图示的含义,

理解LSTM模型[通俗易懂] :表示一个神经网络层,即一层激活函数的运算

理解LSTM模型[通俗易懂]:表示特征向量的元素对元素级别的运算,即点运算。可以是乘法、加法或减法。

理解LSTM模型[通俗易懂]:表示特征向量的流向

理解LSTM模型[通俗易懂]:表示特征向量的拼接

理解LSTM模型[通俗易懂]:表示内容复制,但内容流向不同的路径

2、LSTM模型的核心思想

我们将用如下的一些概念来描述LSTM模型中的计算模块,它们就是LSTM模型的精髓所在了。现在可以不懂它们到底是什么,在接下下来我们逐步过计算过程的时候,这些概念就不言自明了。

理解LSTM模型[通俗易懂]

LSTM模型的核心思想是细胞态(cell state),就是图中上方水平的那一条贯穿整个循环核的数据流向线。

理解LSTM模型[通俗易懂]

这个细胞态(cell state)就像数据传输带一样,数据沿着它流动。只不过在有交叉点的地方需要数据会根据交叉点的含义做相应的改变。

LSTM模型的另外一个核心就是控制细胞态中的信息/数据被移除(remove)或增加(add)的结构,这个结构叫做门(gates)。

通过门(gates),我们可以控制信息是通过、不通过、还是部分通过,然后被融入到上方的数据流中。门是由sigmoid神经网络层和点运算 两部分组成的。其中sigmoid函数的输出是0-1之间的数值,所以通过它就描述了信息通过的比例情况。0意味着什么也没通过,1意味着数据全部通过。

一个门(gate)的组成结构如下:

理解LSTM模型[通俗易懂]

3、逐步拆解LSTM的计算过程

有了上面的这些基本概念和认识后,我们接下来开始逐步说明LSTM的循环核层,看LSTM模型的循环核到底做了怎样的计算过程。

3.1 第一道门“遗忘门”(forget fgate layer)

理解LSTM模型[通俗易懂]

前一个时间步的循环核的数据ht-1 和 第t个时间的输入特征xt拼接,进入sigmoid激活函数的神经网络层,生成的数据ft是0-1之间的数,代表了细胞态Ct-1应该保留的比率。0代表Ct-1数据全部遗忘,1代表Ct-1数据全部保留。

这里的可训练参数就是Wf ,bf 参数矩阵。

3.2 第二道门“输入门”(input gate layer)

理解LSTM模型[通俗易懂]

这一步要决定应该记住哪些新的信息到细胞态中。

这里有两步,第一步是“输入门”(input gate layer),即图中的sigmoid函数神经网络层,决定了应不应该更新数据、或者多大比例的去更新数据。

第二步是一个tanh神经网络层,这步生成了一个加入到细胞态的候选向量理解LSTM模型[通俗易懂]

将第一步和第二步的结果向量进行点乘,才最终确定如何去更新细胞态。

这里的可训练参数是Wi,bi,Wc,bc 参数矩阵。

3.3 更新细胞态(cell state)

理解LSTM模型[通俗易懂]

“遗忘门”和“输入门”的步骤都计算完成之后,就要开始更新细胞态了。Ct的更新公式如上,很清晰的说明了“遗忘门”、“输入门”到底是如何对长期、短期的信息来实现遗忘或记住的。

这里没有可训练的参数,都是之前已有的数据。

3.4 第三道门“输出门”(output gate layer)

理解LSTM模型[通俗易懂]

最后要做的就是确定输出数据,这是根据细胞态(cell state)、时刻t的输入信息xt、时刻t-1的循环核ht 来共同决定的。

首先xt 、ht-1经过一层sigmoid激活函数的神经网络层,即“输出门”,得到一个向量,它将决定我们应该按照多大概率输出数据。

而细胞态Ct经过一层tanh激活函数的神经网络,得到-1 到1之间的向量,这就是候选的输出数据。

将“输出门”的概率向量和候选的输出结果向量 进行点乘,就得到我们最终要输出的结果ht。

这里的可训练参数是Wo,bo 参数矩阵。

4、LSTM模型的变体

我们上面介绍的是一种非常典型的LSTM模型结构。不是所有的LSTM模型都是这样的结构,它有很多变体,在结构上是略有不同的。我们列举几个例子。

其中一个比较流行的LSTM变体是Gers & Schmidhuber (2000) 介绍的,这里引入了窥探孔连接“peephole connections.” 模型结构如下:

理解LSTM模型[通俗易懂]

另外一个变体使用了成对出现的“遗忘门”和“输入门”。这里的特点是成对出现的“遗忘门”+“输入门”=1, 即我们只有在遗忘一些信息的时候才会输入对应的一部门新信息。

理解LSTM模型[通俗易懂]

GRU模型(Gated Recurrent Unit)是由 Cho, et al. (2014)引入的,是一个非常瞩目的LSTM模型。它将“遗忘门”、“输入门”结合起来组成了一个“更新门”(update gate)的单元。除此外,它还融合了细胞态和隐藏状。GRU模型比经典的LSTM模型更简单,并且发展也非常迅速。

理解LSTM模型[通俗易懂]

除了上面的这些变体,还有很多其他的变体,比如Depth Gated RNNs Yao, et al. (2015), Clockwork RNNs  Koutnik, et al. (2014)等。

这么多的LSTM模型,那么到底哪个的效果最好,我们又该如何选择呢?

Greff, et al. (2015) 对上一些流行的LSTM变体做了对比,发现它们的效果差不多。Jozefowicz, et al. (2015)则比较了上千个RNN结构,发现在一些特定的任务中还是有模型比LSTM效果要好的。

总结

以上介绍了LSTM模型及其变种。RNN循环神经网络中还有其他值得关注的模型,比如注意力机制的RNN,以及Grid LSTM等。大家有兴趣就进一步的去学习和研究。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195303.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Spring学习——Spring IOC 学习整理资料整理

    自己动手写个spring IOC容器 http://blog.csdn.net/u010837612/article/details/50686573 XPath 语法 http://www.runoob.com/xpath/xpath-syntax.htmlspring ioc原理(看完后大家可以自己写一个spring) http://blog.csdn.net/it_man/artic

  • mysql8.0.26安装及配置超详细教程(ps怎么下载安装详细步骤图)

    文章目录:官网下载MySQL的安装包添加并配置my.ini文件配置系统变量并初始化MySQL安装并启动MySQLNavicat连接MySQL并修其密码安装过程中常见问题及其解决方法官网下载MySQL的安装包下载链接如下:MySQL8.0.20版本其他版本:MySQL8.0.16版本MySQL8.0.20版本压缩包解压后如下图所示:添加并配置my.ini文件在原解压根…

  • LaTeX参考文献类型

    LaTeX参考文献类型@article:期刊文章@book:有明确出版商的书@booklet:没有指定出版商或赞助商的印刷品@conference:会议文章,与inproceedings相同@inbook:书的一部分,可以是章节等@incollection:Apartofabookhavingitsowntitle@inproceedings:会议文章@manual:技术文档@mastersthesis:硕士论文@misc:大杂烩,当没有其他适合的时候使用这个类型@phdt

  • python机器学习手写算法系列——线性回归「建议收藏」

    python机器学习手写算法系列——线性回归「建议收藏」本文致力于手把手教你实现一个最简单的机器学习模型–一元线性回归模型。短短的14行代码,就实现了。希望读完以后,你也能自己实现它。并对线性回归有更好的了解,或者从不了解到了解。

  • 史蒂芬周博客地址[通俗易懂]

    史蒂芬周博客地址[通俗易懂]http://www.sdifen.com/

  • Python读写LMDB文件「建议收藏」

    Python读写LMDB文件「建议收藏」LMDB的全称是LightningMemory-MappedDatabase,它的文件结构简单,包含一个数据文件和一个锁文件。LMDB文件可以同时由多个进程打开,具有极高的数据存取速度,访问简单,不需要运行单独的数据库管理进程,只要在访问数据的代码里引用LMDB库,访问时给文件路径即可。让系统访问大量小文件的开销很大,而LMDB使用内存映射的方式访问文件,使得文件内寻址的开销非常小,使…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号