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

一步一步详解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) – 似乎也很有趣。
过去几年对于递归神经网络来说是一个激动人心的时期,而即将到来的只会更加精彩!

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

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

相关文章

微信小程序原生开发功能合集十五:个人主页功能实现

本章个人主页功能实现,展示当前登录用户信息、个人主页、修改密码、浏览记录、我的收藏、常见问题、意见反馈、关于我们等界面及对应功能实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如…

(1分钟速览)g2o入门指南--笔记版

在slam后端中,优化的框架很多,有ceres,g2o,gtsam这些。要想真正掌握slam后端的优化内容,这些框架是必不可少的上手练习的内容。本文则介绍有关g2o的相关内容,作为一个入门指南,目标:…

Python 学习 2022.08.28 周日

文章目录 一、 概述1.1) 之前写的文章:1.2) 基础点1.3) 配置1.4) Python2 和 Python3 的区别1.5) 相关问题跟踪解决1.6) 其他 一、 概述 1.1) 之前写的文章: 【Python大系】Python快速教程《Python 数据库 GUI CGI编…

怎么取消只读模式?硬盘进入只读模式怎么办?

案例:电脑磁盘数据不能修改怎么办? 【今天工作的时候,我想把最近的更新的资料同步到电脑上的工作磁盘,但是发现我无法进行此操作,也不能对磁盘里的数据进行改动。有没有小伙伴知道这是怎么一回事?】 在使…

无线充+台灯专用PD诱骗芯片LDR6328S

近几年,日常生活中到处可以看到消费者使用支持Type-c接口的电子产品,如手机,笔记本,筋膜枪,蓝牙音箱等等。例如,像筋膜枪,蓝牙音箱,无人机,小风扇。 无线充台灯方案&…

容器安装Datax+Datax-web2.1(一)

目录 简介1、安装Datax-web2.1.11)安装docker-compose2)创建Datax-web和MySQL容器 2、安装Datax-web2.1.21)安装MySQL2)初始化数据3)安装datax和datax-web4)浏览器登录 DataxDatax-web2.1实现MySQL数据库数…

如何通过SOLIDWORKS driveworksxpress初步实现参数化设计

当提到参数化设计,我们首先需要了解究竟什么是参数化设计,它是指从一个系统的角度,计划所有的设计过程,在整个系统中建立组件、次组件和子零件之间的关系,在最上层的部分建立设计意图,并将其往较下层的部分…

RK3588光电载荷处理板研制进展

本来就是一个很小众的市场,但是偶尔也会有同行询问,这儿就简单汇报一下后期的进展 板子已经开发完成,并有幸得到了两个订单,虽然量不是很大,但是也很开心由于一段时间的努力和付出,将该设备应用在了国防事业…

微信小程序等待wx.requestPayment的回调函数执行完后再执行后续代码

async/await & Promise的再认识 背景 在开发微信小程序过程中,遇到如下需求: 需要等待wx.requestPayment的回调函数执行完后再执行后续代码 这是因为在调用wx.requestPayment之后,会弹出一个支付弹窗,如果此时点击右上角的…

Electron自定义窗口

Electron标题栏隐藏和自定义 Electron应用自定义标题栏样式 标题栏样式允许隐藏浏览器窗口的大部分色彩,同时保持系统原生窗口控件完整无损,并可以在 BrowserWindow 的构造器中使用 titleBarStyle 选项来配置。 应用 hidden 标题栏样式的结果是隐藏标…

AI智能机器人的语音消息使用方式

如何在没有资金扩大营销的情况下增加收入,这是不是有点像先有蛋还是先有鸡的问题?如果没有足够的收入来源,小型企业很难对新客源扩展营销和传播。有关系统问题欢迎和博主一起交流。 机器人的语音消息是不是给百姓造成了生活上的影响&#xf…

Springcloud1---->openFeign

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

Golang笔记:使用http包实现基础WebServer功能

文章目录 目的监听请求并响应请求解析进行响应静态文件服务总结 目的 WebServer是一种非常常用的功能,Golang的高并发特性在处理此类工作中也有较大的优势,同时借助标准库中的 net/http 包可以非常快速的编写WebServer应用。这篇文章将简单记录下相关内…

第02章 变量与运算符

一 关键字(keyword) 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(或单词) HelloWorld案例中,出现的关键字有 class、public 、 static 、 void 等,这些单词已经被Java定义…

第1章 Nginx简介

基于 Nginx版本 1.14.2 ,Tomcat版本 9.0.0 演示 第1章 Nginx简介 1.1 Nginx发展介绍 Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器。 Nginx 特点是占有内存少,并发处理能力…

基于粒子群算法的微网经济优化调度——附Matalb代码

目录 摘要: 代码主要内容: 研究背景: 微电网模型: 粒子群算法: 运行结果: Matlab代码分享: 摘要: 提出了一种经济与环保相协调的微电网优化调度模型,针对光伏电池…

深度解析接口自动化框架封装项目:封装层级,关联调用,极限改进

目录 前言: 一、接口封装与封装层级 二、接口关联和数据准备 三、接口封装极限改进 四、代码示例 五、总结 前言: 接口自动化是软件测试领域中的一个重要环节,它可以自动化执行接口测试用例,快速发现和定位接口问题&#xf…

MyBatis中的别名机制

在我们使用MyBatis中的select语句时&#xff0c;需要指定resultType的值&#xff0c;即查询对象的类型&#xff0c;该值是对象的完整类名&#xff0c;看起来非常的繁琐&#xff0c;因此MyBatis中有了别名机制。 使用步骤 在mybatis-config.xml文件中添加< typeAliases >…

C语言进阶——字符函数和字符串函数(上)

重点&#xff1a; 重点介绍处理字符和字符串的库函数的使用和注意事项 1、求字符串长度 strlen 2、长度不受限制的字符串函数 strcpy strcat strcmp 1、函数介绍 1.1 strlen 函数原型&#xff1a;size_t strlen (const char *str); 1、字符串以‘\0’作为结束标志&#xff0…

如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总

苹果APP安装包ipa如何安装在手机上&#xff1f;很多人不知道怎么把ipa文件安装到手机上&#xff0c;这里就整理了苹果APP安装到iOS设备上的方式&#xff0c;仅供参考 苹果APP安装包ipa如何安装在手机上&#xff1f;使用过苹果手机的人应该深有感触&#xff0c;那就是苹果APP安…