各类神经网络学习:(五)LSTM 长短期记忆(上集),结构详解
| 上一篇 | 下一篇 |
|---|---|
| RNN(下集) | 待编写 |
LSTM(长短期记忆)
参考知乎文章《人人都能看懂的LSTM介绍及反向传播算法推导(非常详细) - 知乎》,部分图片也进行了引用。
参考视频教程《3.结合例子理解LSTM_哔哩哔哩_bilibili》,举的例子还是比较贴切的。不过反向传播的完整推导,非必要不用深入看。
一、相关知识早知道
-
————————————————该模型提出的原因是为了解决什么问题的?———————————————
答:为了解决 R N N RNN RNN 的
- 梯度爆炸和梯度消失问题 (尽管激活函数 t a n h tanh tanh 已经在一定程度上缓解了梯度消失和梯度爆炸,但是当连乘次数过多时,依然会有此问题)。
- 长期依赖捕捉困难问题 ( R N N RNN RNN 的隐藏状态仅能保留短期历史信息,难以建模长序列中的复杂依赖)。
- 信息筛选问题 ( R N N RNN RNN 对历史信息是全部接收的,但是无法筛选出历史信息中真正有用的内容,间接导致了前两个问题)。
-
————————————为什么 L S T M \pmb{LSTM} LSTM 相较于 R N N \pmb{RNN} RNN 能缓解梯度爆炸和梯度消失?———————————
答:首先梯度存在于反向传播中。 R N N RNN RNN 的前向传播是连乘式结构,这就导致其反向传播也是连乘式结构,在反向传播过程中, R N N RNN RNN 的梯度要么始终大于 1 1 1 ,要么始终小于 1 1 1 ,连乘时便会轻而易举地引起梯度爆炸和梯度消失(是针对较远时间步的梯度来说)。而在 L S T M LSTM LSTM 中,由于其独特的多门结构,可以使得导数值可以在 1 1 1 上下浮动(上一时间步的梯度大于 1 1 1 ,下一时刻的梯度也可能小于 1 1 1 ,连乘时就不至于过大或过小)。并且通过对多个门结构参数的学习,可以实现信息筛选,来决定何时让梯度消失,何时保持梯度(也就是所谓的梯度截断)。
-
———————————————————— L S T M \pmb{LSTM} LSTM 的缺点有哪些?———————————————————
答:尽管 L S T M LSTM LSTM 显著优于 R N N RNN RNN ,但仍存在以下问题:
- 计算复杂度高 :三个门控结构引入更多参数,训练耗时较长。
- 长序列性能衰减 :处理极长序列(如数万步)时仍可能出现记忆衰退。
- 超参数敏感 :初始化策略和门控权重需精细调优,否则易导致训练不稳定。
- 参数多,容易造成过拟合。
- 无法并行计算 :每个时间步需依赖前序结果,影响处理效率(后续的 T r a n s f o r m e r Transformer Transformer 解决了这个问题)。
- 可解释性 一直是个难点,简单来说就是很难完全说清楚为什么内部结构这样设计,内部结构复杂使其决策逻辑难以被直观解释。
二、结构图
对比传统 R N N RNN RNN , L S T M LSTM LSTM 的突出特点是多了个记忆细胞,能选择性地保留之前和当下的语义信息。
1)整体结构图

L S T M LSTM LSTM 网络中的 σ \sigma σ 就是 s i g m o i d sigmoid sigmoid 函数。它在这里也被叫做 “门单元” ,因为 s i g m o i d sigmoid sigmoid 函数的值为 [ 0 , 1 ] [0,1] [0,1] ,类似阀门,开的口大进的就多,开的口小进的就少。
2)单个时刻结构图

其内部包含四个网络层(其中三个门单元,带 σ \sigma σ 的就是门),分别是:遗忘门、更新门、细胞状态更新层、输出门。
后续符号提示: ⊙ ⊙ ⊙ (向量或矩阵的对应元素相乘)。
令 x t \large x_t xt 尺寸为 m × 1 m×1 m×1 , h t − 1 \large h_{t-1} ht−1 尺寸为 n × 1 n×1 n×1 ,则 C t − 1 C_{t-1} Ct−1 尺寸为 n × 1 n×1 n×1 。
①遗忘门:

公式:
f t = σ ( W h f ⋅ h t − 1 + W x f ⋅ x t + b f ) = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) \large f_t=\sigma(W_{hf}·h_{t-1}+W_{xf}·x_t+b_f)=\sigma(W_f·[h_{t-1},x_t]+b_f) ft=σ(Whf⋅ht−1+Wxf⋅xt+bf)=σ(Wf⋅[ht−1,xt]+bf)
f t \large f_t ft :我叫它 “遗忘矩阵” ,由 x t \large x_t xt 和 h t − 1 \large h_{t-1} ht−1 计算而来, σ \large \sigma σ 函数使 f t \large f_t ft 的元素处于 0 ∼ 1 0\sim1 0∼1 ,使其对 C t − 1 \large C_{t-1} Ct−1 具有遗忘功能, 1 1 1 表示 “完全接受”, 0 0 0 表示 “完全忽略”。 f t \large f_t ft 的尺寸和 h t − 1 \large h_{t-1} ht−1 、 C t − 1 \large C_{t-1} Ct−1 一样,同为 n × 1 n×1 n×1 ------------------------则可推出参数 W h f \large W_{hf} Whf 尺寸为 n × n n×n n×n , W x f \large W_{xf} Wxf 尺寸为 n × m n×m n×m , b f \large b_{f} bf 尺寸为 n × 1 n×1 n×1 。
②输入门:

公式:
i t = σ ( W h i ⋅ h t − 1 + W x i ⋅ x t + b i ) = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) C t ~ = t a n h ( W h C ⋅ h t − 1 + W x C ⋅ x t + b C ) = t a n h ( W C ⋅ [ h t − 1 , x t ] + b C ) \large i_t=\sigma(W_{hi}·h_{t-1}+W_{xi}·x_t+b_i)=\sigma(W_i·[h_{t-1},x_t]+b_i)\\ \large \tilde{C_t}=tanh(W_{hC}·h_{t-1}+W_{xC}·x_t+b_C)=tanh(W_C·[h_{t-1},x_t]+b_C) it=σ(Whi⋅ht−1+Wxi⋅xt+bi)=σ(Wi⋅[ht−1,xt]+bi)Ct~=tanh(WhC⋅ht−1+WxC⋅xt+bC)=tanh(WC⋅[ht−1,xt]+bC)
这里的 C t ~ \large \tilde{C_t} Ct~ 代表的是此时刻生成的新记忆,只不过是初始版。
这里的 i t \large i_t it :我叫它 “新记忆筛选矩阵” , 元素均处于 0 ∼ 1 0\sim1 0∼1 ,使其对 C t ~ \large \tilde{C_t} Ct~ 具有筛选功能, 1 1 1 表示 “完全通过”, 0 0 0 表示 “完全忽略”。
i t \large i_t it 的尺寸为 n × 1 n×1 n×1 , C t ~ \large \tilde{C_t} Ct~ 的尺寸为 n × 1 n×1 n×1 ------------------------则可推出参数 W h i 、 W h C \large W_{hi}、W_{hC} Whi、WhC 尺寸为 n × n n×n n×n , W x i 、 W x C \large W_{xi}、W_{xC} Wxi、WxC 尺寸为 n × m n×m n×m , b i 、 b C \large b_{i}、b_{C} bi、bC 尺寸为 n × 1 n×1 n×1 。
③细胞状态更新

公式:
C t = f t ⊙ C t − 1 + i t ⊙ C t ~ \large C_t=f_t⊙C_{t-1}+i_t⊙\tilde{C_t} Ct=ft⊙Ct−1+it⊙Ct~
这里的 C t \large C_t Ct 便是最终要输出的新记忆。
新记忆由经过遗忘的旧记忆,以及经过筛选的原始新记忆,相加而得到。
C t \large C_t Ct 的尺寸为 n × 1 n×1 n×1 。
④输出门:

公式:
o t = σ ( W h o ⋅ h t − 1 + W x o ⋅ x t + b o ) = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) h t = o t ⊙ t a n h ( C t ) \large o_t=\sigma(W_{ho}·h_{t-1}+W_{xo}·x_t+b_o)=\sigma(W_o·[h_{t-1},x_t]+b_o)\\ \large h_t=o_t⊙tanh(C_t) ot=σ(Who⋅ht−1+Wxo⋅xt+bo)=σ(Wo⋅[ht−1,xt]+bo)ht=ot⊙tanh(Ct)
这里的 h t h_t ht 便是隐层状态输出,由新记忆 C t \large C_t Ct 通过 t a n h tanh tanh 函数调整到 − 1 ∼ 1 -1\sim1 −1∼1 之间,再与 o t o_t ot 逐元素相乘得到。
这里的 o t o_t ot :我叫它 “隐层状态输出提炼矩阵” ,元素均处于 0 ∼ 1 0\sim1 0∼1 ,使其对 C t \large C_t Ct 具有提炼功能, 1 1 1 表示 “完全通过”, 0 0 0 表示 “完全忽略”。
从 C t \large C_t Ct 中提炼出 h t h_t ht ,是因为细胞状态 C t \large C_t Ct 存储了经过遗忘门和输入门筛选后的所有长期信息(如历史趋势或主题),但并非所有内容都需直接传送给后续网络,通过提炼,仅保留与当前任务相关的部分。并且经过 t a n h tanh tanh 函数压缩之后,可以避免数值爆炸,并增强非线性表达能力。
3)单个时刻公式图


4)补充:
传统 R N N RNN RNN 的同步多对多结构图:

三、损失函数及反向传播
想要深入研究的,就参考知乎那篇文章,以及视频的最后一个分集(可以稍稍看看矩阵求导,对反向传播的计算有帮助)。
只是想用的,知道使用的是链式法则、梯度下降法即可。
相关文章:
各类神经网络学习:(五)LSTM 长短期记忆(上集),结构详解
上一篇下一篇RNN(下集)待编写 LSTM(长短期记忆) 参考知乎文章《人人都能看懂的LSTM介绍及反向传播算法推导(非常详细) - 知乎》,部分图片也进行了引用。 参考视频教程《3.结合例子理解LSTM_哔哩…...
Python项目-基于Python的网络爬虫与数据可视化系统
1. 项目简介 在当今数据驱动的时代,网络爬虫和数据可视化已成为获取、分析和展示信息的重要工具。本文将详细介绍如何使用Python构建一个完整的网络爬虫与数据可视化系统,该系统能够自动从互联网收集数据,进行处理分析,并通过直观…...
Spring Boot 自定义 Starter 组件的技术指南
1、简述 Spring Boot 通过 Starter 机制,让开发者可以快速集成第三方组件。在企业级开发中,我们常常需要封装自己的 Starter 组件,以提高代码复用性,简化配置,并实现可插拔的模块化开发。 Spring Boot Starter 机制 …...
计算机二级WPS Office第九套WPS演示
解题过程...
计算机网络-2 物理层
【考纲内容】 (一)通信基础 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念; 奈奎斯特定理与香农定理;编码与调制; 电路交换、报文交换与分组交换;数据报与虚电路① 视频讲解 (二…...
三分钟掌握音频提取 | 在 Rust 中优雅地处理视频音频
前言 在多媒体开发中,从视频中提取音频是一个常见需求。比如,你可能需要分离背景音乐来单独欣赏,或者提取对白用于语音分析,甚至为视频生成字幕。无论目的如何,音频提取都是多媒体处理中的基础操作。 传统上…...
Redis集群哨兵相关面试题
目录 1.Redis 主从复制的实现原理是什么? 详解 补充增量同步 replication buffer repl backlog buffer 2.Redis 主从复制的常见拓扑结构有哪些? 3.Redis 复制延迟的常见原因有哪些? 4.Redis 的哨兵机制是什么? 主观下线和客观下线 哨兵leader如何选出来的&#x…...
Shopify Checkout UI Extensions
结账界面的UI扩展允许应用开发者构建自定义功能,商家可以在结账流程的定义点安装,包括产品信息、运输、支付、订单摘要和Shop Pay。 Shopify官方在去年2024年使用结账扩展取代了checkout.liquid,并将于2025年8月28日彻底停用checkout.liquid…...
Perl 环境安装指南
Perl 环境安装指南 引言 Perl是一种广泛使用的解释型、动态编程语言,以其强大的文本处理能力和灵活性著称。本文将为您详细介绍Perl环境的安装过程,包括系统要求、安装步骤以及注意事项。 系统要求 在安装Perl之前,请确保您的计算机满足以下基本要求: 操作系统:Window…...
MOSN(Modular Open Smart Network)-04-TLS 安全链路
前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFAStack-00-sofa 技术栈概览 MOSN(Modular O…...
Softmax 回归 + 损失函数 + 图片分类数据集
Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型,是一个分类问题。 下面先解释一下分类和回归的区别: 简单来说,分类问题从回归的单输出变成了多输出,输出的个数等于类别的个数。 实际上,对于分…...
重温Ubuntu 24.04 LTS
用户调整 # 创建新用户 sudo adduser newusername # 设置新用户的密码 sudo passwd newusername # 将新用户添加到 sudo 组 sudo usermod -aG sudo newusername # 修改ssh访问权限 sudo nano /etc/ssh/sshd_config # 将新用户加入,此时root将无法访问 AllowUsers n…...
FreeRTOS学习(十):任务调度器挂起与恢复机制详解
FreeRTOS学习(十):任务调度器挂起与恢复机制详解 文章目录 FreeRTOS学习(十):任务调度器挂起与恢复机制详解简介一、 任务挂起与恢复的API函数1.1 任务挂起函数1.2 任务恢复函数 二、重要特性与临界区的区别…...
【C++】内存模型分析
在 C 语言中,程序运行时的内存通常被划分为以下几个区域: 代码区(Text Segment)常量区(Constant Segment)全局/静态区(Data Segment,包含静态数据段和 BSS 段)堆区&…...
Vue2+OpenLayers携带请求头加载第三方瓦片数据
目录 一、案例截图 二、安装OpenLayers库 三、代码实现 一、案例截图 在对接一些第三方GIS地图的时候,需要携带请求头来验证身份,从而获取相应的瓦片数据,这时候我们需要改造一下WMTS服务的调用方式,效果如图所示: 二、安装OpenLayers库 npm install ol 三、代码实现…...
智能汽车图像及视频处理方案,支持视频实时拍摄特效能力
在智能汽车日新月异的今天,美摄科技作为智能汽车图像及视频处理领域的先行者,凭借其卓越的技术实力和前瞻性的设计理念,为全球智能汽车制造商带来了一场视觉盛宴的革新。美摄科技推出智能汽车图像及视频处理方案,一个集高效性、智…...
Vue 中如何使用 v-model 实现自定义组件的双向绑定?
在 Vue 中,使用 v-model 实现自定义组件的双向绑定需要遵循一套特定的规则。以下是关于如何实现这一功能的详细步骤和示例。 1. 理解 v-model 在 Vue 中,v-model 实际上是语法糖,它在内部实现了 :value 和 @input 的结合。使用 v-model 的自定义组件需要支持以下两个属性:…...
数据结构--顺序表(实现增删改查)
三个文件(Mytest.c 、MySeqList.c 、 MySeqList.h) Mytest.c测试函数 MySeqList.c 函数定义 MySeqList.h函数声明 增删改查的步骤: 初始化 增加元素 • 尾插:先检查顺序表空间是否足够,若不足则进行扩容&#x…...
【android】补充
3.3 常用布局 本节介绍常见的几种布局用法,包括在某个方向上顺序排列的线性布局,参照其他视图的位置相对排列的相对布局,像表格那样分行分列显示的网格布局,以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…...
HTML 表单处理进阶:验证与提交机制的学习心得与进度(一)
引言 在前端开发的广袤领域中,HTML 表单处理堪称基石般的存在,是构建交互性 Web 应用不可或缺的关键环节。从日常频繁使用的登录注册表单,到功能多样的搜索栏、反馈表单,HTML 表单如同桥梁,紧密连接着用户与 Web 应用…...
23.linux下电脑健康检查
电脑健康检查 硬盘 工具 sudo apt-get install smartmontools检查命令 sudo smartctl -a /dev/sdb1输出结果 # smartctl 7.2 2020-12-30 r5155 [x86_64-linux-6.8.0-52-generic] (local build) # Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools…...
数据库自然连接详解
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 数据库自然连接详解 自然连接(Natural Join)是一种在关系型数据库中用于合并两个或多个表的数据的操作。它基于表之间的公共列,自动识别具有相同列名的列,并…...
说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?
大家好,我是锋哥。今天分享关于【说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?】面试题。希望对大家有帮助; 说说MyBatis一、二级缓存和Spring一二级缓存有什么关系? 1000道 互联网大厂Java工程师 精选面试题-Java资源…...
蓝桥杯题型分布2
蓝桥杯 蓝桥杯题型分类2素数孪生素数素数个数朴素筛法求素数线性筛法求素数 因数分解试除法分解质因数 等差素数列梅森素数组素数素数环找素数(分段筛)连续素数和小明的素数对疑似素数质数拆分纯质数超级质数质数日期质数游戏2魔法阵的能量阿坤老师切割年糕阶乘分解…...
北京交通大学第三届C语言积分赛
作者有言在先: 题解的作用是交流思路,不是抄作业的。可以把重点放在思路分析上而不是代码上,毕竟每个人的代码风格是不一样的,看别人的代码就跟做程序填空题一样。先看明白思路再看代码。 还有就是,deepseek真的很好用…...
ESP32学习 -从STM32工程架构进阶到ESP32架构
ESP32与STM32项目文件结构对比解析 以下是对你提供的ESP32项目文件结构的详细解释,并与STM32(以STM32CubeIDE为例)的常见结构进行对比,帮助你理解两者的差异: 1. ESP32项目文件解析 文件/目录作用STM32对应或差异set…...
vue响应式原理剖析
一、什么是响应式? 我们先来看一下响应式意味着什么?我们来看一段代码: m有一个初始化的值,有一段代码使用了这个值; 那么在m有一个新的值时,这段代码可以自动重新执行; let m = 20 console.log(m) console.log(m * 2)m = 40上面的这样一种可以自动响应数据变量的代码机…...
【HTML 基础教程】HTML 元素
HTML 文档由 HTML 元素定义。 HTML 元素 开始标签 *元素内容结束标签 *<p>这是一个段落</p><a href"default.htm">这是一个链接</a><br>换行 *开始标签常被称为起始标签(opening tag),结束标签常称…...
解锁智能制造新体验:兰亭妙微 UE/UI 设计赋能行业变革
在智能制造时代的滚滚浪潮中,企业的数字化转型不仅是技术的革新,更是用户体验与交互界面的全面升级。然而,许多制造企业在这一转型过程中,面临着一系列 UI/UE 设计难题,严重阻碍了企业的数字化发展进程。兰亭妙微凭借专…...
Element UI实现表格全选、半选
制作如图所示的表格全选、半选: 父组件 <template><div id"app"><SelectHost :hostArray"hostArray" /></div> </template><script> import SelectHost from ./components/SelectHost.vue export default…...
