一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

news2024/11/17 10:00:20

一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

  • 0、前言
  • 1、Recurrent Neural Networks循环神经网络
  • 2、The Problem of Long-Term Dependencies长期依赖的问题
  • 3、LSTM Networks
  • 4、The Core Idea Behind LSTMs
  • 5、Step-by-Step LSTM Walk Through
  • 6、Variants on Long Short Term Memory
  • 7、Conclusion

0、前言

本文主要译至Understanding LSTM Networks并加上了部分笔者的见解,对于全面理解LSTM有一定的帮助。

1、Recurrent Neural Networks循环神经网络

人类不会每一秒都从头开始思考。
当你阅读这篇文章时,你会根据你对前面单词的理解来理解每个单词。
你不会扔掉所有东西,重新开始思考。
你的思想有坚持。Your thoughts have persistence.

传统的神经网络无法做到这一点,这似乎是一个主要缺点。
例如,假设您想对电影中每一点发生的事件类型进行分类。
目前尚不清楚传统的神经网络如何利用其对电影中先前事件的推理来通知后来的事件。

递归神经网络解决了这个问题。它们是带有循环的网络,允许信息持续存在。
在这里插入图片描述
在上图中,一大块神经网络 A, 查看一些输入 x t x_t xt并输出一个值 h t h_t ht
循环允许信息从网络的一个步骤传递到下一个步骤。

这些循环使递归神经网络看起来有点神秘。
然而,如果你多想想,就会发现它们与普通神经网络并没有什么不同。
循环神经网络可以被认为是同一网络的多个副本,每个副本都将一条消息传递给后继者。
考虑一下如果我们展开循环会发生什么:
在这里插入图片描述
这种链状性质表明循环神经网络与序列和列表sequences and lists密切相关。
它们是用于此类数据的神经网络的自然架构。

他们肯定被使用了!
在过去的几年里,将 RNN 应用于各种问题取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕……这个例子不胜枚举。
关于 RNN 可以实现的惊人壮举,将在 Andrej Karpathy 的优秀博客文章 The Unreasonable Effectiveness of Recurrent Neural Networks中进行讨论。但他们真的很了不起。

这些成功的关键是使用“LSTM”,这是一种非常特殊的递归神经网络,对于许多任务,它比标准版本要好得多。
几乎所有基于递归神经网络的令人兴奋的结果都是用它们实现的。
本文将探讨这些 LSTM。

2、The Problem of Long-Term Dependencies长期依赖的问题

RNN 的吸引力之一是它们可能能够将以前的信息连接到当前的任务,例如使用以前的视频帧可能会告知对当前帧的理解。
如果 RNN 可以做到这一点,它们将非常有用。
但他们可以吗?这要看情况而定。

有时,我们只需要查看最近的信息即可执行当前任务。
例如,考虑一个语言模型试图根据前面的单词预测下一个单词。
如果我们试图预测“the clouds are in the sky”中的最后一个词,我们不需要任何进一步的上下文——很明显下一个词将是 sky。
在这种情况下,相关信息和需要它的地方之间的差距很小,RNN 可以学习使用过去的信息。
在这里插入图片描述
但在某些情况下,我们需要更多上下文。
考虑尝试预测文本“I grew up in France… I speak fluent French.”中的最后一个词。
最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言的范围,我们需要法国的上下文,从更远的地方。
相关信息和需要它的点之间的差距变得非常大是完全有可能的。

不幸的是,随着差距的扩大,RNN 变得无法学习连接信息。
在这里插入图片描述
理论上,RNN 绝对有能力处理这种“长期依赖”。
人类可以仔细地为他们挑选参数来解决这种形式的玩具问题。
遗憾的是,在实践中,RNN 似乎无法学习它们。
Hochreiter (1991) [German] 和 Bengio 等人 (1994)深入探讨了这个问题,他发现了一些非常根本的原因,为什么这可能很困难。

值得庆幸的是,LSTM 没有这个问题!

3、LSTM Networks

长短期记忆网络——通常简称为“LSTM”——是一种特殊的 RNN,能够学习长期依赖关系。
它们由 Hochreiter & Schmidhuber (1997) 引入,并在后续工作中被许多人改进和推广。
它们在处理大量问题时表现出色,现在被广泛使用。

LSTM 明确设计用于避免长期依赖问题。
长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西!

所有循环神经网络都具有神经网络重复模块链的形式。
在标准 RNN 中,这个重复模块将具有非常简单的结构,例如单个 tanh 层。
在这里插入图片描述
LSTM 也有这种链状结构,但重复模块有不同的结构。
不是只有一个神经网络层,而是有四个,以一种非常特殊的方式进行交互。
在这里插入图片描述
不要担心正在发生的事情的细节。
稍后我们将逐步介绍 LSTM 图。
现在,让我们尝试熟悉我们将要使用的符号。
在这里插入图片描述
在上图中,每条线都带有一个完整的向量,从一个节点的输出到其他节点的输入。
粉色圆圈代表逐点操作,如向量加法,而黄色框是学习的神经网络层。
行合并表示串联,而行分叉表示其内容被复制并且副本转到不同的位置。

4、The Core Idea Behind LSTMs

LSTM 的关键是细胞状态cell state,即贯穿图表顶部的水平线。

细胞状态有点像传送带。
它直接沿着整个链条运行,只有一些次要的线性交互。
信息很容易原封不动地沿着它流动。
在这里插入图片描述

LSTM 确实有能力删除或添加信息到细胞状态,由称为门的结构仔细调节。

门是一种有选择地让信息通过的方式。
它们由一个 sigmoid 神经网络层和一个逐点乘法运算组成。
在这里插入图片描述

sigmoid 层输出介于 0 和 1 之间的数字,描述应该让多少成分通过。
值为零表示“不让任何东西通过”,而值为 1 表示“让一切都通过!”

LSTM 具有三个这样的门,以保护和控制单元状态cell state。

5、Step-by-Step LSTM Walk Through

LSTM 的第一步是决定我们要从细胞状态中丢弃哪些信息。
该决定由称为“遗忘门层”的sigmoid层做出。
它看着 h t − 1 h_{t−1} ht1 x t x_t xt, 并输出一个介于 0 和1之间的数字对于细胞状态 C t − 1 C_{t−1} Ct1 中的每个数字。
A 1代表“完全保留这个”,而 a 0 代表“彻底抛弃这个”。

让我们回到我们的语言模型示例,它试图根据所有先前的单词预测下一个单词。
在这样的问题中,细胞状态可能包括当前主体的性别,以便可以使用正确的代词。
当我们看到一个新主题时,我们想忘记旧主题的性别。
在这里插入图片描述
下一步是决定我们要在细胞状态中存储哪些新信息。
这有两个部分。
首先,称为“输入门层”的 sigmoid 层决定我们将更新哪些值。
接下来,一个 tanh 层创建一个新候选值向量 C ~ t \tilde{C}_t C~t,可以将其添加到状态。
在下一步中,我们将结合这两者来创建对状态的更新。

在我们的语言模型示例中,我们想要将新主题的性别添加到单元格状态,以替换我们忘记的旧主题。
在这里插入图片描述
现在是更新旧细胞状态 C t − 1 C_{t−1} Ct1 的时候了, 进入新的细胞状态 C t C_t Ct. 前面的步骤已经决定了要做什么,我们只需要实际去做。

我们将旧状态乘以 f t f_t ft,以忘记我们早些时候决定忘记的事情。
然后我们加上 i t ∗ C ~ t i_t * \tilde{C}_t itC~t
这是新的候选值,根据我们决定更新每个状态值的程度进行缩放。

在语言模型的情况下,这是我们实际上要删除有关旧主题性别的信息并添加新信息的地方,正如我们在前面的步骤中所决定的那样。
在这里插入图片描述
最后,我们需要决定要输出什么。
此输出将基于我们的细胞状态,但将是过滤后的版本。
首先,我们运行一个 sigmoid 层,它决定我们要输出细胞状态的哪些部分。
然后,我们把cell state通过tanh(将值推到 −1 和 1之间 ) 并将其乘以 sigmoid 门的输出,这样我们就只输出我们决定输出的部分。

对于语言模型示例,由于它只是看到一个主语,它可能想要输出与动词相关的信息,以防接下来会发生什么。
例如,它可能会输出主语是单数还是复数,这样我们就知道接下来应该将动词变位为什么形式。
在这里插入图片描述

6、Variants on Long Short Term Memory

到目前为止,我所描述的是一个非常普通的 LSTM。
但并不是所有的 LSTM 都和上面的一样。
事实上,似乎几乎每篇涉及 LSTM 的论文都使用略有不同的版本。
差异很小,但值得一提的是其中的一些差异。

由 Gers & Schmidhuber (2000) 引入的一种流行的 LSTM 变体正在添加“窥孔连接”。“peephole connections.”
这意味着我们让门层查看细胞状态。
在这里插入图片描述
上图给所有的门都加了窥视孔,但是很多论文会给一些窥视孔,其他的就不给了。

另一种变体是使用耦合的遗忘门和输入门。
我们不是单独决定要忘记什么以及我们应该向什么添加新信息,而是一起做出这些决定。
我们只会忘记什么时候我们要输入一些东西来代替它。
当我们忘记旧的东西时,我们只会向状态输入新值。
在这里插入图片描述
LSTM 的一个稍微更显着的变化是门控循环单元 (Gated Recurrent Unit, GRU),由 Cho 等人引入(2014)。
它将遗忘门和输入门组合成一个“更新门”。
它还合并了细胞状态和隐藏状态,并做了一些其他的改变。
生成的模型比标准 LSTM 模型更简单,并且越来越受欢迎。
在这里插入图片描述
这些只是一些最著名的 LSTM 变体。
还有很多其他的,比如 Yao 等人的 Depth Gated RNNs(2015)。
还有一些完全不同的方法来解决长期依赖关系,比如 Koutnik 等人的 Clockwork RNNs (2014)。

这些变体中哪个最好?差异重要吗?格雷夫等人 (2015) 对流行的变体进行了很好的比较,发现它们都差不多。 Jozefowicz 等人 (2015) 测试了超过一万个 RNN 架构,发现其中一些在某些任务上比 LSTM 更有效。

7、Conclusion

早些时候,我提到了人们使用 RNN 取得的显著成果。
基本上所有这些都是使用 LSTM 实现的。
对于大多数任务,它们确实工作得更好!

写成一组方程式,LSTM 看起来相当吓人。
希望在本文中逐步介绍它们可以使它们更容易理解。

LSTM 是我们使用 RNN 可以完成的一大步。
人们很自然地会想:是否又迈出了一大步?
研究人员的共同意见是:“是的!还有下一步,那就是attention!”这个想法是让 RNN 的每一步都从一些更大的信息集合中挑选信息来查看。
例如,如果您使用 RNN 创建描述图像的标题,它可能会选择图像的一部分来查看它输出的每个单词。
事实上,徐等人 (2015) 正是这样做的——如果你想探索注意力,这可能是一个有趣的起点!
使用注意力已经取得了许多非常令人兴奋的结果,而且似乎还有更多的结果……

注意力并不是 RNN 研究中唯一令人兴奋的话题。
例如,Kalchbrenner 等人的 Grid LSTM (2015) 似乎非常有前途。
在生成模型中使用 RNN——例如 Gregor 等人 (2015),Chung 等人 (2015),或 Bayer & Osendorfer (2015) – 似乎也很有趣。
过去几年对于递归神经网络来说是一个激动人心的时期,而即将到来的只会更加精彩!

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

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

相关文章

Linux--进程(一篇博客让你理解操作系统的底层)

Linux–进程 本篇博客讲开始进入进程模块,我们先从冯诺依曼的体系结构和操作系统讲起,由浅入深,先梳理一个Linux相关知识体系框架~ 进程目录 Linux--进程一、冯诺依曼体系结构1.1外围设备1.2中央处理器(CPU)1.3存储器(内存)1.3.1什么是内存&a…

【LeetCode20】有效的括号——图解

​ 你好,欢迎来到我的博客!作为一名程序员,我经常刷LeetCode题目来提升自己的编程能力。在我的博客里,我会分享一些我自己做过的题目和解题思路,希望能够帮助到大家。今天,我想和大家分享一道挑战性较高的题…

【Java校招面试】实战面经(三)

目录 前言一、简历中项目的难点及解决方案二、讲讲分布式锁的实现三、AQS(Abstract Queued Synchronizer)的原理四、ConcurrentHashMap的原理五、MySQL InnoDB存储引擎中的MVCC解决了什么问题,MVCC的实现原理六、平时怎么创建线程?为什么用线程池&#x…

Red Hat Enterprise Linux (RHEL) 8.8 正式版发布

红帽企业 Linux 8.8 发布 Red Hat Enterprise Linux (RHEL) 8.8 (x86_64, aarch64) Release 请访问原文链接:https://sysin.org/blog/rhel-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023年 5月 16日&…

Java学习路线(5)——数组

一、数组的概念 数组是用来存储一系列同类型数据的内存区域。 二、存储数据 1、静态初始化数组 作用: 定义数组时直接赋值。 格式: 【数据类型[] 变量名 new 数据类型[]{值1,值2…,值n}】 示例: double[] height {172.5,170.1,145.1,152.5,…

java常用工具之Scanner类

目录 简介一、扫描控制台输入1.1nextLine1.2nextInt1.3其他方法 二、扫描文件三、查找匹配项四、小结 简介 Java 的 Scanner 类是一个方便在控制台扫描用户输入的工具类,虽然它也可以扫描文件内容,但我们通常更喜欢它扮演前面的角色,因为扫描…

Flink第五章:处理函数

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 文章目录 系列文章目录前言一、基本处理函数(ProcessFunction)二、按键分区处理函数(KeyedProcessFunction)1.处理…

【Linux进阶之路】基本权限的理解

文章目录 一.用户1.分类2.su3.su-4.sudo 二.文件1.文件分类2.文件权限3.文件权限的身份4.chmod——改写文件权限第一种方式第二种方式 5.chown——改写文件拥有者身份6.chgrp ——改写文件所属组身份7.umask ——设置权限掩码8.目录权限9.粘滞位——特殊的可执行权限 一.用户 …

关于Markdown文件的处理【笔记】

关于Markdown文件的处理【笔记】 前言推荐关于Markdown文件的处理一、md文件转word文档1 准备2 打开3 转为word文档4 导出结果5 打开 二、word文档转md文件1 准备2 导入3 打开4 显示图片5 打开 三、导入到CSDN中1 选择导入2 查看 四、导入设置1 前言2 导入设置3 修改配置 最后 …

ES6之生成器

文章目录 前言一、生成器是什么?二、生成器总结 前言 生成器 一、生成器是什么? 生成器就是一个特殊的函数,实现异步编程。格式function *名称(){...} (这个*靠近function写,靠近名称写,或者两边空格都不靠近均正确)…

[比赛简介]Parkinson‘s Freezing of Gait Prediction

比赛链接:https://www.kaggle.com/competitions/tlvmc-parkinsons-freezing-gait-prediction 比赛简介 本次比赛的目标是检测步态冻结(FOG),这是一种使人衰弱的症状,困扰着许多帕金森病患者。您将开发一个机器学习…

YOLO V3 SPP ultralytics 第三节:关于yolo 中cfg的网络配置信息和读取cfg配置文件

目录 1. 介绍 2. 关于yolo的cfg网络配置文件 2.1 关于卷积层 2.2 关于池化层 2.3 关于捷径分支shortcut 2.4 关于route 层 2.5 关于上采样层 2.6 关于yolo层 3. 解析cfg 文件 4. 代码 1. 介绍 根据 第二节 的步骤,生成了属于自己的 my_yolov3.cfg 配置…

Python 墨西哥湾流(gulf stream)可视化

背景介绍 墨西哥湾流和黑潮分别是北半球两支强大的西边界流,墨西哥湾流的流速还要强于黑潮,也是温盐环流的重要组成部分。 引入涡度的概念,将涡度分为两个部分: 1、行星涡度,记为 f f f,与地球自转有关…

【软考数据库】第十四章 数据库主流应用技术

目录 14.1 分布式数据库 14.2 Web与数据库 14.3 XML与数据库 14.4 面向对象数据库 14.5 大数据与数据库 14.6 NewSQL 前言: 笔记来自《文老师软考数据库》教材精讲,精讲视频在b站,某宝都可以找到,个人感觉通俗易懂。 14.1 …

Springcloud1---->openFeign

目录 简介快速入门导入依赖开启Feign配置Feign客户端接口Feign使用小结feign feign配置负载均衡feign配置Hystix支持 简介 Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切…

WebSocket 详解,以及用QWebSocket 实现服务端和客户端(含代码例子)

目录 1、WebSocket 诞生背景 2、WebSocket的特点: 3、 WebSocket 简介 4、WebSocket 优点 5、QWebSocket通讯—客户端: 6、QWebSocket通讯—服务端: 1、WebSocket 诞生背景 早期,很多网站为了实现推送技术,所用的技术都…

初始Linux发展

目录 前言 Linux概念: 一.Linux发展历史 二.Linux的发展现状 三.发行版本 四.Linux 环境的搭建方式 主要有三种 : 4.6下载方式: 五.XShell软件 前言 Linux概念: Linux,全称GNU/Linux,是一套免费使用和自由传播的…

python中的对象和变量的关系

这里写目录标题 对象简介对象的结构变量和对象 对象简介 Python是一门面向对象的编程语言! 一切皆对象! 程序运行当中,所有的数据都是存储到内存当中然后再运行的! 对象就是内存中专门用来存储指定数据的一块区域 对象实际上就是…

《计算机网络—自顶向下方法》 Wireshark实验(九):DHCP 协议分析

DHCP(Dynamic Host configuration protocol)动态主机配置协议,它可以为客户机自动分配 IP 地址、子网掩码以及缺省网关、DNS 服务器的 IP 地址等 TCP/IP 参数, 简单来说,就是在 DHCP 服务器上有一个数据库,…

Go开发PaaS平台核心功能

Go开发PaaS平台核心功能 1 云原生PaaS平台介绍 随着云计算的发展,越来越多的企业逐步的把IT资源迁移到云上。PaaS平台作为基础设施基座,可以帮助企业快速构建功能丰富的容器云平台,提升交付效率,降低成本。 [1.1] 云原生平台使…