【机器学习】LSTM(长短期记忆网络)详解

news2024/9/21 22:27:24

鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

  • LSTM(长短期记忆网络)详解
    • LSTM的基本思想
    • LSTM的前向传播过程
    • LSTM在实际任务中的应用
    • 小结

LSTM(长短期记忆网络)详解

长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊的循环神经网络(RNN)架构,旨在解决传统RNN在处理长序列时容易出现的梯度消失/爆炸问题。LSTM通过精心设计的门控机制,能够更好地捕捉长期依赖关系,在自然语言处理、语音识别、时间序列预测等领域取得了卓越的成绩。本文将详细介绍LSTM的工作原理、前向传播过程以及在实际任务中的应用。
在这里插入图片描述

LSTM的基本思想

传统的RNN在处理长序列时存在梯度消失/爆炸的问题,主要原因是在反向传播过程中,梯度需要通过多个时间步的乘积运算,如果权重矩阵的特征值小于1,梯度会指数级衰减(梯度消失);反之,如果权重矩阵的特征值大于1,梯度会指数级增长(梯度爆炸)。这种现象使得RNN难以有效捕捉长期依赖关系。

LSTM的核心思想是引入一条专门存储长期状态的"细胞状态(Cell State)"通道,并通过精心设计的门控机制来控制信息的流动,从而解决梯度消失/爆炸的问题。具体来说,LSTM在每个时间步都有以下三个门控单元:

  1. 遗忘门(Forget Gate): 决定从上一时间步的细胞状态中丢弃什么信息。
  2. 输入门(Input Gate): 决定从当前输入和上一时间步的隐藏状态中获取什么新的信息,并将其与遗忘门的输出结合,更新当前时间步的细胞状态。
  3. 输出门(Output Gate): 决定从当前细胞状态中输出什么信息作为当前时间步的隐藏状态。

通过这种门控机制,LSTM能够很好地捕捉长期依赖关系,避免了梯度消失/爆炸的问题。
在这里插入图片描述

LSTM的前向传播过程

LSTM的前向传播过程可以用以下公式表示:

f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) 遗忘门 i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) 输入门 C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) 候选细胞状态 C t = f t ⊙ C t − 1 + i t ⊙ C ~ t 细胞状态 o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) 输出门 h t = o t ⊙ tanh ⁡ ( C t ) 隐藏状态 \begin{aligned} f_t &= \sigma(W_f\cdot[h_{t-1}, x_t] + b_f) & \text{遗忘门} \\ i_t &= \sigma(W_i\cdot[h_{t-1}, x_t] + b_i) & \text{输入门} \\ \tilde{C}_t &= \tanh(W_C\cdot[h_{t-1}, x_t] + b_C) & \text{候选细胞状态} \\ C_t &= f_t \odot C_{t-1} + i_t \odot \tilde{C}_t & \text{细胞状态} \\ o_t &= \sigma(W_o\cdot[h_{t-1}, x_t] + b_o) & \text{输出门} \\ h_t &= o_t \odot \tanh(C_t) & \text{隐藏状态} \end{aligned} ftitC~tCtotht=σ(Wf[ht1,xt]+bf)=σ(Wi[ht1,xt]+bi)=tanh(WC[ht1,xt]+bC)=ftCt1+itC~t=σ(Wo[ht1,xt]+bo)=ottanh(Ct)遗忘门输入门候选细胞状态细胞状态输出门隐藏状态

其中, σ \sigma σ 表示sigmoid函数, ⊙ \odot 表示元素wise乘积, W W W b b b 分别表示权重和偏置。

我们逐步解释上述公式:

  1. 遗忘门(Forget Gate): 通过sigmoid函数计算遗忘门的输出 f t f_t ft,其值在0到1之间,表示从上一时间步的细胞状态 C t − 1 C_{t-1} Ct1 中保留多少信息。
  2. 输入门(Input Gate): 首先计算输入门的输出 i t i_t it,同样通过sigmoid函数得到0到1之间的值,表示从当前输入 x t x_t xt 和上一隐藏状态 h t − 1 h_{t-1} ht1 中获取多少新的信息。然后计算候选细胞状态 C ~ t \tilde{C}_t C~t,通过tanh函数将其值限制在-1到1之间。
  3. 细胞状态(Cell State): 将遗忘门的输出 f t f_t ft 与上一时间步的细胞状态 C t − 1 C_{t-1} Ct1 相乘,丢弃不需要的信息;然后将输入门的输出 i t i_t it 与候选细胞状态 C ~ t \tilde{C}_t C~t 相乘,获取新的信息;最后将两者相加,得到当前时间步的细胞状态 C t C_t Ct
  4. 输出门(Output Gate): 首先计算输出门的输出 o t o_t ot,同样通过sigmoid函数得到0到1之间的值,表示从当前细胞状态 C t C_t Ct 中输出多少信息。然后将细胞状态 C t C_t Ct 通过tanh函数进行处理,得到-1到1之间的值,并与输出门的输出 o t o_t ot 相乘,得到当前时间步的隐藏状态 h t h_t ht

通过上述过程,LSTM能够很好地控制信息的流动,从而避免梯度消失/爆炸的问题,并且能够捕捉长期依赖关系。

LSTM在实际任务中的应用

由于LSTM能够有效处理长序列数据,因此它在许多序列建模任务中发挥着重要作用,包括:

  1. 语言模型: 用于预测文本序列中的下一个单词或字符,是自然语言处理领域的基础任务。
  2. 机器翻译: 将一种语言的句子翻译成另一种语言,是自然语言处理领域的核心任务之一。
  3. 语音识别: 将语音信号转录为文本,是语音处理领域的重要任务。
  4. 手写识别: 将手写字符序列转换为计算机可识别的文本,是图像处理领域的经典任务。
  5. 时间序列预测: 预测未来的时间序列数据,如股票价格、天气等,是时间序列分析领域的核心任务。

以机器翻译任务为例,我们可以使用一个编码器-解码器(Encoder-Decoder)的LSTM架构。编码器LSTM将源语言的句子编码为一个向量表示,解码器LSTM则根据该向量表示生成目标语言的句子。在解码器LSTM中,每个时间步的输入不仅包括上一时间步的输出,还包括编码器LSTM的输出向量,从而捕捉源语言和目标语言之间的对应关系。

此外,LSTM还可以与注意力机制(Attention Mechanism)相结合,进一步提高模型的性能。注意力机制允许解码器LSTM在生成每个目标单词时,selectively地关注源句子中的不同部分,从而更好地捕捉长期依赖关系。
在这里插入图片描述

小结

本文详细介绍了LSTM的工作原理、前向传播过程以及在实际任务中的应用。LSTM通过引入细胞状态通道和精心设计的门控机制,能够很好地捕捉长期依赖关系,避免了传统RNN在处理长序列时容易出现的梯度消失/爆炸问题。由于这一优势,LSTM在自然语言处理、语音识别、时间序列预测等领域取得了卓越的成绩,成为序列建模领域的重要工具之一。

虽然LSTM解决了传统RNN的一些问题,但它也存在一些局限性,如无法完全并行化计算、参数较多等。因此,研究人员继续探索更加高效、强大的序列建模架构,如GRU、Transformer等。但无论如何,LSTM都是这一领域的重要里程碑,深入理解LSTM的原理对于学习更先进的序列建模方法至关重要。

End

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

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

相关文章

mysql高级知识之集群

一、安装 源码编译MySQL,若需要MySQLtar包可私信我 #创建数据目录 mkdir /data/mysql -p#安装相关依赖 yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm yum install cmake gcc-c++ openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen…

C++入门day3-面向对象编程(中)

前言:C入门day2-面向对象编程(上)-CSDN博客 运算符重载 我们接触过函数重载,就是同名的函数有不同的功能。那么运算符重载,顾名思义也是赋予运算符其他的功能。在这里,我个人以为,运算符就是特…

C/C++语言基础--函数基础(函数定义、调用、生命周期、递归)

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 函数是语言的基本组成部分,也是面向对象编程的基石,他体现了封装的思想,代码的复用的功能。欢迎点赞 收藏 关注,本人将会持续更新 文章目录 函数什么是函数&am…

彩漩科技亮相第一届人工智能教育应用论坛,荣获AI教育科技产品TOP30奖项

近日,由中国教育发展战略学会人工智能与机器人教育专业委员会指导,北京教育信息化产业联盟主办的第一届人工智能教育应用论坛暨 AI 教育科技成果展在北京隆重举办。本次活动以“ AI 强校大时代 —— 用新质生产力打造金钥匙强校”为主题,汇聚…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器(random access iterator) 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

数据结构(单向链表)

单向链表代码 #ifndef _LINK_H_#define _LINK_H_typedef int DataType;typedef struct node {DataType data;struct node *pnext; }Link_Node_t;typedef struct link {Link_Node_t *phead;int clen; }Link_t;extern Link_t *link_creat(); extern int push_link_head(Link_t *…

智慧公厕技术应用、系统架构、应用功能有哪些?@卓振思众

智慧公厕的标准涵盖了多个方面,包括技术应用、系统架构、应用功能以及环保节能等。以下是【卓振思众】整理的一些标准要点: 技术应用‌物联网技术‌:通过无线传感器、监控设备等实时采集公厕内部环境数据。‌大数据与云计算‌:对数…

2157. 优秀的拆分(power)

代码 #include<bits/stdc.h> using namespace std; int a[10001]; int main() {int n,t1,k0;bool flagfalse;cin>>n;if(n%21) {cout<<-1;return 0;}while(n>0){if(n%21){k;a[k]t; }nn/2;tt*2;}if(k>1) {flagtrue;for(int ik;i>1;i--)cout<&l…

lit-llama代码解析

https://github.com/Lightning-AI/lit-llama/blob/main/README.md 下载的时候会报错误&#xff0c;因为网不行&#xff0c;一种方法就是多次尝试&#xff0c;另一种方法是终端连上代理下载 pycharm连接hugging face等网站_hugging face怎么连接-CSDN博客 根据指引下载权重 下…

springboot,maven多模块开发,子模块获取不到父模块添加的依赖,有多个root模块问题解决

错误示范 我以为放进去然后重载一下就是子模块了 导致后续在外层加的依赖&#xff0c;其article都接收不到 解决方案 需要在父模块的modules注册子模块 修改前后对比 此时子模块也能获取父模块的依赖

DDD设计方法-2-聚合、实体、值对象

前情提要&#xff1a;一共包含 如下六篇文章&#xff08;篇幅精简&#xff0c;快速入门&#xff09; 1、初识DDD 2、聚合、实体、值对象 3、仓储&#xff0c;封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务&#xff0c;实现约定 DDD设计方法-2-聚合、实体、值对象&a…

基于mspm0g3507的智能送药小车(21年电赛f题,openmv寻迹,k210数字识别,并行pid调制)项目实验报告

2024年全国大学生电子设计竞赛&#xff08;TI杯&#xff09; 2024年7月17日 摘要&#xff1a;本项目由微处理器MSPM0G3507&#xff0c;编码器电机驱动&#xff0c;OPENMV、K210视觉处理单元&#xff0c;红外药品检测单元&#xff0c;ZIGBEE无限透传单元&#xff0c;OLED显示&am…

Docker数据卷和Dockerfile

1、什么是Docker数据卷 前言&#xff1a; 在下载的镜像中&#xff0c;我们不能够去改变它内部的一些配置&#xff0c;因为docker的镜像文件是已经配置好的&#xff0c;无法改变&#xff0c;我们只能改变镜像启动后的容器里面的内容&#xff0c;但是又因为&#xff0c;容器本来…

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程 (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建 (1)处理器类配置 (2)处理器类接受请求 (3)获得请求数据 四.拦截器 (1)关于拦截器&#xff1a; (2)拦截器的…

【VMware】麒麟系统网络连接配置

在VMware配置页面点击编辑&#xff0c;进入虚拟网络编辑器将默认的 VMnet0删除&#xff0c;新建网络&#xff0c;设置桥接模式为Intel 打开主机cmd,查看主机IP地址&#xff0c;获取子网掩码&#xff0c;默认网关及DNS服务器 4.在主机寻找可用IP地址&#xff0c;ping不通的为未…

探秘发酵过程:酵母菌如何为白酒赋予不同风味?

在白酒酿造的神秘世界里&#xff0c;发酵过程如同一位隐形的艺术家&#xff0c;用其不同的笔触为白酒勾勒出千变万化的风味。而在这背后&#xff0c;酵母菌作为发酵的主角&#xff0c;发挥着至关重要的作用。今天&#xff0c;就让我们一起探秘发酵过程&#xff0c;了解酵母菌如…

shell 学习笔记:变量、字符串、注释

目录 1. 变量 1.1 定义使用变量 1.2 变量命名规则 1.3 只读变量 1.4 删除变量 1.5 变量类型 1.5.1 字符串变量 1.5.2 整数变量 1.5.3 数组变量 1.5.3.1 整数索引数组 1.5.3.2 关联数组 1.4 环境变量 1.5 特殊变量 2. 字符串 2.1 单引号字符串 2.2 双引…

erlang学习:用OTP构建系统23.12练习题

练习要求 制作一个名为prime_tester_server的gen_server&#xff0c;让它测试给定的数字是否是质数。 你可以使用lib_primes.erl里的is_prime/2函数来处理&#xff08;或者自己实现一个更好的质数测试函 数&#xff09;。把它添加到sellaprime_supervisor.erl的监控树里。 质…

图论(2)

一、度 度统计的是一个节点上又多少条边 度出度入度 出度&#xff1a;统计以该节点为起始点箭头指向外面的边的条数 入度&#xff1a;统计箭头指向该节点的边数 度为1的节点为悬挂节点&#xff0c;边为悬挂边 用矩阵计算节点的度 二、握手定理 比如这里第一个集合里面有三…

ARP协议(原理,特点,报文格式,具体过程),ARP缓存(有效时间,为什么),ARP欺骗(定向断网,成为中间人),RARP简单介绍

目录 ARP协议 引入 介绍 原理 arp请求/响应 特点 报文格式 硬件类型 协议类型 硬件/协议地址长度 op(操作码) 过程 发送请求并处理 返回响应并处理 总结 arp缓存 介绍 arp表项的有效时间 解释 arp欺骗 介绍 定向断网 基于arp的成为中间人的方式 多向…