理解LSTM模型[通俗易懂]

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


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等。大家有兴趣就进一步的去学习和研究。

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【比赛】【树上路径(phantasm)】

    【比赛】【树上路径(phantasm)】—恢复内容开始—题目大意:求1,2,…,n有多少个长为m的子序列a,满足  a1=1,am=n  ∀i,ai+1−ai≥k保证这样的子序列存在。只需判断方案数的奇偶性。数据有T组。n,m,k≤109,T≤2×106.//dfs枚举集合//复杂度预估O(T*2^n)/…

    2022年5月30日
  • Swift注释

    Swift中的普通注释与Objective-C中的一致,大概分为以下三种//单行注释何问起/ *多行注释hovertree.com*////标记注释1 ht

    2021年12月26日
  • ssm管理系统课题_p2实验室

    ssm管理系统课题_p2实验室开发目的方便高效地实验室设备统一管理,除了实现基本的增删改查,还提供借用、归还、购买和问题反馈功能,可实现对实验室设备的基本业务的处理本项目由本人负责开发完成,项目能保证正常运行,当然其中不免也会有缺漏或不完善的地方解决方案1.后端Java框架使用spring+springmvc+mybatisspring功能是实现参数参数注入,请求分发处理,对数据库操作进行事务控制,其中mybatis使用注解查询,整体上大部分使用xml配置,少部分使用注解2.前端使用HTML+javascript+css+j

    2022年10月13日
  • jQuery的弹出窗口插件colorbox

    jQuery的弹出窗口插件colorbox

    2021年8月8日
  • 一加6手机图片中的文字如何识别?[通俗易懂]

    一加6手机图片中的文字如何识别?[通俗易懂]一加6手机很多人都想买吧?买了手机的朋友手机里就有很多照片,一加6手机图片中的文字如何识别?文字识别都是识别大量的文字,减轻办公人员负担的。1在手机上输入PDF阅读器,然后开始识别相册图片的文字2打开就是这样的界面,找到倒数第2个的小功能3选择拍照识别中的相册,接下来添加图…

    2022年5月1日
  • 电脑开机显示“DISK Boot Failure,Insert System Disk And Press Enter”

    电脑开机显示“DISK Boot Failure,Insert System Disk And Press Enter” 电脑开机自检时无法通过,并在界面出现“DISKBootFailure,InsertSystemDiskAndPressEnter”的错误提示。这样的问题该如何解决?今天小编教大家如何排除故障。 造成电脑开机,屏幕上出现“DISKBootFailure,InsertSystemDiskAndPressEnter”故障的原因有: (1)由于硬盘,光驱连在同一条数据线上,但…

    2022年7月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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