LSTM神经网络

article/2025/9/22 12:39:30

       LSTM被广泛用于许多序列任务(包括天然气负荷预测,股票市场预测,语言建模,机器翻译),并且比其他序列模型(例如RNN)表现更好,尤其是在有大量数据的情况下。 LSTM经过精心设计,可以避免RNN的梯度消失问题。消失梯度的主要实际限制是模型无法学习长期的依赖关系。但是,通过避免消失的梯度问题,与常规RNN相比,LSTM可以存储更多的记忆(数百个时间步长)。与仅维护单个隐藏状态的RNN相比,LSTM具有更多参数,可以更好地控制在特定时间步长保存哪些记忆以及丢弃哪些记忆。例如,在每个训练步骤中都必须更新隐藏状态,因此RNN无法确定要保存的记忆和要丢弃的记忆。

     

LSTM可以看作是一个更高级的RNN系列,主要由五个不同部分组成。

●单元状态:这是LSTM单元的内部单元状态(例如,记忆)。

●隐藏状态:这是用于计算预测结果的外部隐藏状态

●输入门:确定发送到单元状态的当前输入量

●忘记门:确定发送到当前单元状态的先前单元状态的数量

●输出门:确定隐藏状态下输出的单元状态数

可以将RNN加载到单元架构中,如下所示。该单元输出的状态取决于前一个单元的状态和当前输入(使用非线性激活函数)。但是,在RNN中,单元状态始终随每个输入而变化。这将不断更改RNN的单元状态。此行为对于保留长期依赖关系非常不利。 LSTM可以决定何时以单位状态替换,更新或忘记存储在每个神经元中的信息。这意味着LSTM具有防止单元状态改变的机制,从而保留了长期依赖关系。

采用引入门控机制来实现这种效果。对于单元需要执行的每个操作,LSTM都有一个相应的门。门在0和1之间连续(通常是S型函数)。 0表示没有信息通过门,1表示所有信息都通过门。 LSTM对单元中的每个神经元使用一个这样的门。如前所述,这些门控制以下内容:

●当前有多少输入被写入单元状态(输入门)

●先前单元状态(忘记门)遗忘的信息量

●从单元状态到最终隐藏状态(输出门)的信息输出量

 

      每个门确定发送到状态变量(即,最终的隐藏状态或单元状态)的各种数据(例如,当前输入,先前的隐藏状态或先前的单元状态)的数量。每条线的粗细代表进出闸门的信息量。例如,在此图中,输入门允许从当前输入中获取更多信息,而不是先前的最终隐藏状态(从输入门进入入状态单元),而遗忘门可以可以从先前最终隐藏状态获得更多信息。而不是当前输入,通过遗忘门进入当前单元状态:

                                    

LSTM主要由以下三个门组成。

●输入门:此门输出介于0(输入未写入单元状态)到1(输入已完全写入单元状态)之间的值。Sigmoid激活用于将输出压缩为0到1之间。

●遗忘门:这是一个S型门,其中0(在计算当前单元状态时完全忘记先前的单元状态)和1(在计算当前单元状态时完全忘记先前的单元状态)。

●输出门:这是一个Sigmoid门,输出0(计算最终状态将完全破坏当前的单元状态)和1(计算最终隐藏状态将完全使用当前单元状态)。

 

                                   

       这是一个非常概括的图,其中隐藏了一些细节以避免混淆。为清楚起见,同时显示了LSTM和回路连接。右图显示了具有循环连接的LSTM,左图显示了展开循环连接后的相同LSTM,因此模型中没有环形连接。

 

输入门i_{t}接收当前输入x_{t}和最后的最终隐藏状态h_{t-1}作为输入,并根据以下公式进行计算i_{t}

       i_{t}=\sigma (W_{ix}x_{t}+W_{ih}h_{t-1}+b_{i})

计算后,值为0表示当前输入的任何信息都不会进入单位状态,值为1意味着当前输入的所有信息都将进入单位状态。然后,以下公式将计算另一个值,称为候选值。 它用于计算当前单元状态。

c_{t}\tilde{~}=tanh(W_{cx}x_{t}+W_{ch}h_{t-1}+b_{c})

遗忘门将执行以下操作: 遗忘门值为0表示没有c_{t-1}的任何信息传递给c_{t}的计算,值为1意味着所有c_{t-1}的信息都传播给c_{t}

f_{t}=\sigma (W_{fx}x_{t}+W_{fh}h_{t-1}+b_{f})

接下来看一下当前状态的计算公式也就是说,当前状态是以下各项的组合:

●要记住/记住的先前单元状态的信息;

●添加/舍弃当前输入信息。

c_{t}=f_{t}c_{t-1}+i_{t}c_{t}\tilde{~}

LSTM单元的最后状态h_{t}计算:

o_{t}=\sigma (W_{ox}x_{t}+W_{oh}h_{t-1}+b_{o})

h_{t}=o_{t}tanh(c_{t})

最终隐藏状态的输出与前一个序列的隐藏状态、当前的输入和当前单元状态值有关,用一个tanh激活函数将当前单元状态的值压缩到-1到1之间。先前隐藏状态与当前输入的值通过sigmoid函数转换后与当前单元状态通过压缩后的值进行相乘,就会把先前的状态信息与此时的输入信息进行保留或舍弃得到一个新的隐藏状态值。

                          

在这里,从更大的角度来看,我们展示了如何针对序列学习问题,随着时间的推移扩展LSTM单位,以接收该单元的前一个状态并计算下一个状态。但是,这还不足以做任何有用的事情。即使实际上可以创建一个可以对序列进行建模的LSTM链,也没有输出或预测。但是,如果希望LSTM实际使用学习到的信息,则需要一种从LSTM提取最终输出的方法。 因此,在LSTM的顶部添加一个softmax层(权重Ws和偏置bs)。 最终输出结构如图5-14所示:

 

接下来,来看看LSTM和标准RNN之间的区别。与标准RNN相比,LSTM的结构更为复杂。主要区别之一是LSTM具有两个不同的状态,一个单元状态ct和一个最终的隐藏状态ht。但是,RNN中只有一个隐藏状态。另一个很大的不同是LSTM具有三个不同的门,这使LSTM在计算最终隐藏状态时可以更好地控制其如何处理当前输入和先前的单元状态。

具有两个不同的状态是非常有利的。这种机制使最终的隐藏状态变化相对较慢,即使单元格的状态变化很快。因此,单元状态学习短期和长期依赖性,但最终的隐藏状态仅反映短期依赖性和/或长期依赖性。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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

相关文章

(神经网络深度学习)--循环神经网络LSTM

一、什么是LSTM: 如果你经过上面的文章看懂了RNN的内部原理,那么LSTM对你来说就很简单了,首先大概介绍一下LSTM,是四个单词的缩写,Long short-term memory,翻译过来就是长短期记忆,是RNN的一种…

机器学习——人工神经网络模型LSTM

LSTM的学习 学习目标: 1理解什么是人工神经网络。2深入理解LSTM(长短期记忆网络)3Code 浅析人工神经网络: 在谈人工神经网络模型之前我们先来了解一下生理上的神经网络。 下面是一张对比图: Neural Science Compute…

LSTM神经网络详解

LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。 长短时记忆网络的思路: 原始 RNN 的隐藏层只有一个状态,即h&am…

LSTM神经网络介绍

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 引言一、介绍1.1什么是LSTM?1.2基础知识1.2.1门控机制1.2.2 相关激活函数1.2.3网络参数介绍 二、LSTM网络架构2.1架构图 三、LSTM的门3.1遗忘门3.2输入门3.3输出门…

大白话理解LSTM神经网络(附实例讲解)

前言 本文章为个人学习笔记整理,所学习的内容来自b站up主老弓的学习日记,附有实例讲解。 归类 长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多&a…

Idea如何导入一个SpringBoot项目

最近公司要求开发工具要用Idea,作为一个eclipse的老员工,记录一下Idea中遇到的坑 刚开始用Idea从Git上导入一个项目时,遇到了很多坑,网上有很多方法,我不多做介绍。只说明一下我使用的方法。 1.本地新建一个文件夹&a…

idea导入项目框架的方法

学习时,使用IDEA的时候,经常需要导入项目框架,下面操作介绍如何导入项目框架。 打开需要导入的项目 打开方式: 打开 idea ,选择 Import Project 也可以进入idea后,选择 Flie --> New --> Project …

IDEA导入Eclipse项目

背景:用习惯了idea再去用eclipse实在用的不习惯,于是将老的eclipse项目导入到eclipse,网上有很多教程,看了很多博客都不行,一直报错,各种报错,现在终于好了,我们一起来看看怎么将ecl…

关于新版idea如何导入项目

现今有很多同学都发现idea怎么找不到import project这个按钮了,我也遇到了这个问题,经过研究发现,之前使用import project最关键还是在于project form Existing Sources。 而就在打开项目后,File-->New-->Project form Exi…

idea导入项目后没有被识别为maven项目的解决办法

开发中遇到了idea导入项目后没有被识别为maven项目,使用下面方法即可 1、首先点击工具栏最左边的 Help 再点击 Find Action ;或者使用快捷键 CtrlShiftA 2、接着在输入框中输入 maven projects ,会弹出一个 Add Maven Projects 选项&#xf…

IDEA导入web项目并启动

导入项目 依次点击idea左上角的File->Project Structure->project 修改SDK、Language level,选择自己电脑对应的jdk版本,为web的运行提供jdk的环境 第二步,依次点击Facts->Web 点击Artifacts->Web Application:Exploded->…

Java代码实例2,idea导入项目后,没有项目结构

目录 专栏导读一、idea导入项目后,没有项目结构二、解决方案1、点击file -> project structure -> Modules2、点击右上角加号 --> import Modules3、选择import modules from external model4、导入后,就可以显示项目的目录结构了。 专栏导读 &…

IntelliJ IDEA导入Maven项目

(1)项目导入, 点击intelliJ IDEA的Open按钮, 找到项目目录下pom的文件,然后点击ok (先admin, 在biz-admin, 再加dal) 由于之前导入过这个项目,所以现在要先删除再导入 导入后编译器的右侧就会出现Maven Projects的侧边…

新手小白如何用IDEA成功导入并运行项目(IDEA+gradle+mysql)

因为我也是最近刚开始使用 IntelliJ IDEA ,以下是我的一个成功在浏览器运行出项目界面的过程,主要分为5步走战略,仅供参考。 1、打开IDEA 选择 file–>Open–>找到自己所要导入项目–>选着项目文件里的build.gradle文件–>点击…

eclipse项目导入idea

目录 一、IDEA的导入 二、项目配置 三,在IntelliJ IDEA配置Tomcat 一、IDEA的导入 1、首先选择File->New->Project from Existing sources/Project form Version Control,如果项目在你的本地则选择 Project from Existing sources, 如果你想从SVN上直接导入…

idea导入项目全部爆红问题怎么解决

背景 今天导入Git上拉下来的项目,又双叒爆红了。就像代码来大姨妈一样,紧张地手足无措。让我们一起看下咋回事。 二. 走过的路 为数不多的曾经爆红的经验告诉我,这一定是maven大哥们出问题了! 于是我开始检查: IDEA…

IDEA导入一个本地项目并运行

IDEA导入一个本地项目并运行 操作如下: 至此,一直点击下一步即可导入项目成功 此时项目想要运行,还需要配置Artifacts,如下图: 由于时间原因,稍后会补充更多细节

eclipse导入idea项目

eclipse导入已存在的项目,之前是用的idea 1、使用idea打开项目 ctrlaltshifts 2、打开eclipse,选择import,再选择 Exsting Projects into Workspace 3、用eclipse打开后,再用idea右键新建一个类发现没有 java class 选项了&#…

IntelliJ IDEA导入本地SpringBoot项目最超详细教程

前言 废话不多说,可是换成idea开发又该怎样导入呢?整合最近我已需要学习别人的项目,希望把这个过程记录下来帮助大家学习.1.打开open,去寻找对应的位置文件 2.如何引入的问题 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8874d34b7be648138027d8d02dc88c2b…

在IDEA中导入本地项目

最近的软件构造实验需要把项目交到GitHub上,想要验证一下交上去的东西能不能运行,打算从GitHub上把提交的项目克隆下来,那克隆下来的项目怎么导入到IDEA中运行呢 第一步:从GitHub上clone代码-Download ZIP 第二步:下载…