LSTM模型结构讲解

article/2025/10/2 12:57:29

人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。

传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题——使用电影中先前的事件推断后续的事件。

RNN 解决了这个问题。RNN 是包含循环的网络,允许信息的持久化。

                                                  

在上面的示例图中,神经网络的模块A正在读取某个输入x{_i} ,并输出一个值h{_i} 。循环可以使得信息从当前步传递到下一步。

这些循环使得 RNN 看起来非常神秘。然而,如果你仔细想想,这样也不比一个正常的神经网络难于理解。RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:

展开的 RNN

链式的特征揭示了 RNN 本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。

我建议大家参考 Andrej Karpathy 的博客文章——The Unreasonable Effectiveness of Recurrent Neural Networks 来看看更丰富有趣的 RNN 的成功应用。

而这些成功应用的关键之处就是 LSTM 的使用,这是一种特别的 RNN,比标准的 RNN 在很多的任务上都表现得更好。几乎所有的令人振奋的关于 RNN 的结果都是通过 LSTM 达到的。这篇博文也会就 LSTM 进行展开。

1.长期依赖(Long-Term Dependencies)问题

RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。如果 RNN 可以做到这个,他们就变得非常有用。但是真的可以么?答案是,还有很多依赖因素。

有时候,我们仅仅需要知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测 “the clouds are in the sky” 最后的词,我们并不需要任何其他的上下文 —— 因此下一个词很显然就应该是 sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。

不太长的相关信息和位置间隔

但是同样会有一些更加复杂的场景。假设我们试着去预测“I grew up in France... I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。

不幸的是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。

相当长的相关信息和位置间隔

在理论上,RNN 绝对可以处理这样的 长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。Bengio, et al. (1994)等人对该问题进行了深入的研究,他们发现一些使训练 RNN 变得非常困难的相当根本的原因。

然而,幸运的是,LSTM 并没有这个问题!

2. RNN与LSTM的对比

RNN:
在这里插入图片描述
LSTM:
在这里插入图片描述
其中的notation:
在这里插入图片描述

这里要注意:上图中四个黄框,每一个都是普通的神经网络,激活函数就是框上面所标注的。

通过对比可以看出,RNN的一个cell中只有一个神经网络,而LSTM的一个cell中有4个神经网络,故一个LSTM cell的参数是一个RNN cell参数的四倍。
在这里插入图片描述
从上图也可以看出,原来的一个RNN cell只需要存储一个隐藏层状态h,而一个LSTM cell需要存储两个状态c和h。
在这里插入图片描述
LSTM比RNN多了一个细胞状态,就是最上面一条线(也就是c),像一个传送带,信息可以不加改变的流动。即Ct-2可能和Ct+1存储的信息可能非常相似,所以LSTM可以解决RNN长依赖的问题。

3. LSTM信息的流动

在这里插入图片描述
一个LSTM cell有3个门,分别叫做遗忘门(f门)输入门(i门)输出门(o门)。要注意的是输出门的输出ot并不是LSTM cell最终的输出,LSTM cell最终的输出是ht和ct。
这三个门就是上图中三个标着σ的黄色的框。sigmoid层输出0-1的值,表示让多少信息通过,1表示让所有的信息都通过。

LSTM的输入: C{_{t-1}},h{_{t-1}}​和x{_{t}} 
LSTM的输出: C{_t},h{_t}

注意上面公式中的∗是对应元素乘,而不是矩阵的乘法

(1)忘记门:扔掉信息(细胞状态)

å¨è¿éæå¥å¾çæè¿°

第一步是决定从细胞状态里扔掉什么信息(也就是保留多少信息)。将上一步细胞状态中的信息选择性的遗忘 。
实现方式:通过sigmoid层实现的“忘记门”。以上一步的h{_{t-1}}​和这一步的x{_{t}} ​作为输入,然后为C{_{t-1}}​里的每个数字输出一个0-1间的值,记为f_{t},表示保留多少信息(1代表完全保留,0表示完全舍弃)
例子:让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的类别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
例如,他今天有事,所以我… 当处理到‘’我‘’的时候选择性的忘记前面的’他’,或者说减小这个词对后面词的作用。

(2)输入层门:存储信息(细胞状态)

å¨è¿éæå¥å¾çæè¿°

第二步是决定在细胞状态里存什么。将新的信息选择性的记录到细胞状态中。 实现方式:包含两部分,
       1.sigmoid层(输入门层)决定我们要更新什么值,这个概率表示为i{_t} 
       2.tanh层创建一个候选值向量\widetilde{C{_t}}​,将会被增加到细胞状态中。 我们将会在下一步把这两个结合起来更新细胞状态。
例子:在我们语言模型的例子中,我们希望增加新的主语的类别到细胞状态中,来替代旧的需要忘记的主语。 例如:他今天有事,所以我…当处理到‘’我‘’这个词的时候,就会把主语我更新到细胞中去。

更新细胞状态(细胞状态)

在这里插入图片描述
注意上面公式中的∗是对应元素乘,而不是矩阵的乘法

更新旧的细胞状态
实现方式: f_{t}表示忘记上一次的信息C{_{t-1}}的程度,i{_t}表示要将候选值\widetilde{C{_t}}​加入的程度, 这一步我们真正实现了移除哪些旧的信息(比如上一句的主语),增加哪些新信息,最后得到了本细胞的状态C{_t} ​。

(3)输出层门:输出(隐藏状态)

å¨è¿éæå¥å¾çæè¿°

最后,我们要决定作出什么样的预测。 实现方式:

  1. 我们通过sigmoid层(输出层门)来决定输出的本细胞状态C{_t} 的哪些部分;
  2. 然后我们将细胞状态通过tanh层(使值在-1~1之间),然后与sigmoid层的输出相乘得到最终的输出h{_t} ​。

所以我们只输出我们想输出的部分。 例子:在语言模型的例子中,因为它就看到了一个 代词,可能需要输出与一个 动词相关的信息。例如,可能输出是否代词是单数还是复数,这样如果是动词的话,我们也知道动词需要进行的词形变化。
例如:上面的例子,当处理到‘’我‘’这个词的时候,可以预测下一个词,是动词的可能性较大,而且是第一人称。 会把前面的信息保存到隐层中去。

4.LSTM的各个变量

在这里插入图片描述
⊙ 是element-wise乘,即按元素乘

介绍下各个变量的维度,LSTM cell的输出h{_t} 的维度是黄框里隐藏层神经元的个数,记为d,即矩阵W{_f},W{_i},W{_c},W{_o}​的行数。t 时刻LSTM cell的输入x{_{t}}的维度记为 n,最终的输入是h{_{t-1}}x{_{t}}的联合,即[h{_{t-1}}​, x{_{t}}] ,其维度是d+n,所有矩阵(包括W{_f},W{_i},W{_c},W{_o}​)的维度都是[d,d+n],所有的向量包括(b{_f},b{_i},b{_c},b{_o}​,f{_t},i{_t},o{_t},h{_{t}},h{_{t-1}},C{_t},C{_{t-1}}和​\widetilde{C{_t}})维度都是d。(为了表示、更新方便,我们将bias放到矩阵里)
以fW{_f}举例:
在这里插入图片描述
同理:
在这里插入图片描述
合并为一个矩阵就是:
在这里插入图片描述

5.LSTM 的变体

我们到目前为止都还在介绍正常的 LSTM。但是不是所有的 LSTM 都长成一个样子的。实际上,几乎所有包含 LSTM 的论文都采用了微小的变体。差异非常小,但是也值得拿出来讲一下。

其中一个流形的 LSTM 变体,就是由 Gers & Schmidhuber (2000) 提出的,增加了 “peephole connection”。是说,我们让 门层 也会接受细胞状态的输入。

peephole 连接

上面的图例中,我们增加了 peephole 到每个门上,但是许多论文会加入部分的 peephole 而非所有都加。

另一个变体是通过使用 coupled 忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。

coupled 忘记门和输入门

另一个改动较大的变体是 Gated Recurrent Unit (GRU),这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。

GRU

这里只是部分流行的 LSTM 变体。当然还有很多其他的,如Yao, et al. (2015) 提出的 Depth Gated RNN。还有用一些完全不同的观点来解决长期依赖的问题,如Koutnik, et al. (2014) 提出的 Clockwork RNN。

要问哪个变体是最好的?其中的差异性真的重要吗?Greff, et al. (2015) 给出了流行变体的比较,结论是他们基本上是一样的。Jozefowicz, et al. (2015) 则在超过 1 万种 RNN 架构上进行了测试,发现一些架构在某些任务上也取得了比 LSTM 更好的结果。

Jozefowicz等人论文截图

结论

刚开始,我提到通过 RNN 得到重要的结果。本质上所有这些都可以使用 LSTM 完成。对于大多数任务确实展示了更好的性能!

由于 LSTM 一般是通过一系列的方程表示的,使得 LSTM 有一点令人费解。然而本文中一步一步地解释让这种困惑消除了不少。

LSTM 是我们在 RNN 中获得的重要成功。很自然地,我们也会考虑:哪里会有更加重大的突破呢?在研究人员间普遍的观点是:“Yes! 下一步已经有了——那就是注意力!” 这个想法是让 RNN 的每一步都从更加大的信息集中挑选信息。例如,如果你使用 RNN 来产生一个图片的描述,可能会选择图片的一个部分,根据这部分信息来产生输出的词。实际上,Xu, et al.(2015)已经这么做了——如果你希望深入探索注意力可能这就是一个有趣的起点!还有一些使用注意力的相当振奋人心的研究成果,看起来有更多的东西亟待探索……
注意力也不是 RNN 研究领域中唯一的发展方向。例如,Kalchbrenner, et al. (2015) 提出的 Grid LSTM 看起来也是很有前途。使用生成模型的 RNN,诸如Gregor, et al. (2015) Chung, et al. (2015) 和 Bayer & Osendorfer (2015) 提出的模型同样很有趣。在过去几年中,RNN 的研究已经相当的燃,而研究成果当然也会更加丰富!

 

 

 


http://chatgpt.dhexx.cn/article/YS75Nvub.shtml

相关文章

LSTM 模型实践一

简单介绍 原因:普通的RNN(Recurrent Neural Network)对于长期依赖问题效果比较差,当序列本身比较长时,神经网络模型的训练是采用backward进行,在梯度链式法则中容易出现梯度消失和梯度爆炸的问题。 解决&…

理解LSTM模型

写在前面:这是翻译自colah的一篇博客,原文关于LSTM神经网络模型的理解写的非常直观、简单易懂,所以翻译过来帮助大家学习理解LSTM模型。 当然我不是按照原文一字不落的翻译,而是摘出其中对模型理解最有帮助的部分,然后…

LSTM模型预测时间序列(快速上手)

写在前面 LSTM模型的一个常见用途是对长时间序列数据进行学习预测,例如得到了某商品前一年的日销量数据,我们可以用LSTM模型来预测未来一段时间内该商品的销量。但对于不熟悉神经网络或者对没有了解过RNN模型的人来说,想要看懂LSTM模型的原理…

基于优化LSTM 模型的股票预测

LSTM自诞生以来,便以其在处理时间序列方面的优越性能在预测回归,语音翻译等领域广受青睐。今天,主要研究的是通过对LSTM模型的优化来实现股票预测。其实,关于股票预测,LSTM模型已经表现的相当成熟,然而&…

【机器学习】LSTM模型原理

文章目录 1. 序言2. RNN的基本概念与网络结构2.1 概念2.2 结构2.3 要素 3. LSTM的基本概念与网络结构3.1 概念3.2 结构3.3 要素 4. LSTM网络结构的说明5. 补充 1. 序言 临渊羡鱼不如归而结网 学习的目的是为了应用 2. RNN的基本概念与网络结构 LSTM是在RNN的基础上演进而来…

LSTM模型

LSTM比RNN复杂很多,RNN只有一个参数矩阵A,LSTM有4个(遗忘门,输入门,更新值,输出门) LSTM有一个非常重要的传输带Ct,过去的信息通过这个传输带送给下一时刻,不会发生太大变…

时间序列预测——LSTM模型(附代码实现)

目录 模型原理 模型实现 导入所需要的库 设置随机数种子 导入数据集 打印前五行数据进行查看 数据处理 归一化处理 查看归一化处理后的数据 将时间序列转换为监督学习问题 打印数据前五行 划分训练集和测试集 查看划分后的数据维度 搭建LSTM模型 得到损失图 模型…

phpstorm汉化操作

问题描述:如何进行phpstorm的汉化(原始为英文) 解决办法: 1.下载汉化包—resources_cn; 2.将汉化包添加到phpstorm文件夹下的lib文件夹内(其中的resources_en可以不删除); 3.重启Ph…

php 教程 phpstorm

目录 php开发流程 php 编辑工具 phpstudy phpstorm如何配置php环境 php 语言 什么是URI URL和URI差别: 一、HTTP和HTTPS的基本概念 经典类型和自定义 实现本机域映射​ php开发流程 1、下载php语言包 php作为一门语言,本身可以是一个纯绿色版的…

【PHP】Phpstorm环境配置与应用

一. Phpstorm环境配置 (1)点击左上端File,选择下拉框中的setting,进入环境配置页面,如下图 (2)如下图点击1处,选中下拉框中的Deployment,Type(图示2处),下拉框中选择Local or mounted folder …

PHP开发工具PhpStorm v2022.3——完全支持PHP 8.2

PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。 PhpStorm v20…

phpstorm10.0.3汉化方法:

PhpStorm10.0.3汉化方法: 1、安装原版PhpStorm10.0.3,在打开最新的PhpStorm10汉化包下载地址: http://pan.baidu.com/s/1bouoyF9 2、双击用压缩软件打开resources_cn.jar(注意是打开而不是解压出来),将下载的汉化包…

PHPSTORM 中文版/汉化 即常用快捷键和配置

PHPStorm配置和快捷键大全(最新版)支持Win和Mac http://blog.csdn.net/fenglailea/article/details/53350080 推荐 1.汉化/中文版 使用的是开源的,翻译的还好,因为是开源,有些人不自觉,在翻译过程中加入广告 开源汉化地址&…

phpstorm10安装并汉化

一、下载phpstorm 下载地址:https://pan.baidu.com/s/1R64ZROVP1ljGbYfCwWjwxA 二、一直点击下一步安装即可 注意:第3步的时候选择一下支持的后缀 三、安装完毕,进行汉化 1、来到安装目录,PhpStorm 10.0.3\lib 目录下 2、…

PhpStorm 中文设置教程

本文仅供学习交流使用,如侵立删!demo下载见文末 Pycharm中文设置教程 1.首先打开PhpStorm ,点击file-settings.找到plugins,搜索Marketplace,然后搜索chinese。 2.找到之后直接点击安装. 3.安装完成之后点击Restart。…

PHPStorm运行PHP代码(新手教程)

PHPStorm是流行对PHP及前端开发IDE,在开发者初次使用写PHP代码时该怎么用呢~ 1、Create New Project 2、选择PHP Empty Project,并新建一个空目录(名字建议为英文,目录不要放在C盘!!!&#xff…

PHP教程二:开发工具 phpstorm 的下载、安装与激活

接着上一章节,我们继续开发工具的安装 phpstorm 的概括:PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检…

下载phpstorm2021汉化包

网址 网址:https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack---- 点安装到phpstorm 打开phpstorm2021版本 点file-------seeting-------k~(省略了)-----搜索chinese--------最后点安装就可以了。

phpstorm官方汉化包

注意:这个汉化包是官方出品的,并不是网友做的,所以有很强的兼容性不会出现各种乱七八糟bug以及汉化不完全的现象 先一睹为快 我们可以看到全都有翻译 以前的我还觉得那么多选项和按钮都不敢乱点,或者点之前都要百度一下英文 现在可以随便…

PHP开发工具phpstorm的安装及汉化详解

PHP开发工具phpstorm的安装及汉化详解 最近在研究PHP,PHP是目前较为流行的一款PHP开发工具,内容丰富,功能强大,下面将详细介绍一下他的具体安装及汉化步骤。 下载 这个是PHPstorm官网地址,可直接免费下载 我下载的是…