深度学习知识点:LSTM

文章目录

  • 1.应用现状
  • 2.发展历史
  • 3.基本结构
  • 4.LSTM和RNN的差异

1.应用现状

长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多,很容易出现梯度爆炸或者梯度消失的问题,导致无法处理较长序列数据,从而无法获取长距离数据的信息。

LSTM应用的领域包括:文本生成、机器翻译、语音识别、生成图像描述和视频标记等。

  • 2009年, 应用LSTM搭建的神经网络模型赢得了ICDAR手写识别比赛冠军。
  • 2015年以来,在机械故障诊断和预测领域,相关学者应用LSTM来处理机械设备的振动信号。
  • 2016年, 谷歌公司应用LSTM来做语音识别和文字翻译,其中Google翻译用的就是一个7-8层的LSTM模型。
  • 2016年, 苹果公司使用LSTM来优化Siri应用。

2.发展历史

1997年,Sepp Hochreiter 和 Jürgen Schmidhuber[1]提出了长短期记忆神经网络(LSTM),有效解决了RNN难以解决的人为延长时间任务的问题,并解决了RNN容易出现梯度消失的问题。

  • 1999年,Felix A. Gers等人[2]发现[1]中提出的LSTM在处理连续输入数据时,如果没有重置网络内部的状态,最终会导致网络崩溃。因此,他们在文献[1]基础上引入了遗忘门机制,使得LSTM能够重置自己的状态。
  • 2000年,Felix A. Gers和Jiirgen Schmidhuber[3]发现,通过在LSTM内部状态单元内添加窥视孔(Peephole)连接,可以增强网络对输入序列之间细微特征的区分能力。
  • 2005年,Alex Graves和Jürgen Schmidhuber[4]在文献[1] [2] [3]的基础上提出了一种双向长短期记忆神经网络(BLSTM),也称为vanilla LSTM,是当前应用最广泛的一种LSTM模型。
  • 2005年-2015年期间,相关学者提出了多种LSTM变体模型,此处不多做描述。
  • 2016年,Klaus Greff 等人[5]回顾了LSTM的发展历程,并比较分析了八种LSTM变体在语音识别、手写识别和弦音乐建模方面的能力,实验结果表明这些变体不能显著改进标准LSTM体系结构,并证明了遗忘门和输出激活功能是LSTM的关键组成部分。在这八种变体中,vanilla LSTM的综合表现能力最佳。另外,还探索了LSTM相关超参数的设定影响,实验结果表明学习率是最关键的超参数,其次是网络规模(网络层数和隐藏层单元数),而动量梯度等设置对最终结果影响不大。
  • 在GRU被提出后,Junyoung Chung等人[6]比较了LSTM和GRU在复音音乐和语音信号建模方面的能力,实验结果表明GRU和LSTM表现相当。
  • GRU被提出至今(2019年),也只有几年时间,关于它的一些应用利弊到目前还未探索清楚。不过,相对于LSTM架构,GRU的的参数较少,在数据量较大的情况下,其训练速度更快。
  • LSTM是深度学习技术中的一员,其基本结构比较复杂,计算复杂度较高,导致较难进行较深层次的学习,例如谷歌翻译也只是应用7-8层的LSTM网络结构。另外,在训练学习过程中有可能会出现过拟合,可以通过应用dropout来解决过拟合问题(这在Keras等框架中均有实现。
  • LSTM在当前应用比较的结构是双向LSTM或者多层堆叠LSTM,这两种结构的实现在Keras等框架中均有对应的API可以调用。
    下图展示一个堆叠两层的LSTM结构图
    在这里插入图片描述
    下图展示了一个双向LSTM的结构图
    在这里插入图片描述

3.基本结构

本节首先回顾一下RNN的基本结构,然后说明LSTM的具体原理(下面要介绍的LSTM即为vanilla LSTM)。
原始的RNN基本结构图如下图所示。
在这里插入图片描述
由上图可知,RNN展开后由多个相同的单元连续连接。但是,RNN的实际结构确和上图左边的结构所示,是一个自我不断循环的结构。即随着输入数据的不断增加,上述自我循环的结构把上一次的状态传递给当前输入,一起作为新的输入数据进行当前轮次的训练和学习,一直到输入或者训练结束,最终得到的输出即为最终的预测结果。
LSTM是一种特殊的RNN,两者的区别在于普通的RNN单个循环结构内部只有一个状态。而LSTM的单个循环结构(又称为细胞)内部有四个状态。相比于RNN,LSTM循环结构之间保持一个持久的单元状态不断传递下去,用于决定哪些信息要遗忘或者继续传递下去。
包含三个连续循环结构的RNN如下图,每个循环结构只有一个输出:
在这里插入图片描述
包含三个连续循环结构的LSTM如下图,每个循环结构有两个输出,其中一个即为单元状态:
在这里插入图片描述
一层LSTM是由单个循环结构结构组成,既由输入数据的维度和循环次数决定单个循环结构需要自我更新几次,而不是多个单个循环结构连接组成,即当前层LSTM的参数总个数只需计算一个循环单元就行,而不是计算多个连续单元的总个数。
下面将由一组图来详细解释LSTM细胞的基本组成和实现原理。LSTM细胞由遗忘门、输入门、输出门和单元状态组成。

  • 遗忘门( f t f_t ft):决定上一时刻的单元状态有多少需要保留到当前时刻。 (清理记忆垃圾,只保留考试相关内容)
  • 输入门( i t i_t it): 更新门决定了当前时刻有多少新的信息要被存储到单元状态中。(吸收新重点,加入到当前记忆)
  • 输出门( o t o_t ot):控制当前单元状态有多少需要输出到当前的输出值。(考试时根据题目提取相关知识点作答)

更通俗的解释:

  1. 遗忘门 (Forget Gate)

    功能:决定过去的信息中哪些需要保留,哪些需要丢弃。
    • 比喻:遗忘门像你的大脑在复习时选择丢弃的内容。例如,高数考试时你已经知道某些知识点不会考(如绪论部分),于是选择不再复习这些内容。
    • 原理:根据当前输入(考试重点提示)和过去的记忆(已掌握的知识)评估重要性,决定哪些内容不再需要(权值接近 0 的部分被遗忘)。

  2. 输入门 (Input Gate)

    功能:决定当前时刻有多少新的信息需要被记住并加入到记忆中。
    • 比喻:输入门像你的大脑在吸收新的知识。例如,在老师讲解考试重点时,你决定哪些内容是需要认真记忆的重点。
    • 原理:根据当前的输入(老师强调的重点)和上下文评估新信息的价值,选择性地将有用信息写入到记忆中。

  3. 输出门 (Output Gate)

    功能:决定当前单元状态中的多少内容需要被输出,用于生成当前时刻的输出值。
    • 比喻:输出门像你在考试答题时的记忆提取过程。例如,考试时你只需要提取与题目相关的知识点,而不需要将整本书的内容全部回忆出来。
    • 原理:基于单元状态(你储存的知识)和当前输入(具体的考试题目)决定需要输出的信息量。

下图展示了应用上一个时刻的输出 h t − 1 h_{t-1} ht1和当前的数据输入 x t x_t xt,通过遗忘门得到 f t f_t ft的过程。

在这里插入图片描述
下图展示了应用上一个时刻的输出 h t − 1 h_{t-1} ht1和当前的数据输入 x t x_t xt,通过输入门得到 i t i_t it,以及通过单元状态得到当前时刻暂时状态 C ~ t \tilde{C}_t C~t的过程。
在这里插入图片描述
下图展示了应用上一个细胞结构的单元状态 C t − 1 C_{t-1} Ct1、遗忘门输出 f t f_t ft、输入门输出 i t i_t it以及单元状态的输出 C ~ t \tilde{C}_t C~t,得到当前细胞的状态 C t C_t Ct的过程。
在这里插入图片描述
下图展示了应用上一个时刻的输出 h t − 1 h_{t-1} ht1和当前的数据输入 x t x_t xt,通过输出门得到 o t o_t ot的过程,以及结合当前细胞的单元状态 C t C_t Ct o t o_t ot得到最终的输出 h t h_t ht的过程。
在这里插入图片描述
看看里面的步骤
解释

  • 三个 σ \sigma σ代表三个门,其输入均有上一层的隐藏状态 h t h_t ht以及输入数据 x t x_t xt
  • g t g_t gt = C ~ t \tilde{C}_t C~t
  • 其他参数: W W W初始化权重, b b b偏置向
  • c t − 1 c_{t-1} ct1在经历过一次乘法和一次加法后的流动方向有两个:一个是直接输出,另一个是经过 t a n h tanh tanh后和 o t o_t ot汇合输出 h t h_t ht
  • h t h_t ht也有两个流向:一个是流到下一个时刻,另一个是输出 y t = W y h h t + b y y_t = W_{yh}h_t + b_y yt=Wyhht+by
    在这里插入图片描述

4.LSTM和RNN的差异

RNN:把所有信息都记住,不管有用的没用的。
LSTM:设计一个记忆细胞,具备选择性记忆的功能,可以选择记忆重要信息,过滤掉噪声信息,减轻记忆负担,解决了RNN上的问题:梯度爆炸和梯度消失
通俗讲差异:在期末复习周的时候,比如要考高数,老师已经给划定了重点,RNN还是会把整本书复习一遍,这会导致记忆负担重,会遗忘掉一些重要的信息,导致记忆效果差;而LSTM过滤掉了不考的信息,只记重点
名词解释
       梯度消失:
              现象:在训练过程中,反向传播时梯度逐渐变小,导致网络的早期层权重更新很少甚至停滞,使模型无法捕捉长期                      依赖的信息。
              原因:在时间序列长度较长的情况下,RNN 的反向传播会涉及到多次链式求导(如 ∂ L ∂ W \frac{\partial L}{\partial W} WL中的链式规则)。如果激活                      函数的导数值小于 1(如 sigmoid),会使得梯度逐步衰减,最终趋近于 0。
       梯度爆炸:
              现象:在训练过程中,反向传播时梯度逐渐变大,导致权重更新幅度过大,模型失控。
              原因:与梯度消失类似,但激活函数导数值较大(或权重初始化不当)会导致梯度不断放大。

参考文献

[1] S. Hochreiter and J. Schmidhuber, “Long Short-Term Memory,” Neural Comput, vol. 9, no. 8, pp. 1735–1780, Nov. 1997.

[2] F. A. Gers, J. Schmidhuber, and F. A. Cummins, “Learning to Forget: Continual Prediction with LSTM,” Neural Comput., vol. 12, pp. 2451–2471, 2000.

[3] F. A. Gers and J. Schmidhuber, “Recurrent nets that time and count,” Proc. IEEE-INNS-ENNS Int. Jt. Conf. Neural Netw. IJCNN 2000 Neural Comput. New Chall. Perspect. New Millenn., vol. 3, pp. 189–194 vol.3, 2000.

[4] A. Graves and J. Schmidhuber, “Framewise phoneme classification with bidirectional LSTM and other neural network architectures,” Neural Netw., vol. 18, no. 5, pp. 602–610, Jul. 2005.

[5] K. Greff, R. K. Srivastava, J. Koutník, B. R. Steunebrink, and J. Schmidhuber, “LSTM: A Search Space Odyssey,” IEEE Trans. Neural Netw. Learn. Syst., vol. 28, no. 10, pp. 2222–2232, Oct. 2017.

[6] J. Chung, C. Gulcehre, K. Cho, and Y. Bengio, “Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling,” ArXiv14123555 Cs, Dec. 2014.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git提交

基本流程:新建分支 → 分支上开发(写代码) → 提交 → 合并到主分支 拉取最新代码因为当前在 master 分支下,你必须拉取最新代码,保证当前代码与线上同步(最新),执行以下命令:bashgit pull orig…

Spring——自动装配

假设一个场景: 一个人(Person)有一条狗(Dog)和一只猫(Cat),狗和猫都会叫,狗叫是“汪汪”,猫叫是“喵喵”,同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

基于 JavaEE 的影视创作论坛

在当今数字化时代,影视创作论坛成为了影视爱好者们交流与分享的重要平台。本文将详细介绍基于 JavaEE 的影视创作论坛的设计与实现,让大家了解其背后的技术奥秘。 文末附有完整项目代码 该论坛具备丰富的功能,包括首页推荐、用户管理、影片管…

系统思考—因果关系

果的背后是因,因的背后是系统:我们遇到的每个结果,无论是企业的业绩问题,团队的效率问题,还是个人的情绪问题,都源于我们日积月累种下的因。这些因可能是错误的习惯、僵化的制度、还是短视的决策。 改变系…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

IDEA中创建maven项目

1. IDEA中创建maven项目 在IDEA中创建Maven项目,前提是已经安装配置好Maven环境。如还未配置安装Maven的,请先下载安装。如何下载安装,可参考我另外篇文章:maven的下载与安装教程本篇教程是以创建基于servlet的JavaWeb项目为例子&…

【C++入门】详解(中)

目录 💕1.函数的重载 💕2.引用的定义 💕3.引用的一些常见问题 💕4.引用——权限的放大/缩小/平移 💕5. 不存在的空引用 💕6.引用作为函数参数的速度之快(代码体现) &#x1f4…

django基于Python的电影推荐系统

Django 基于 Python 的电影推荐系统 一、系统概述 Django 基于 Python 的电影推荐系统是一款利用 Django 框架开发的智能化应用程序,旨在为电影爱好者提供个性化的电影推荐服务。该系统通过收集和分析用户的观影历史、评分数据、电影的属性信息(如类型…

2024AAAI SCTNet论文阅读笔记

文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率:168MHz 工具:STM32CubeMX 本篇仅仅只是提供超频(默认指的是主频)的简单方法,并未涉及STM32超频极限等问题。原理很简单,通过设置锁相环的倍频系数达到不同的频率&am…

python类和对象

一、什么是类和对象 类和对象一般是编程中较早接触到的比较抽象的概念,其实我们只要按照我们现实生活的实例去类比,就很好理解了 概念理解 我们可以把类比做是一个盖房子的图纸,对象比做是根据图纸去创建出来的一栋房子,这样每…

太原理工大学软件设计与体系结构 --javaEE

这个是简答题的内容 选择题的一些老师会给你们题库,一些注意的点我会做出文档在这个网址 项目目录预览 - TYUT复习资料:复习资料 - GitCode 希望大家可以给我一些打赏 什么是Spring的IOC和DI IOC 是一种设计思想,它将对象的创建和对象之间的依赖关系…

CNN Test Data

由于数据量过大,打不开了 搞一组小的吧。收工睡觉 https://download.csdn.net/download/spencer_tseng/90256048

Windows下调试Dify相关组件(2)--后端Api

1.部署依赖的服务(代码最外层的docker目录) 1.1 将middleware.env.example复制,并改名为middleware.env。 1.2 查看docker-compose.middleware.yaml,有5个服务 db:postgres数据库。 redis:redis缓存。 sa…

从预训练的BERT中提取Embedding

文章目录 背景前置准备思路利用Transformer 库实现 背景 假设要执行一项情感分析任务,样本数据如下 可以看到几个句子及其对应的标签,其中1表示正面情绪,0表示负面情绪。我们可以利用给定的数据集训练一个分类器,对句子所表达的…

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中,阅读了官方文档,在之前做flutter时候,经常使用overlay,使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…

基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)

本篇技术博文摘要 🌟 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 📘 在这个快速发展的技术时代,与时俱进是每个IT人的必修课。我…

DeepSeek:性能强劲的开源模型

deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型​ DeepSeek-V3 为自研 MoE 模型,671B 参数,激活 37B,在 14.8T token 上进行了预训练。 论…

Elastic-Job相关

文档参考视频:09_SpringBoot案例演示_哔哩哔哩_bilibili 一、Elastic-Job介绍 Elastic-Job 是一个轻量级、分布式的任务调度框架,旨在解决分布式环境下的定时任务调度问题。 1.1. Elastic-Job 的核心组件 Elastic-Job 是由多个核心组件构成的&#x…

【Linux】文件 文件描述符fd

🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 🌻个人主页:路飞雪吖~ 一、C文件接口 🌟写文件 🌠小贴士: 🌠stdin && stdout && stderr Linux下…