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

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

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

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


相关推荐

  • whl文件安装方法

    whl文件安装方法   whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装问题描述:whl下载了后不会安装解决方法:1.把下载的文件拖到桌面2.进入cmd命令行3.使用cd进入whl文件属性标识的目录)(红色框)4.使用“pipinstall文件名”安装下载的文件(绿色框)5.安装完成…

    2022年5月30日
    54
  • .Net之路(十三)数据库导出到EXCEL

    .Net之路(十三)数据库导出到EXCEL

    2021年12月5日
    116
  • IDEA热部署设置(自动/手动 两种方式)

    IDEA热部署设置(自动/手动 两种方式)1.导包<!–热部署依赖包该包包含开发所需的所有工具热部署就包含在其中–><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dev…

    2022年6月10日
    302
  • 循环队列–C语言实现–数据结构「建议收藏」

    循环队列–C语言实现–数据结构「建议收藏」循环队列–C语言实现–数据结构目录循环队列C语言实现数据结构目录一要求二循环队列三循环队列的算法设计1建立循环队列2置空队列3入队4出队5打印队四程序1程序的结构2程序源码五程序测试1入队列2出队列3打印队列六源程序及封装软件下载下载地址格格是一枚智能专业的本科在校生很愿意和各位大佬交流如果大家有愿意交朋友的可以加格格的QQ4460

    2022年6月2日
    39
  • c++语言截取字符串,详解C++ string常用截取字符串方法

    c++语言截取字符串,详解C++ string常用截取字符串方法string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求:find(stringstrSub,npos);find_last_of(stringstrSub,npos);其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子字符串首次出现的位置,否则返回-1;注:(1)find_last_of的npos为从末尾开始寻找的位置。(2)下文中用到的strs…

    2022年5月19日
    32
  • 奔图m7160dw驱动_奔图打印机m7100dn

    奔图m7160dw驱动_奔图打印机m7100dn奔图M7100dW打印机驱动是专门为奔图旗下的M7100dW型号打印机打造的驱动程序。它能够为你解决打印机常见的无法扫描、无法识别等问题。他是连接打印机与电脑的桥梁,让你更好的操作这款的打印机。【打印机特色】1、操作便捷,乐在其中ECOSYSP2135dn外观小巧,空间适应度很高,可以更好地满足用户办公空间布置的需要。而且外形美观,放置在办公桌上能够与办公家具很好地融合在一起,营造出和谐的办公室…

    2022年8月30日
    4

发表回复

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

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