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⋅[ht−1,xt]+bf)
- f t f_t ft:遗忘门的输出向量(维度与记忆单元相同)
- W f W_f Wf:遗忘门的权重矩阵
- h t − 1 , x t h_{t-1}, x_t ht−1,xt:将前一时刻的隐藏状态 h t − 1 h_{t-1} ht−1 和当前输入 x t x_t xt 进行拼接
- b f b_f bf:遗忘门的偏置向量
- σ \sigma σ:Sigmoid激活函数,输出在 ( 0 , 1 ) (0, 1) (0,1) 之间
2.2 输入门(Input Gate)
输入门决定当前输入的信息如何更新到记忆单元中,包括两个步骤:
- 候选记忆单元:通过 ( \tanh ) 激活函数生成候选记忆。
- 输入门:通过 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⋅[ht−1,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⋅[ht−1,xt]+bC)
- i t i_t it:输入门的输出范围 ( 0 − 1 ) ( 0-1 ) (0−1)
- 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 − 1 C_{t-1} Ct−1。
- 输入门决定增加多少候选记忆 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=ft⊙Ct−1+it⊙C~t
- C t C_t Ct:当前时刻的记忆单元
- f t ⊙ C t − 1 f_t \odot C_{t-1} ft⊙Ct−1:保留的旧记忆
- i t ⊙ C ~ t i_t \odot \tilde{C}_t it⊙C~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⋅[ht−1,xt]+bo)
h t = o t ⊙ tanh ( C t ) h_t = o_t \odot \tanh(C_t) ht=ot⊙tanh(Ct)
- o t o_t ot:输出门的输出范围 ( 0 − 1 ) ( 0-1 ) (0−1)
- 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 的工作流程总结
- 输入当前时刻的数据 x t x_t xt和前一时刻的隐藏状态 h t − 1 h_{t-1} ht−1、记忆单元 C t − 1 C_{t-1} Ct−1。
- 遗忘门:决定丢弃多少旧记忆。
- 输入门:决定当前输入的信息如何加入记忆单元。
- 更新记忆单元 C t C_t Ct:根据遗忘门和输入门进行更新。
- 输出门:决定当前时刻的隐藏状态 h t h_t ht 输出多少信息。
- 传播到下一时刻: h t h_t ht和 C t C_t Ct被传递给下一时间步。
4. 解决梯度消失与爆炸问题
LSTM 解决了传统 RNN 的梯度消失问题,主要依靠 记忆单元 和 门控机制:
- 记忆单元 C t C_t Ct:通过逐元素加法(避免梯度多次相乘),使得记忆信息能够长期保存。
- 门控机制:通过遗忘门和输入门的动态调整,能够控制信息的流动,保留有用的信息,抑制无关的信息。
- 激活函数:在遗忘门、输入门和输出门中使用 Sigmoid 函数,保证输出在 ( 0 , 1 ) (0,1) (0,1) 之间,防止梯度爆炸。
5. LSTM 与标准 RNN 的对比
| 特点 | 标准RNN | LSTM |
|---|---|---|
| 结构 | 简单隐藏层 | 引入记忆单元与门控机制 |
| 梯度问题 | 容易梯度消失或爆炸 | 能有效缓解梯度消失/爆炸问题 |
| 长时依赖问题 | 无法捕捉长期依赖 | 能有效学习长时依赖 |
| 计算复杂度 | 低 | 相对较高 |
6. LSTM 的应用场景
- 自然语言处理(NLP):文本分类、语言建模、机器翻译等。
- 时间序列预测:股票价格、天气预测等。
- 语音识别:连续语音识别任务。
- 视频分析:视频帧之间的序列建模。
- 生成任务:文本生成、音乐生成等。
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 中,如果你在 CASE 表达式中定义了多个 WHEN 子句,并且这些条件有重叠,那么 CASE 表达式的执行顺序遵循以下规则: (1)从上到下:SQL 引擎会按照 CASE …...
压力测试Jmeter简介
前提条件:要安装JDK 若不需要了解,请直接定位到左侧目录的安装环节。 1.引言 在现代软件开发中,性能和稳定性是衡量系统质量的重要指标。为了确保应用程序在高负载情况下仍能正常运行,压力测试变得尤为重要。Apache JMeter 是一…...
cesium 与 threejs 对比
Cesium 和 Three.js 都是用于在 Web 浏览器中创建和渲染 3D 图形的强大 JavaScript 库,但它们有显著的不同之处,主要体现在应用领域、功能集和使用场景上。 以下是两者之间的对比: 1. 应用场景 Three.js: 适用于广泛的 3D 图形应用ÿ…...
探索QScreen的信号与槽:动态响应屏幕变化
在处理屏幕显示和多显示器环境时,QScreen 提供了一些特有的信号,这些信号可以在屏幕的变化时通知应用程序,帮助我们动态地适配和响应显示设备的变化。今天,我们将深入探讨如何使用 QScreen 的信号与槽,并展示适用的使用…...
vLLM项目加入PyTorch生态系统,引领LLM推理新纪元
近日,vLLM项目宣布正式成为PyTorch生态系统的一部分,标志着该项目与PyTorch的合作进入了一个全新的阶段。本文将从以下几个方面进行介绍,特别提醒:安装方案在第四个部分,可选择性阅读。 vLLM项目概述 vLLM的成就与实际…...
索引-介绍结构语法
一.概述: 1.当给某个字段创建索引后,就会把字段生成二叉排序树进行查找,大大增加了查找效率,比不创建索引时用的全表扫描好得多。 2.二叉排序树:小的在左边,大的在右边(查找和存放都遵循这个原则)。 3.注…...
SpringBoot整合JDBC
讲到这里,基本上我们就可以使用SpringBoot来开发Web项目视图显示和业务逻辑代码,但是要做一个完成案例,我们还差一点点,就是怎么访问数据库,获取数据,接下来我们就看怎么用SpringBoot整合我们前面已经讲过的…...
XXE靶场
XXE-lab 靶场 靶场网址: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 进行语义搜索
作者:来自 Elastic Jeff Vestal 了解如何使用开放爬虫与 semantic text 字段结合来轻松抓取网站并使其可进行语义搜索。 Elastic Open Crawler 演练 我们在这里要做什么? Elastic Open Crawler 是 Elastic 托管爬虫的后继者。 Semantic text 是 Elasti…...
Facebook的隐私保护政策:用户数据如何在平台上被管理?
在当今数字化世界,社交平台如何管理用户数据并保护隐私成为了一个热点话题。作为全球最大的社交网络,Facebook(现Meta)在数据隐私方面的政策备受关注。本文将简要介绍Facebook的隐私保护措施,以及用户数据如何在平台上…...
【ETCD】【源码阅读】深入解析 EtcdServer.applySnapshot方法
今天我们来一步步分析ETCD中applySnapshot函数 一、函数完整代码 函数的完整代码如下: func (s *EtcdServer) applySnapshot(ep *etcdProgress, apply *apply) {if raft.IsEmptySnap(apply.snapshot) {return}applySnapshotInProgress.Inc()lg : s.Logger()lg.In…...
HBase是什么,HBase介绍
官方网站:Apache HBase – Apache HBase Home HBase是一个分布式的、面向列的NoSQL数据库,主要用于存储和处理海量数据。它起源于Google的BigTable论文,是Apache Hadoop项目的子项目。HBase设计用于高可靠性、高性能和可伸…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
