LSTM长短期记忆网络

news2024/12/19 22:08:04

LSTM(长短期记忆网络)数学原理

LSTM(Long Short-Term Memory)是一种特殊的递归神经网络(RNN),解决了标准RNN中存在的梯度消失(Vanishing Gradient) 和**梯度爆炸(Exploding Gradient)**问题。它由 Hochreiter 和 Schmidhuber 在1997年提出,广泛应用于处理序列数据,如自然语言处理、时间序列预测等。


1. LSTM 的基本结构

LSTM的核心是引入了一个记忆单元(Memory Cell)和三个主要的门控机制,分别是:

  • 遗忘门(Forget Gate):决定是否丢弃之前的记忆。
  • 输入门(Input Gate):决定当前输入的信息是否加入记忆单元。
  • 输出门(Output Gate):决定从记忆单元输出多少信息到下一时刻的隐藏状态。

通过这些门控机制,LSTM能够选择性地保留重要的信息,抑制不重要的信息,进而解决长期依赖问题。


2. 数学原理与公式

在时间步 t t t,LSTM 主要包含以下数学操作:

2.1 遗忘门(Forget Gate)

遗忘门决定记忆单元中哪些信息需要被保留,哪些信息需要被丢弃。它通过Sigmoid激活函数实现,输出范围在 [ 0 , 1 ] [0,1] [0,1]

f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ft=σ(Wf[ht1,xt]+bf)

  • f t f_t ft:遗忘门的输出向量(维度与记忆单元相同)
  • W f W_f Wf:遗忘门的权重矩阵
  • h t − 1 , x t h_{t-1}, x_t ht1,xt:将前一时刻的隐藏状态 h t − 1 h_{t-1} ht1 和当前输入 x t x_t xt 进行拼接
  • b f b_f bf:遗忘门的偏置向量
  • σ \sigma σ:Sigmoid激活函数,输出在 ( 0 , 1 ) (0, 1) (0,1) 之间

2.2 输入门(Input Gate)

输入门决定当前输入的信息如何更新到记忆单元中,包括两个步骤:

  1. 候选记忆单元:通过 tanh ⁡ \tanh tanh 激活函数生成候选记忆。
  2. 输入门:通过 Sigmoid 决定候选记忆是否加入当前的记忆单元。

i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) it=σ(Wi[ht1,xt]+bi)
C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) C~t=tanh(WC[ht1,xt]+bC)

  • i t i_t it:输入门的输出范围 ( 0 − 1 ) ( 0-1 ) (01)
  • C ~ t \tilde{C}_t C~t:候选记忆单元
  • W i , W C W_i, W_C Wi,WC:输入门和候选记忆的权重矩阵
  • b i , b C b_i, b_C bi,bC:偏置向量

2.3 更新记忆单元

当前时刻的记忆单元 C t C_t Ct 是由以下两个部分组成的:

  1. 遗忘门决定丢弃多少旧记忆 C t − 1 C_{t-1} Ct1
  2. 输入门决定增加多少候选记忆 C ~ t \tilde{C}_t C~t

C t = f t ⊙ C t − 1 + i t ⊙ C ~ t C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t Ct=ftCt1+itC~t

  • C t C_t Ct:当前时刻的记忆单元
  • f t ⊙ C t − 1 f_t \odot C_{t-1} ftCt1:保留的旧记忆
  • i t ⊙ C ~ t i_t \odot \tilde{C}_t itC~t:添加的候选记忆
  • ⊙ \odot :逐元素乘法(Hadamard积)

2.4 输出门(Output Gate)

输出门决定从记忆单元中输出多少信息,并通过 tanh ⁡ \tanh tanh 激活函数进一步处理:

o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) ot=σ(Wo[ht1,xt]+bo)
h t = o t ⊙ tanh ⁡ ( C t ) h_t = o_t \odot \tanh(C_t) ht=ottanh(Ct)

  • o t o_t ot:输出门的输出范围 ( 0 − 1 ) ( 0-1 ) (01)
  • h t h_t ht:当前时刻的隐藏状态,也是LSTM的输出
  • W o W_o Wo:输出门的权重矩阵
  • b o b_o bo:输出门的偏置向量
  • tanh ⁡ ( C t ) \tanh(C_t) tanh(Ct):将记忆单元中的信息压缩到 [ − 1 , 1 ] [-1,1] [1,1]

3. LSTM 的工作流程总结

  1. 输入当前时刻的数据 x t x_t xt和前一时刻的隐藏状态 h t − 1 h_{t-1} ht1、记忆单元 C t − 1 C_{t-1} Ct1
  2. 遗忘门:决定丢弃多少旧记忆。
  3. 输入门:决定当前输入的信息如何加入记忆单元。
  4. 更新记忆单元 C t C_t Ct:根据遗忘门和输入门进行更新。
  5. 输出门:决定当前时刻的隐藏状态 h t h_t ht 输出多少信息。
  6. 传播到下一时刻 h t h_t ht C t C_t Ct被传递给下一时间步。

4. 解决梯度消失与爆炸问题

LSTM 解决了传统 RNN 的梯度消失问题,主要依靠 记忆单元门控机制

  1. 记忆单元 C t C_t Ct:通过逐元素加法(避免梯度多次相乘),使得记忆信息能够长期保存。
  2. 门控机制:通过遗忘门和输入门的动态调整,能够控制信息的流动,保留有用的信息,抑制无关的信息。
  3. 激活函数:在遗忘门、输入门和输出门中使用 Sigmoid 函数,保证输出在 ( 0 , 1 ) (0,1) (0,1) 之间,防止梯度爆炸。

5. LSTM 与标准 RNN 的对比

特点标准RNNLSTM
结构简单隐藏层引入记忆单元与门控机制
梯度问题容易梯度消失或爆炸能有效缓解梯度消失/爆炸问题
长时依赖问题无法捕捉长期依赖能有效学习长时依赖
计算复杂度相对较高

6. LSTM 的应用场景

  1. 自然语言处理(NLP):文本分类、语言建模、机器翻译等。
  2. 时间序列预测:股票价格、天气预测等。
  3. 语音识别:连续语音识别任务。
  4. 视频分析:视频帧之间的序列建模。
  5. 生成任务:文本生成、音乐生成等。

7. 小结

LSTM通过引入记忆单元门控机制,解决了标准RNN在长时依赖任务中的梯度消失问题。其核心包括遗忘门输入门输出门,动态控制信息的流动与保留,从而实现高效的序列建模。


如果你喜欢这篇文章,请点赞、评论和收藏!😊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

校园点餐订餐外卖跑腿Java源码

简介: 一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合&am…

Linux文件属性 --- 硬链接、所有者、所属组

三、硬链接数 1.目录 使用“ll”命令查看,在文件权限的后面有一列数字,这是文件的硬链接数。 对于目录,硬链接的数量是它具有的直接子目录的数量加上其父目录和自身。 下图的“qwe”目录就是“abc”目录的直接子目录。 2.文件 对于文件可…

Centos7 部署ZLMediakit

1、拉取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init 2、安装编译器 sudo yum -y install gcc 3、安装cmake sudo yum -y install cmake 4…

无管理员权限 LCU auth-token、port 获取(全网首发 go)

一: 提要: 参考项目: https://github.com/Zzaphkiel/Seraphine 想做一个 lol 查战绩的软件,并且满足自己的需求(把混子和大爹都表示出来),做的第一步就是获取 lcu token ,网上清一色…

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制

从本节课程开始,我们将来介绍K8s安全框架,这是保障K8s集群安全比较关键的安全机制。接下来,让我们一起来探索K8s安全框架的运行机制。 在这个课程中,我们将学习以下内容: K8s安全框架:由认证、鉴权和准入控…

spring\strust\springboot\isp前后端那些事儿

后端 一. 插入\更新一条数据&#xff08;老&#xff09; Map<String, Object> parameterMap MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog); commonMapper.insert(parameterMap);parameterMap MybatisUtil.initParameter…

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件&#xff0c;于是立马就安装上了&#xff0c;这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎&#xff0c;在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

对于使用exe4j打包,出现“NoClassDefFoundError: BOOT-INF/classes”的解决方案

jar使用exe4j打包exe&#xff0c;出现NoClassDefFoundError: BOOT-INF/classes 注意选取的jar包是使用build&#xff0c;而不是maven中的install 本文介绍解决这个方法的方案 点击Project Structure 按照如图所示选择 选择main class&#xff0c;选择你要打的main 如果遇到/M…

文件上传之文件内容检测

一.基本概念 介绍&#xff1a;文件内容检测就是检测上传的文件里的内容。 文件幻数检测 通常情况下&#xff0c;通过判断前10个字节&#xff0c;基本就能判断出一个文件的真实类型。 文件加载检测 一般是调用API或函数对文件进行加载测试。常见的是图像渲染测试&#xff0c;再…

WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程

前言 Kettle简介 Kettle是一款国外开源的ETL工具&#xff0c;纯Java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;绿色无需安装&#xff0c;数据抽取高效稳定 WebSpoon是Kettle的Web版本&#xff0c;由Kettle社区维护&#xff0c;不受Pentaho支持&#xff0c;…

搭建Tomcat(三)---重写service方法

目录 引入 一、在Java中创建一个新的空项目&#xff08;初步搭建&#xff09; 问题&#xff1a; 要求在tomcat软件包下的MyTomcat类中编写main文件&#xff0c;实现在MyTomcat中扫描myweb软件包中的所有Java文件&#xff0c;并返回“WebServlet(url"myFirst")”中…

CAN配置---波特率中断引脚等---autochips-AC7811-ARM-M3内核

1、配置工具 虽然不怎么好用&#xff0c;但比没有强多了。具体看图&#xff1a; 时钟选着 NVIC配置 GPIO配置 2、生成的具体配置信息 NXP的配置工具里面&#xff0c;具体的波特率可以直接显示&#xff0c;这个工具没有&#xff0c;怎么办&#xff1f; 它放到了生成的代码里面…

matlab Patten的使用(重要)(Matlab处理字符串一)

原文连接&#xff1a;https://www.mathworks.com/help/releases/R2022b/matlab/ref/pattern.html?browserF1help 能使用的搜索函数&#xff1a; contains确定字符串中是否有模式matches确定模式是否与字符串匹配count计算字符串中模式的出现次数endsWith确定字符串是否以模式…

Docker创建一个mongodb实例,并用springboot连接 mongodb进行读写文件

一、通过Docker 进行运行一个 mongodb实例 1、拉取镜像 docker pull mongo:5.0.5 2、创建 mongodb容器实例 docker run -d --name mongodb2 \-e MONGO_INITDB_ROOT_USERNAMEsalaryMongo \-e MONGO_INITDB_ROOT_PASSWORD123456 \-p 27017:27017 \mongo:5.0.5 3、进入容器&am…

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍02-基于错误消息的SQL注入(Error-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

OpenCVE:一款自动收集NVD、MITRE等多源知名漏洞库的开源工具,累计收录CVE 27万+

漏洞库在企业中扮演着至关重要的角色&#xff0c;不仅提升了企业的安全防护能力&#xff0c;还支持了安全决策、合规性要求的满足以及智能化管理的发展。前期博文《业界十大知名权威安全漏洞库介绍》介绍了主流漏洞库&#xff0c;今天给大家介绍一款集成了多款漏洞库的开源漏洞…

Spring Boot 3.X:Unable to connect to Redis错误记录

一.背景 最近在搭建一个新项目&#xff0c;本着有新用新的原则&#xff0c;项目选择到了jdk17SpringBoot3.4。但是在测试Redis连接的时候却遇到了以下问题&#xff1a; redis连不上了。于是我先去检查了配置文件的连接信息&#xff0c;发现没问题&#xff1b;再去检查配置类&am…

MinT: 第一个能够生成顺序事件并控制其时间戳的文本转视频模型。

MinT 是第一个能够生成顺序事件并控制其时间戳的文本转视频模型。使用 MinT 生成时间控制的多事件视频。给定一系列事件文本提示及其所需的开始和结束时间戳&#xff0c;MinT 可以合成具有一致主题和背景的平滑连接事件。此外&#xff0c;它可以灵活地控制每个事件的时间跨度。…

C语言实验 结构体2

时间:2024.12.18 6-5 评委打分-t-CalcuScore 代码 // 定义结构体 struct Score {int id;char name[10];int value[17];double finalScore;int rank; };// 计算最终成绩 void CalcuScore(struct Score grade[], int n) {for (int i = 0; i < n; i++) {int max = grade[i].…

第6章 第一组重构

最常用到的重构就是用提炼函数&#xff08;106&#xff09;将代码提炼到函数中&#xff0c;或者用提炼变量&#xff08;119&#xff09;来提炼变量。既然重构的作用就是应对变化&#xff0c;你应该不会感到惊讶&#xff0c;我也经常使用这两个重构的反向重构——内联函数&#…