LSTM神经网络介绍

article/2025/9/22 13:14:45

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 引言
  • 一、介绍
    • 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的简单实例
  • 参考


引言

传统的神经网络在处理与事件发生的时间轴有关系的问题时,如果需要联系并考虑上下文的时候就无能为力了,比如语音识别,机器翻译,时间序列等,因为他们的输出只是由当前的输入决定。所以就提出了RNN,了解RNN基本原理之后,也就为研究LSTM网络(long short-term memory,长短时记忆网络)做了铺垫。

一、介绍

1.1什么是LSTM?

LSTM主要通过引入门控机制来控制信息的累积速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息,由此改善循环神经网络(RNN)的长程依赖问题以及缓解长序列训练过程中的梯度消失问题。

1.2基础知识

1.2.1门控机制

在数字电路中,门(gate)为一个二值变量(0,1),0代表关闭状态、不许任何信息通过;1代表开放状态,允许所有信息通过。
gate 在LSTM网络中实际上就是一层全连接层,输入是一个向量,输出是一个 0到1 之间的实数向量。表示以一定的比例允许信息通过。

1.2.2 相关激活函数

sigmoid函数:Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限。
tanh函数:tanh函数的输出映射在(-1,1)之间,在一定范围的内,比Sigmoid函数收敛速度更快。

1.2.3网络参数介绍

二、LSTM网络架构

2.1架构图

前向传播共六个公式如图所示。
LSTM三个门的作用
(1)遗忘门f:决定上一个时刻的记忆单元状态需要遗忘多少信息,保留多少信息到当前记忆单元状态。
(2)输入门i:控制当前时刻输入信息候选状态有多少信息需要保存到当前记忆单元状态。
(3)输出门o:控制当前时刻的记忆单元状态有多少信息需要输出给外部状态。

三、LSTM的门

3.1遗忘门

LSTM第一步是用来决定放弃或者保留什么信息。这个决定由“forget gate”门通过sigmoid进行选择性忘记,越接近0表示越应该忘记,越接近1表示越应该保留。


请注意这里参数应为向量输入来代表具体信息,我就先用1或0表示所有信息方便直观理解。

实例:设这一层所有权重 W f W_f Wf=100;偏置 b f b_f bf=1, h t − 1 h_{t-1} ht1=0(前一时刻没有任何隐藏信息), C t − 1 C_{t-1} Ct1=1(前一时刻记忆单元保留的张三信息), x t x_t xt=1(输入李四的信息),则由公式计算得 f t f_t ft≈1,表示需要保留信息(即当前时刻遗忘门决定保留之前的张三信息),由此我们实现了继续保留历史信息传递给当前记忆单元状态 C t C_t Ct。反之 f t f_t ft≈0,表示需要忘记之前的信息。

3.2输入门

第二步是产生我们需要更新的新信息。这一步包含两部分,“input gate”通过sigmoid来决定哪些值用来更新,tanh用来生成新的候选值。然后将sigmoid的输出值乘以tanh输出的候选信息,也即sigmoid的输出值决定tanh输出值中的内容哪些是重要的需要留下来的信息。
在这里插入图片描述

实例:设这一层权重 W i W_i Wi=100; W c W_c Wc=100偏置 b i b_i bi=1, b c b_c bc=1, h t − 1 h_{t-1} ht1=0(前一时刻没有任何隐藏信息), x t x_t xt=1(输入李四信息,同上所述),则由公式计算得 i t i_t it≈1(决定需要添加新信息), C t ~ \tilde{C_t} Ct~≈1(新的候选信息,李四的信息),即 i t i_t it* C t ~ \tilde{C_t} Ct~=1表示需要给当前记忆单元状态更新的信息。

将第一步和第二步得到的结果相加起来就是丢掉不需要的信息,添加新信息的过程,即可得到传输给下一个状态的信息。比如在前面的例子中我们保存的是张三的信息,现在有了新的李四信息,我们需要把张三的信息仍保留,然后把李四的信息也保存下来。

实例:设 C t − 1 C_{t-1} Ct1=1(张三的信息)由前两步得 f t f_t ft≈1(需要保留张三的信息), i t i_t it* C t ~ \tilde{C_t} Ct~=1(需要添加李四的信息)则由公式计算得当前记忆单元状态 C t C_t Ct=2(既保留有张三信息,也添加了李四信息)。

3.3输出门

最后一步是决定模型的输出,这个阶段将确定下一个隐藏状态(包含了先前的输入信息)。首先是通过sigmoid层来得到输出,然后使用tanh对上一阶段得到的新的记忆单元状态进行放缩,再与sigmoid得到的输出逐对相乘,以确定隐藏状态应该携带的信息,再将新的作为当前的输出,即把新的信息传递到下一个时间步长。

实例:设这一层所有权重 W o W_o Wo=100;偏置 b o b_o bo=1, h t − 1 h_{t-1} ht1=0, x t x_t xt=1,则由公式计算得 o t o_t ot≈1(决定需要输出当前的记忆单元信息), h t h_t ht≈1表示需要输出当前状态信息(既保留张三信息,也添加李四信息),留给下一个单元选择输入以此来考虑到历史信息,由于 h t h_t ht每个时刻都会被重写,可以看作短时记忆。反之,若 o t o_t ot≈0,则 h t h_t ht=0( h t h_t ht什么信息都没有输出,但是 C t C_t Ct仍可以保持历史信息, C t C_t Ct可看作长的短时记忆)。

这显然可以理解,tanh函数是对先前学到信息的压缩处理,起到稳定数值的作用,以及sigmoid函数的输出,两者的结合学习就是递归神经网络的学习思想。至于模型是如何学习的,那就是后向传播误差学习权重的一个过程了。

四、LSTM的简单实例

这是在看了台大李宏毅教授的深度学习视频之后的一点总结。下图是李宏毅教授LSTM这一章节PPT里的内容,在这里只简要介绍一下,详细的大家可以去视频观看,希望能帮助大家更好的理解LSTM模型。

可以看到在具体实例中,我们分别对三个门(input gate,forget gate,output
gate)以及输入神经网络中分别赋予了权重值w以及偏差值b为1,先把 x 1 x_1 x1=3, x 2 x_2 x2=1, x 3 x_3 x3=0分别代入得,当前时刻信息输入为3;输入门的值为90经过sigmoid函数可以把值视为为1,表示允许信息通过;遗忘门值为110经过处理后视为1表示保留之前细胞状态信息 C t − 1 C_{t-1} Ct1=0即为0;由此得当前时刻细胞状态 C t C_t Ct为3+0=3;输出门值 o t o_t ot 为-10处理后视为0,即不允许输出当前状态。故第一个输出为y= h t h_t ht=0。
可得当前时刻网络的各参数为 x t x_t xt=(3,1,0); h t − 1 h_{t-1} ht1 =0; C t ~ \tilde{C_t} Ct~=3; f t f_t ft =1; i t i_t it=1; o t o_t ot=0; C t − 1 C_{t-1} Ct1 =0; C t C_t Ct =3;y= h t h_t ht=0
同理,把 x 1 x_1 x1=4, x 2 x_2 x2=1, x 3 x_3 x3=0, x t x_t xt=(4,1,0); h t − 1 h_{t-1} ht1 =0; C t ~ \tilde{C_t} Ct~=4; f t f_t ft =1; i t i_t it=1; o t o_t ot=0; C t − 1 C_{t-1} Ct1 =3; C t C_t Ct =7;y= h t h_t ht=0
x 1 x_1 x1=2, x 2 x_2 x2=0, x 3 x_3 x3=0, x t x_t xt=(2,0,0); h t − 1 h_{t-1} ht1 =0; C t ~ \tilde{C_t} Ct~=2; f t f_t ft =1; i t i_t it=0; o t o_t ot=0; C t − 1 C_{t-1} Ct1 =7; C t C_t Ct =7;y= h t h_t ht=0
x 1 x_1 x1=1, x 2 x_2 x2=0, x 3 x_3 x3=1, x t x_t xt=(1,0,1); h t − 1 h_{t-1} ht1 =0; C t ~ \tilde{C_t} Ct~=1; f t f_t ft =1; i t i_t it=0; o t o_t ot=1; C t − 1 C_{t-1} Ct1 =7; C t C_t Ct=7;y= h t h_t ht=7
x 1 x_1 x1=3, x 2 x_2 x2=-1, x 3 x_3 x3=0, x t x_t xt=(3,-1,0); h t − 1 h_{t-1} ht1 =7; C t ~ \tilde{C_t} Ct~=3; f t f_t ft =0; i t i_t it=0; o t o_t ot=0; C t − 1 C_{t-1} Ct1 =7; C t C_t Ct =0;y= h t h_t ht=0
故最后可得输出为0;0;0;7;0


参考

LSTM介绍及反向传播算法推导(非常详细)
LSTM神经网络详解


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

相关文章

大白话理解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 第二步:下载…

IDEA使用教程—5、如何导入一个已有的项目

scala与此类似,只是需要的是sbt而不是maven. 今天刚开始学习使用intellij IDEA来进行后台开发,感觉这个软件跟之前用过的eclipse和myeclipse都不是很想同,然后学长给了《精通Spring4.x企业应用开发实战》这本书上相关的代码,今…

idea导入springboot项目运行教程

前置要求 ①具备Java环境,并且可以通过Maven进行安装项目依赖; ②具备IntelliJ IDEA工具,推荐专业版,社区版也不影响; ③具备Mysql5.7或以上版本数据库; ④具备Navicat数据库可视化管理工具&#xff1b…

如何在idea中导入web项目(超详细!)

在idea中导入web项目 以day08_jsp项目为例: 先把整个项目复制粘贴到idea的项目目录下 然后idea中会显示一个day08_jsp的module,此时它的图片会少一个蓝块 选择File–>Project Structure 选择Modules–>点 号 选择Import Module 选择对应需要导入的项目&…

idea怎么导入maven项目

idea怎么导入maven项目 方法一: 1、选择import project ,然后选择想要导入的项目,选择以maven的方式 import项目,如图 2、选项根据自己的需要配置即可,一直点的next完成以后,maven会自动下载依赖包 &…