深度学习知识点: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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过氧化最小化工艺提高SiC MOSFET迁移率的深入分析

标题 Insight Into Mobility Improvement by the Oxidation-Minimizing Process in SiC MOSFETs(TED2024) 文章的研究内容 文章的研究内容主要围绕氧化最小化工艺(oxidation-minimizing process)对碳化硅(SiC&…

【Unity小技巧】解决Visual Code中文乱码

在Mac下使用VS Code打开代码时,中文注释显示乱码。 解决方法: VS Code:Setting -> Settings -> 搜索“autoGuessEncoding”,然后勾选上即可。 简体中文的Encoding是GB 2312。

maven 下载依赖 jhash:2.1.2 和对应 jar 包

原文地址 前言 25年新的一年,那就先更新一篇技术文章吧,这个是这几天刚遇到的一个有意思的bug,记录分享一下 原因分析 在使用maven加载一个项目的时,发现maven的依赖一直无法解析,更换阿里云镜像和中央仓库都没办法…

回归预测 | MATLAB基于RF-Adaboost多输入单输出回归预测

回归预测 | MATLAB基于RF-Adaboost多输入单输出回归预测 目录 回归预测 | MATLAB基于RF-Adaboost多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB基于RF-Adaboost多输入单输出回归预测。 1.Matlab实现RF-Adaboost随机森林集成学习…

【网络协议】动态路由协议

前言 本文将概述动态路由协议,定义其概念,并了解其与静态路由的区别。同时将讨论动态路由协议相较于静态路由的优势,学习动态路由协议的不同类别以及无类别(classless)和有类别(classful)的特性…

基于SSM实现的垃圾分类平台系统功能实现二

一、前言介绍: 1.1 项目摘要 随着城市化进程的加速和居民生活水平的提高,城市生活垃圾的产量急剧增加,给城市环境管理带来了巨大压力。传统的垃圾处理方式,如填埋和焚烧,不仅占用大量土地资源,还可能对环…

如何实现多级缓存?

本文重点说一说在Java应用中,多级缓存如何实现。 多级缓存是比较常见的一种性能优化的手段,一般来说就是本地缓存分布式缓存。 本地缓存一般采用Caffeine和Guava,这两种是性能比较高的本地缓存的框架。他们都提供了缓存的过期、管理等功能。…

美摄科技为企业打造专属PC端视频编辑私有化部署方案

美摄科技,作为视频编辑技术的先行者,凭借其在多媒体处理领域的深厚积累,为企业量身打造了PC端视频编辑私有化部署解决方案,旨在帮助企业构建高效、安全、定制化的视频创作平台,赋能企业内容创新,提升品牌影…

嵌入式C语言:什么是指针?

目录 一、指针的基本概念 1.1. 定义指针 1.2. 赋值给指针 1.3. 解引用指针 1.4. 指针运算 1.5. 空指针 1.6. 函数参数 1.7. 数组和指针 1.8. 示例代码 二、指针在内存中的表示 2.1. 内存地址存储 2.2. 内存模型 2.3. 指针与硬件交互 2.4. 示例代码 三 、指针的重…

计算机网络相关习题整理

第一讲 传输媒介 【知识点回顾】 两种导线可以减小电磁干扰: 双绞线(分为非屏蔽双绞线、屏蔽双绞线)(RJ-45用)同轴电缆(短距离使用)网络通信的基本单位:位(bit&#xff…

应急响应之入侵排查(下)

一.进程排查 1.Windows 任务管理器查看 在 Windows 系统中,可通过任务管理器查看进程信息。操作步骤为:在任务管理器界面,于 “查看” 选项中选择 “选择列”,随后添加 “映像路径名称” 和 “命令行”,以此查看更多进…

极狐GitLab 正式发布安全版本17.7.1、17.6.3、17.5.5

本分分享极狐GitLab 补丁版本 17.7.1, 17.6.3, 17.5.5 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…

力扣经典二分题:4. 寻找两个正序数组的中位数

题目链接:4. 寻找两个正序数组的中位数 - 力扣(LeetCode) 一、题目分析 这道题目是让我们在 两个正序的数组中寻找中位数已知两个数组的大小分别是:int m nums1.size(),n nums2.size();中位数性质1:中位数左侧元素 …

安装yarn时显示npm使用淘宝镜像安装报错

问题描述: npm使用淘宝镜像安装报错 错误原因: 淘宝原镜像域名(registry.npm.taobao.org)的 HTTPS 证书正式到期,npm 淘宝镜像已经从 registry.npm.taobao.org 切换到了 registry.npmmirror.com。解决方案:…

【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!

这里写目录标题 什么是Selenium?Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本脚本执行结果常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo…

Seata搭建

1.初识Seata Quick Start | Apache Seata 官网 2.准备nacos和 seata 启动nacos startup.cmd -m standalone账号nacos 密码nacos 搭建seata TC 这里下载的 1.4.2 seata-server-1.4.2 1.修改seata配置文件 registry.conf 这里我们使用nacos作为注册中心 和 配置中心 r…

selenium+pyqt5自动化工具总结

说明:本工具是,操作外部google浏览器、selenium是无法操作qt界面中嵌套的浏览器的, 工具在后面 1. 代码结构 pycharm打开的文件下,再写一个子文件,文件导入的时候把子文件名带上 这样就可以在 外层使用命令 pyinst…

.NET 终止或结束进程

如何使用 C# 终止进程。 使用简单的方法终止.NET中的现有进程Process.Kill()。有一个可选参数 true 或 false,用于结束与要结束的进程相关的所有子进程。 了解如何创建流程。 结束当前进程: System.Diagnostics.Process.GetCurrentProcess().Kill(tru…

怎么实现Redis的高可用?

大家好,我是锋哥。今天分享关于【怎么实现Redis的高可用?】面试题。希望对大家有帮助; 怎么实现Redis的高可用? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 为了实现 Redis 的高可用性,我们需要保证在发…

大数据技术实训:Hadoop完全分布式运行模式配置

准备: 1)准备3台客户机(关闭防火墙、静态ip、主机名称) 2)安装JDK 3)配置环境变量 4)安装Hadoop 5)配置环境变量 6)配置集群 7)单点启动 8)配置ss…