当前位置: 首页 > news >正文

LSTM长短期记忆网络

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] )。

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 ) 激活函数生成候选记忆。
  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 ) 是由以下两个部分组成的:

  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 ) 激活函数进一步处理:

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在长时依赖任务中的梯度消失问题。其核心包括遗忘门输入门输出门,动态控制信息的流动与保留,从而实现高效的序列建模。


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

相关文章:

LSTM长短期记忆网络

LSTM(长短期记忆网络)数学原理 LSTM(Long Short-Term Memory)是一种特殊的递归神经网络(RNN),解决了标准RNN中存在的梯度消失(Vanishing Gradient) 和**梯度爆炸&#x…...

基于前端技术UniApp和后端技术Node.js的电影购票系统

文章目录 摘要Abstruct第一章 绪论1.1 研究背景与意义1.2 国内外研究现状 第二章 需求分析2.1 功能需求分析2.2 非功能性需求分析 第二章系统设计3.1 系统架构设计3.1.1 总体架构3.1.2 技术选型 3.2 功能架构 第四章 系统实现4.1 用户端系统实现4.1.1 用户认证模块实现4.1.2 电…...

数据结构与算法:稀疏数组

前言 此文以整型元素的二维数组为例,阐述稀疏数组的思想。其他类型或许有更适合压缩算法或者其他结构的稀疏数组,此文暂不扩展。 稀疏数组的定义 在一个二维数据数组里,由于大量的元素的值为同一个值,比如 0或者其他已知的默认值…...

Meta重磅发布Llama 3.3 70B:开源AI模型的新里程碑

在人工智能领域,Meta的最新动作再次引起了全球的关注。今天,我们见证了Meta发布的Llama 3.3 70B模型,这是一个开源的人工智能模型,它不仅令人印象深刻,而且在性能上达到了一个新的高度。 一,技术突破&#…...

VSCode中的Black Formatter没有生效的解决办法

说明 如果正常按照配置进行的话,理论上是可以生效的。 "[python]": {"editor.defaultFormatter": "ms-python.black-formatter","editor.formatOnSave": true }但我在一种情况下发现不能生效,应为其本身的bug…...

【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题

目录 背包问题简介 问题描述 输入: 输出: 动态规划解法 动态规划状态转移 代码实现 代码解释 动态规划的时间复杂度 例子解析 输出: 总结 作者我蓝桥杯:2023第十四届蓝桥杯国赛C/C大学B组一等奖,所以请听我…...

Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍

概述 伴随电子商务的持续演进,客户对于便利性、速度以及个性化服务的期许急剧攀升。企业务必要探寻创新之途径,以强化自身运营,并优化购物体验。达成此目标的最为行之有效的方式之一,便是将 AI 呼叫助手融入您的电子商务平台。我们…...

微信小程序苹果手机自带的数字键盘老是弹出收起,影响用户体验,100%解决

文章目录 1、index.wxml2、index.js3、index.wxss1、index.wxml <!--index.wxml--> <view class="container"><view class="code-input-container"><view class="code-input-boxes"><!-- <block wx:for="{{…...

sql中case when若条件重复 执行的顺序

sql case when若条件重复 执行的顺序 在 SQL 中&#xff0c;如果你在 CASE 表达式中定义了多个 WHEN 子句&#xff0c;并且这些条件有重叠&#xff0c;那么 CASE 表达式的执行顺序遵循以下规则&#xff1a; &#xff08;1&#xff09;从上到下&#xff1a;SQL 引擎会按照 CASE …...

压力测试Jmeter简介

前提条件&#xff1a;要安装JDK 若不需要了解&#xff0c;请直接定位到左侧目录的安装环节。 1.引言 在现代软件开发中&#xff0c;性能和稳定性是衡量系统质量的重要指标。为了确保应用程序在高负载情况下仍能正常运行&#xff0c;压力测试变得尤为重要。Apache JMeter 是一…...

cesium 与 threejs 对比

Cesium 和 Three.js 都是用于在 Web 浏览器中创建和渲染 3D 图形的强大 JavaScript 库&#xff0c;但它们有显著的不同之处&#xff0c;主要体现在应用领域、功能集和使用场景上。 以下是两者之间的对比&#xff1a; 1. 应用场景 Three.js: 适用于广泛的 3D 图形应用&#xff…...

探索QScreen的信号与槽:动态响应屏幕变化

在处理屏幕显示和多显示器环境时&#xff0c;QScreen 提供了一些特有的信号&#xff0c;这些信号可以在屏幕的变化时通知应用程序&#xff0c;帮助我们动态地适配和响应显示设备的变化。今天&#xff0c;我们将深入探讨如何使用 QScreen 的信号与槽&#xff0c;并展示适用的使用…...

vLLM项目加入PyTorch生态系统,引领LLM推理新纪元

近日&#xff0c;vLLM项目宣布正式成为PyTorch生态系统的一部分&#xff0c;标志着该项目与PyTorch的合作进入了一个全新的阶段。本文将从以下几个方面进行介绍&#xff0c;特别提醒&#xff1a;安装方案在第四个部分&#xff0c;可选择性阅读。 vLLM项目概述 vLLM的成就与实际…...

索引-介绍结构语法

一.概述&#xff1a; 1.当给某个字段创建索引后&#xff0c;就会把字段生成二叉排序树进行查找&#xff0c;大大增加了查找效率&#xff0c;比不创建索引时用的全表扫描好得多。 2.二叉排序树&#xff1a;小的在左边&#xff0c;大的在右边(查找和存放都遵循这个原则)。 3.注…...

SpringBoot整合JDBC

讲到这里&#xff0c;基本上我们就可以使用SpringBoot来开发Web项目视图显示和业务逻辑代码&#xff0c;但是要做一个完成案例&#xff0c;我们还差一点点&#xff0c;就是怎么访问数据库&#xff0c;获取数据&#xff0c;接下来我们就看怎么用SpringBoot整合我们前面已经讲过的…...

XXE靶场

XXE-lab 靶场 靶场网址&#xff1a;http://172.16.0.87/ 第一步我们看到网站有登录框我们试着用 bp 去抓一下包 将抓到的包发到重放器中 然后我们构建palody <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/readconvert.base64-encode/resourceC:/flag/fla…...

Elasticsearch:使用 Open Crawler 和 semantic text 进行语义搜索

作者&#xff1a;来自 Elastic Jeff Vestal 了解如何使用开放爬虫与 semantic text 字段结合来轻松抓取网站并使其可进行语义搜索。 Elastic Open Crawler 演练 我们在这里要做什么&#xff1f; Elastic Open Crawler 是 Elastic 托管爬虫的后继者。 Semantic text 是 Elasti…...

Facebook的隐私保护政策:用户数据如何在平台上被管理?

在当今数字化世界&#xff0c;社交平台如何管理用户数据并保护隐私成为了一个热点话题。作为全球最大的社交网络&#xff0c;Facebook&#xff08;现Meta&#xff09;在数据隐私方面的政策备受关注。本文将简要介绍Facebook的隐私保护措施&#xff0c;以及用户数据如何在平台上…...

【ETCD】【源码阅读】深入解析 EtcdServer.applySnapshot方法

今天我们来一步步分析ETCD中applySnapshot函数 一、函数完整代码 函数的完整代码如下&#xff1a; func (s *EtcdServer) applySnapshot(ep *etcdProgress, apply *apply) {if raft.IsEmptySnap(apply.snapshot) {return}applySnapshotInProgress.Inc()lg : s.Logger()lg.In…...

‌HBase是什么,‌HBase介绍

‌官方网站&#xff1a;Apache HBase – Apache HBase Home HBase是一个分布式的、面向列的NoSQL数据库&#xff0c;主要用于存储和处理海量数据。‌它起源于Google的​​​​​​​BigTable论文&#xff0c;是Apache Hadoop项目的子项目。HBase设计用于高可靠性、高性能和可伸…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...