LSTM长短时记忆网络【数学+图解】

news2024/9/20 16:44:00

文章目录

  • 1、简介
  • 2、门控机制
  • 3、LSTM
    • 3.1、概念
    • 3.2、公式⭐
    • 3.3、特点
  • 4、图解LSTM⭐
    • 4.1、RNN
    • 4.2、时间链条
    • 4.3、**记忆单元**🔺
    • 4.4、LSTM
  • 5、LSTM与GRU的对比
  • 6、应用
  • 7、训练技巧

🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹

1、简介

长短时记忆网络(LSTM)和门控循环单元(GRU)是循环神经网络(RNN)的两种改进变体。
它们通过引入 门控机制 解决了RNN在处理长序列时的梯度消失和梯度爆炸问题。

先复习一下RNN:https://xzl-tech.blog.csdn.net/article/details/140940642
有兴趣可以继续学习GRU:https://xzl-tech.blog.csdn.net/article/details/140940794

2、门控机制

  1. 门控机制的基本思想是使用“门”来控制信息在网络中的流动。
  2. 每个门都是通过神经网络层计算出来的权重向量,其值通常在 0到1之间
  3. 不同的门在不同 时间步 上控制信息的选择、遗忘和更新。
  4. 这些门是通过可学习的参数在训练过程中自动调整的。

3、LSTM

LSTM:Long Short-Term Memory

3.1、概念

LSTM是一种 特殊的RNN结构,它通过引入记忆单元门控机制来控制信息的流动,以此解决长时依赖问题。
LSTM网络包含一个称为
记忆单元
(cell state)的特殊单元,用于维护跨越时间步的长期信息
image.png
记忆单元通过三种 (门控机制)来控制信息的更新:

  1. 输入门(Input Gate):决定哪些新信息需要被写入记忆单元。
  2. 遗忘门(Forget Gate):决定哪些旧信息需要被从记忆单元中移除。
  3. 输出门(Output Gate):决定从记忆单元中输出哪些信息。

3.2、公式⭐

下文有图解,此处看不懂可以先跳过)

LSTM在每个时间步的更新过程可以用以下公式描述:

  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 表示遗忘门的输出。
  • σ \sigma σ 是sigmoid激活函数,用于将输出值限制在0到1之间。
  1. 输入门 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)
  • i t i_t it 表示输入门的输出。
  1. 候选记忆单元更新 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)
  • C ~ t \tilde{C}_t C~t 表示候选的记忆单元状态。
  1. 记忆单元更新 C t = f t ∗ C t − 1 + i t ∗ C ~ t C_t = f_t \ast C_{t-1} + i_t \ast \tilde{C}_t Ct=ftCt1+itC~t
  • C t C_t Ct 表示当前时间步的记忆单元状态。
  1. 输出门 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)
  • o t o_t ot 表示输出门的输出。
  1. 隐藏状态更新 h t = o t ∗ tanh ⁡ ( C t ) h_t = o_t \ast \tanh(C_t) ht=ottanh(Ct)
  • h t h_t ht 是当前时间步的隐藏状态。

3.3、特点

  • 有效捕获长时依赖:LSTM通过门控机制,有效地捕获序列数据中的长时依赖关系。
  • 复杂性:相对于标准RNN,LSTM的结构更为复杂,计算量也更大。

4、图解LSTM⭐

4.1、RNN

多维的角度:
image.png
二维的角度:
image.png
其实就是在原本的前馈神经网络中加入了时间的维度

4.2、时间链条

在原来的RNN的基础上,LSTM就是增加了一条时间链条 C t C_t Ct
image.png
连起来:
image.png
这个时间链条并不是跟 S t S_t St隐藏层同平面的,旋转一下即为:
image.png

4.3、记忆单元🔺

下面关于 S t S_t St C t C_t Ct的关系进行展开:
image.png
S t S_t St C t C_t Ct这条线展开平面为:
image.png
S t S_t St C t C_t Ct一条线拆成了三条线:
image.png
那么,关于 f 1 f_1 f1 f 2 f_2 f2两个函数关系,
f 1 = σ ( W 1 ⋅ [ h t − 1 , x t ] + b 1 ) f_1 = \sigma(W_1 \cdot [h_{t-1}, x_t] + b_1) f1=σ(W1[ht1,xt]+b1)
i t = σ ( W 2 ⋅ [ h t − 1 , x t ] + b 2 ) i_t = \sigma(W_2 \cdot [h_{t-1}, x_t] + b_2) it=σ(W2[ht1,xt]+b2)
C ~ t = tanh ⁡ ( W ~ 2 ⋅ [ h t − 1 , x t ] + b ~ 2 ) \tilde{C}_t = \tanh(\tilde{W}_2 \cdot [h_{t-1}, x_t] + \tilde{b}_2) C~t=tanh(W~2[ht1,xt]+b~2)
f 2 = i t ∗ C ~ t f_2=i_t*\tilde{C}_t f2=itC~t
C t = f t ∗ C t − 1 + i t ∗ C ~ t C_t = f_t \ast C_{t-1} + i_t \ast \tilde{C}_t Ct=ftCt1+itC~t
image.png
所以根据这张图,以及上面的公式,不难看出:

图中的"删除"就是遗忘门 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)
图中的"增加"就是输入门 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)的乘积

4.4、LSTM

关于LSTM,有这么一张经典图:
image.png
这张图展示了LSTM单元的详细结构,包含了三个主要的门:遗忘门、输入门和输出门,以及记忆单元的更新过程。
从输入到输出,LSTM单元通过门控机制控制信息的流动,允许网络在长时间跨度内捕获依赖关系。

5、LSTM与GRU的对比

  1. 复杂性
    • LSTM更复杂,参数更多。
    • GRU较为简洁,参数更少,训练速度更快。
  2. 性能
    • 两者在处理长时依赖性任务时表现都很优异,具体选择往往取决于数据集和计算资源。
    • 在一些特定任务和数据集上,GRU可能比LSTM表现更好,尤其是在计算资源有限的情况下。
  3. 使用场景
    • 对于需要更强的长期记忆和复杂信息流动的任务,LSTM可能更合适。
    • 对于实时性要求较高或者模型简单性要求较高的任务,GRU可能更具优势。

LSTM和GRU是两种非常成功的RNN变体,通过改进信息传递机制,有效解决了传统RNN在处理长序列数据时的局限性。
它们在自然语言处理、语音识别和时间序列预测等领域得到广泛应用。

6、应用

RNN及其变体广泛应用于以下领域:

  • 自然语言处理:如语言模型、机器翻译和文本生成。
  • 语音识别:将音频序列转换为文本。
  • 时间序列预测:如股票价格预测和天气预报。
  • 视频分析:从视频帧中提取时间信息。

7、训练技巧

  • 梯度裁剪:限制梯度的大小以防止梯度爆炸。
  • 正则化:使用Dropout等技术防止过拟合。
  • 预训练和转移学习:利用大规模预训练模型微调特定任务。

RNN模型在序列数据处理中具有强大的表现力和适应能力,但也面临一些挑战。通过使用LSTM、GRU等改进模型,结合适当的训练技巧,能够有效地应用于各种实际问题。

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

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

相关文章

欧拉系统网络配置

从母盘克隆出一个虚拟机openEuler-node2 如何设定网卡的名称为ehtx x为数字 在内核中禁止使用net.ifnames模块,这样可以让网卡显示为ethx [rootlocalhost ~]# gruuby --update-kernel ALL --args net.ifnames0修改完这个参数过后需要重启系统reboot,让…

4658. 质因数个数、197. 阶乘分解、模板题【线性筛求积性函数】(数论练习题)

目录 4658. 质因数个数 题目描述 运行代码 代码思路 197. 阶乘分解 题目描述 运行代码 代码思路 其他代码 代码思路 模板题【线性筛求积性函数】 题目描述 ​编辑 运行代码 代码思路 4658. 质因数个数 题目描述 4658. 质因数个数 - AcWing题库 运行代码 #in…

银河麒麟V10 审计工具 auditd 内存泄漏问题

问题描述 银河麒麟V10 SP1 审计工具 auditd 引发的内存占用过高, 内存占用171G, 内存一直不释放 解决方案 重启进程 auditd 是银河麒麟的审计工具, 分析是由于 yum 源的特性, 造成审计工具占用内存不释放, 重启 a…

dsc集群添加磁盘空间

在达梦数据库dsc集群保姆级部署文档_达梦数据库文档-CSDN博客这篇文档的基础上操作添加磁盘,进行一个扩容操作。 在生产环境中,数据存储集群(DSC)的磁盘空间不足是一个常见问题,这可能会导致服务中断或性能下降。为了…

代码随想录算法训练营day35 | 0-1背包理论基础、416. 分割等和子集

碎碎念:加油!! 参考:代码随想录 0-1背包理论基础 几类背包的区别: 0-1背包的每种物品只有一个 完全背包的每种物品有无限个 多重背包的每种物品的个数各不相同 01背包: 有n件物品和一个最多能背重量为w …

如何开发属于你的智能人才招聘系统:源码解析

今天,小编将从源码解析的角度,带你深入了解如何开发属于你的智能人才招聘系统。 一、为什么选择开发自己的智能招聘系统? 市面上已有许多现成的招聘系统,但这些系统往往无法完全满足企业个性化的需求。通过开发自有系统&#xf…

中小型水库雨水情及大坝安全监测系统完整方案

一、背景 随着气候变化和极端天气事件的频发,中小型水库的安全运行显得愈发重要。为确保水库大坝的稳定性和防洪功能的发挥,建设一套完善的雨水情及大坝安全监测系统显得尤为重要。本文将从系统背景、系统介绍、应用实例和未来展望等方面,对…

【HTML入门】第二十三课 - 【实战】做一个简单的图书详情页

这一节,我们继续用纯HTML来做一个实战小案例。 我找了一个图书详情的页面,就像这样: 这一小节,我们用纯HTML标签,来实现一下这个图书详情的内容。 目录 1 布局分析 2 用到的标签 3 实战代码 1 布局分析 我们看这张…

SQL各种注入详解加案例--持续更新

sql注入 联合查询注入案例手工注入判断是否有SQL注入漏洞 sqlmap工具注入 报错注入常用的函数updatexml()函数案例 floor()涉及的函数实现手工注入sqlmap工具注入 盲注布尔盲注案例手工注入脚本sqlmap自动化工具 时间盲注 post注入GET传参和POST传参案例手工注入sqlmap工具 二次…

Venv复制可以减少Pip install

接前面的一篇博客《PyCharm找不到Python咋办》中遇到的步骤: 有上图的提示,说明需要将原来的venv进行清空。(还可以用重命名的方式,这样venv当中的库可以保留,如果Python的版本和原来一样的话,直接覆盖回来…

10个日常开发必备的 JavaScript 代码片段

在 Web 开发领域,开发效率是关键。为什么每次开始新项目时都要重新发明轮子?今天,本文汇总整理了一些方便日常开发使用的 JavaScript 代码片段,超越了 Lodash 和 day.js 等常见代码片段,提升你的开发效率,减…

x264 中像素扩边算法源码分析

介绍 在视频编码中,特别是在使用x264这样的H.264/MPEG-4 AVC编码器时,像素扩边(或称为边缘扩展)是一项重要的预处理步骤。像素扩边的目的是在帧的边缘添加额外的像素,这样在编码过程中可以应用滤波器,如去块滤波器(deblocking filter)和水平/垂直滤波器,而不会受到帧…

Mysql开启SSL

等二测出未开启SSL,如下 have_openssl、have_ssl都是DISABLED也不知道当时为啥没开,看最近的都是开启的,整改必去得开了,开启步骤 1.生成秘钥 进入mysql的bin目录下,运行 ./mysql_ssl_rsa_setup运行后会生成证书 默认证书会在mysql的data…

PTrade常见问题系列20

量化周末测试不打印日志,需要如何测试? 需要将量化服务器后台时间,和ptrade终端所在的电脑时间改到下周一或周五,具体测试方案如下: 先停止nginx,并且备份nfs以防恢复异常。 1.重置生产账号A的密码(若测试…

sed 简易使用指南

sed 简易使用指南 1 sed 介绍2 查找3 替换4 反向引用5 删除6 cai(菜) 导言: 笔者之前花了较多时间学习并整理了sed命令相关的内容,以及一些进阶内容。但是,到后来使用也就只记得那么几个简单的选项,再高级的…

程序员进阶之路:缓存、网络、内存与案例

编辑推荐 适读人群 :本书适合有一定开发经验的开发人员,想要突破初级层次,迈向高级开发的程序员阅读。 【与时俱进】本书基于Linux 6.0及以上版本讲解书中涉及的各个模块,有助于读者理解现代Linux内核,掌握实用的技术…

XML动态sql查询当前时间之前的信息报错

如图&#xff0c;sql语句在数据库里可以正常运行但是再XML文件不可以正常运行&#xff0c;报错。 原因&#xff1a;在XML中小于号"<"是会被默认认定成文一个标签的开始&#xff0c;所以用小于号就会报错。 解决办法&#xff1a; 1.把表达式反过来改成大于号 2…

新手教学系列——使用 Redis 实现任务队列:先进先出和后进先出的选择

在分布式系统和高并发场景下,任务队列是管理任务调度和执行的关键工具。Redis 作为一种高效的内存数据库,提供了简单且强大的数据结构,可以方便地实现任务队列。本文将深入探讨如何利用 Redis 实现先进先出(FIFO)和后进先出(LIFO)两种任务队列,并介绍其应用场景和实现方…

11153 kill boss

这个问题可以通过模拟游戏的过程来解决。我们可以遍历每一轮的出招&#xff0c;根据出招的规则来计算每一轮的伤害&#xff0c;并更新Acmer和Boss的血量。如果在某一轮结束后&#xff0c;Acmer的血量小于等于0&#xff0c;那么Boss赢&#xff1b;如果Boss的血量小于等于0&#…

总线学习3--SPI

一 环境搭建 老规矩&#xff0c;先上图吧。。 上面电源线接到VBUS了&#xff0c;给的一个5V&#xff0c;应该3.3V。不过这个屏还能正常跑也是不错。 折腾了一个晚上&#xff0c;主要还是找驱动&#xff0c;然后熟悉SPI接口的接法。 遇到了两个坑&#xff1a; 1 接口名称不统…