长短期记忆网络(LSTM)

一. 什么是LSTM

Long Short Term Memory(LSTM,长短期记忆)是一种特殊的递归神经网络。这种网络与一般的前馈神经网络不同,LSTM可以利用时间序列对输入进行分析。
简而言之,当使用前馈神经网络时,神经网络会认为我们t时刻输入的内容与t+1时刻输入的内容完全无关,对于许多情况,例如图片分类识别这是毫无问题的,可对于一些情景,如自然语言处理(NLP)或者需要分析类似于连拍照片这样的数据时,合理运用t或之前的输入来处理t+n时刻,显然可以更加合理地运用输入的信息。

1.1 Recurrent Neural Networks(RNN)

为了运用到时间维度上的信息,人们设计了递归神经网络(RNN,Recurssion Neural Network),RNN是包含循环的网络,允许信息持久化。一个简单的递归神经网络可以用这种方式表示:
在这里插入图片描述
在图中,xt是在t时刻的输入信息,ht是在t时刻的输入信息,我们可以看到神经网络模块A会递归地调用自身并将t-1时刻的信息传递给t时刻。循环可以使得信息可以从当前步传递到下一步。

RNN可以被看做是一个神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:
在这里插入图片描述
链式的特征揭示了RNN本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。
并且RNN也已经被人们应用了。在过去几年中,RNN在语音识别、语言建模、翻译、图片描述等问题上已经取得一定成功,并且这个列表还在增长。

一些更丰富有趣的RNN成功应用:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

1.2 长期依赖(Long-Term Dependencies)问题

递归神经网络在许多情况下运行良好,特别是在对短时间序列数据的分析时十分方便。
但上图所示的递归神经网络存在长期依赖问题:递归神经网络只能处理我们需要较接近的上下文的情况,这是这种网络结构本身的问题。

有时候我们仅需知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测“the clouds are in the sky”最后的词,我们并不需要任何其他的上下文,因此下一个词很显然就应该是sky。在这样的场景中,相关的信息和预测的词位置之间的间隔非常小,RNN可以学会使用先前的信息。
在这里插入图片描述
但是同样会有一些更加复杂的场景,假设我们试着去预测“I grew up in France… I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,需要先提前到的离当前位置很远的France的上下文。这说明相关信息和当前预测位置之间的间隔就肯定变得相当大。
不幸的是,在这个间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力。
在这里插入图片描述
理论上,RNN绝对可以处理这样的长期依赖问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。

此外,这种简单的RNN还很容易出现两种两种在神经网络中臭名昭著的问题:梯度消失问题和梯度爆炸问题。

二. 为什么需要LSTM

LSTM从设计之处就被用于解决一般递归神经网络中普遍存在的长期依赖问题,使用LSTM可以有效传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。与此同时,LSTM还可以解决RNN的梯度消失/爆炸问题。

三.LSTM的直觉解释

LSTM的设计借鉴了人类对于自然语言处理的直觉性经验。

  1. 在一个时间序列中,不是所有信息都是同等有效的,大多数情况存在“关键词”或者“关键帧”;
  2. 我们会在从头到尾的阅读的时候“自动”概括已阅读部分的内容并且用之前的内容帮助理解后文。

基于以上这两点,LSTM的设计者提出了“长短期记忆”的概念:只有一部分的信息需要长期记忆,而有的信息可以不记下来。同时,我们还需要一套机制可以动态处理神经网络的“记忆”,因为有的信息可能一开始价值很高,后面价值逐渐衰减,这时候我们也需要让神经网络学会“遗忘”特定的信息。

四. LSTM网络

Long Short Term网络,一般叫做LSTM,是一种RNN特殊的类型,可以学习长期依赖信息。LSTM由Hochreiter & Schmidhuber (1997)提出,并被Alex Graves进行了改良和推广。在很多问题,LSTM都取得巨大的成功,并得到了广泛的使用。

LSTM通过刻意的设计来避免长期依赖问题,记住长期的信息在实践中是LSTM的默认行为,而非需要付出很大代价才能获得的能力。
所有RNN都具有一种重复神经网络模块的链式的形式。在标准的RNN中,这个重复的模块只有一个非常简单的结构,例如一个tanh层。
在这里插入图片描述

A在t-1时刻的输出值ht-1被复制到了t时刻,与t时刻的输入xt整合后经过一个带权重和偏置的tanh函数后形成输出,并继续将数据复制到t+1时刻。

LSTM同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
在这里插入图片描述
其中图中使用的各种元素图标解释如下图所示:
在这里插入图片描述
在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表pointwise的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

pointwise操作(对位操作):
如果我要对向量<1, 2, 3> 和 <1, 3, 5>进行逐分量的相乘操作,会获得结果 <1, 6, 15>
layer函数层:一个函数层拥有两个属性,权重向量(weight)和偏置向量(bias),对于输入向量A的每一个分量i,函数层会对其进行以下操作(假设激活函数为F(x)):Outputi=F(Wi·Ai+bi),常见的激活函数(也就是套在最外面的F(x))有ReLU(线性修正单元),sigmoid(写作σ)和tanh。

4.1 LSTM的核心思想

LSTM的关键就是细胞状态,水平线在图上方贯穿运行。
细胞状态类似于传送带,直接在整个链上运行,只有一些少量的线性交互,信息在上面流传保持不变会很容易。
在这里插入图片描述
LSTM有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个sigmoid神经网络层和一个pointwise乘法操作。
在这里插入图片描述
sigmoid层输出0-1之间的数值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1就指“允许任意量通过”。

LSTM有三个门,来保护和控制细胞状态。

4.2 逐步理解LSTM

在LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个通过一个称为忘记门层完成。该门会读取ht-1和xt,输出一个在0-1之间的数字给每个在细胞状态Ct-1中的数字。1表示“完全保留”,0表示“完全舍弃”。

让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
在这里插入图片描述
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid层称“输入门层”,决定什么值我们将要更新。然后,一个tanh层创建一个新的候选值向量^Ct,会被加到状态中,下一步,我们会讲这两个信息来产生对状态的更新。
在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。
在这里插入图片描述
现在是更新旧细胞状态的时间了,Ct-1更新为Ct。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。

我们把旧状态与ft相乘,丢弃掉我们需要确定丢弃的信息,接着加上it*^Ct,这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。
在这里插入图片描述
最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。
首先,我们运行一个sigmoid层来决定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,因为他就看到了一个代词,可能需要输出与一个动词相关的信息。例如,可能输出是否代词是单数还是复数,这样如果是动词的话,我们也知道动词需要进行的词形变化。
在这里插入图片描述

五. LSTM的变体

前面介绍的LSTM是最基本的LSTM,但不是所有的LSTM都长成一个样子。实际上,几乎所有包含LSTM的论文都采用了微小的变体。差异非常小,但也值得拿出来讲一下。
其中一个流行的LSTM变体,就是由Gers & Schmidhuber (2000) 提出的,增加了“peephole connection”,就是说,我们让门层也会接受细胞状态的输入。
在这里插入图片描述
上图的图例中,我们增加了peephole到每个门上,但是许多论文会加入部分的peephole而非所有都加。

另一个变体是通过使用coupled忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些已经忘记旧的信息的那些状态。
在这里插入图片描述
另一个改动较大的变体是Gated Recurrent Unit(GRU),这是由Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的LSTM模型要简单,也是非常流行的变体。
在这里插入图片描述

这里只是部分流行的LSTM变体,当然还有很多其他的,如Yao, et al. (2015) 提出的 Depth Gated RNN。还有用一些完全不同的观点来解决长期依赖的问题,如Koutnik, et al. (2014) 提出的 Clockwork RNN。

要问哪个变体是最好的?其中的差异性真的重要吗?Greff, et al. (2015) 给出了流行变体的比较,结论是他们基本上是一样的。Jozefowicz, et al. (2015) 则在超过 1 万种 RNN 架构上进行了测试,发现一些架构在某些任务上也取得了比 LSTM 更好的结果。

参考文章:
https://zhuanlan.zhihu.com/p/123857569
https://www.cnblogs.com/wangduo/p/6773601.html

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

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

相关文章

Linux 中如何安全地抹去磁盘数据?

哈喽大家好&#xff0c;我是咸鱼 离过职的小伙伴都知道&#xff0c;离职的时候需要上交公司电脑&#xff0c;但是电脑里面有许多我们的个人信息&#xff08;聊天记录、浏览记录等等&#xff09; 所以我们就需要先把这些信息都删除&#xff0c;确保无法恢复之后才上交 即有些…

MongoDB 索引和常用命令

一、基本常用命令 1.1 案例需求 存放文章评论的数据存放到 MongoDB 中&#xff0c;数据结构参考如下&#xff0c;其中数据库为 articledb&#xff0c; 专栏文章评论 comment 字段名称 字段含义 字段类型 备注 _id ID ObjectId或String Mongo的主键的字段 articlei…

怎么团队合作,协作开发

一、代码托管平台 我是在大一下的一个竞赛中接触到的代码托管平台 那个时候我也算是什么都不会的&#xff0c;不过不得不说这个确实比较重要&#xff0c;对我造成了一些冲击 在我看来&#xff0c;代码托管平台的作用就是在一个中转站&#xff08;仓库&#xff09;上存储我们写…

自己在家给电脑重装系统Win10教程

自己在家怎么给电脑重装系统Win10&#xff1f;Win10电脑系统如果操作时间特别长了&#xff0c;就可能出现卡顿、蓝屏等系统问题&#xff0c;这时候用户就想给电脑重装系统&#xff0c;却不知道重装具体的操作步骤&#xff0c;下面小编给大家详细介绍自己在家给电脑重装Win10系统…

k8s-13 存储之secret

Secret 对象类型用来保存敏感信息&#xff0c;例如密码、OAuth 令牌和 ssh key。 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活 。 Pod 可以用两种方式使用 secret:作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里 当 kubelet 为 pod 拉…

github 中关于Pyqt 的module view 操作练习

代码摘自&#xff0c;Pyside6 中的示例代码部分 # -*- coding: utf-8 -*- import sys from PySide6.QtWidgets import * from PySide6.QtGui import * from PySide6.QtCore import * from PySide6.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery import os os.chdir(os…

专业144,总分440+,上岸西北工业大学827西工大信号与系统考研经验分享

我的初试备考从4月末&#xff0c;持续到初试前&#xff0c;这中间没有中断。 总的时间分配上&#xff0c;是数学>专业课>英语>政治&#xff0c;虽然大家可支配时间和基础千差万别&#xff0c;但是这么分配是没错的。 数学 时间安排&#xff1a;3月-7月&#xff1a;…

人声分离软件:iZotope RX 10 (WinMac) 中文汉化版

iZotope RX 10是一款在音频修复和增强领域中非常出色的软件。它提供了一套全面的音频问题解决方案&#xff0c;为后期制作专业人员、音频工程师和视频编辑者解决各种棘手问题。 iZotope RX 10的主要特点包括&#xff1a; 声音修复功能&#xff1a;可以去除不良噪音、杂音、吱吱…

使用Python,Xpath获取所有的漫画章节路径,并下载漫画图片生成单个/多个pdf,并进行pdf合并

使用Python&#xff0c;Xpath获取所有的漫画章节路径&#xff0c;并下载漫画图片生成单个/多个pdf&#xff0c;并进行pdf合并 1 效果图2 原理2.1 pa_mh.py获取喜欢的漫画及所有章节2.2 pyImg2pdf.py根据图片生成单个/多个pdf并增加章节提示 3 源码3.1 pa_mh.py获取喜欢的漫画及…

python的pyecharts第三方模块绘制高端统计图表

pyecharts库 python的pyecharts库是一个用于生成 Echarts 图表的python第三方类库&#xff0c;可以绘制很高端的统计图表以便展示数据。 安装方法 pip安装 pip install pyecharts或者github拉取下载安装 git clone https://github.com/pyecharts/pyecharts.git cd pyechar…

业务安全五重价值:防攻击、保稳定、助增收、促合规、提升满意度

目录 防范各类威胁攻击 保障业务的连续性和稳定性 保障业务的合规性 提升企业营收和发展 提升企业满意度和品牌知名度 2023年暑假被“票贩子”和“黄牛”攻陷。他们利用各种手段抢先预约名额&#xff0c;然后加价出售给游客&#xff0c;导致了门票供不应求的局面&#xff…

win11的右键菜单改成win10的样子

在终端复制一下命令 reg add “HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32” /f /ve 回车&#xff0c;会显示成功 再重启资源管理器。这步必须执行&#xff0c;否则是成功的&#xff0c;或者可能重启电脑会成功&#xff0c;但是我没有…

Apache Tomcat下载安装配置使用超详细

下载安装 tomcat官网 在此我们以Tomcat 9.0.81为例&#xff0c;点击下载压缩包&#xff0c;解压到自己的文件夹。 tar.gz是linux操作系统下的安装版本。zip是windows系统下的压缩版本。Windows Service Installer是windows操作系统下的exe安装版本。 检查是否配置JDK 1.…

ARM架构的基本知识

ARM两种授权 体系结构授权, 一种硬件规范, 用来约定指令集, 芯片内部体系结构(内存管理, 高速缓存管理), 只约定每一条指令的格式, 行为规范, 参数, 客户根据这个规范自行设计与之兼容的处理器处理IP授权, ARM公司根据某个版本的体系结构设计处理器, 再把处理器设计方案授权给…

【广州华锐互动】塔吊多人安拆VR互动培训系统

塔吊多人安拆VR互动培训系统由广州华锐互动制作&#xff0c;是一种基于VR技术的模拟实训系统&#xff0c;专门用于培训塔吊驾驶员和操作员。 在现实生活中&#xff0c;塔吊操作具有一定的危险性&#xff0c;尤其是在培训过程中容易发生意外。而使用VR互动实训系统&#xff0c;学…

项目平台——测试报表的实现(六)

这里写目录标题 一、页面成果图展示二、代码逻辑1、接口封装2、发送接口请求 三、样式设计1、element-plus中表格组件的使用 四、总体代码五、问题解决六、项目首页【执行记录】设计1、导入子组件2、注册子组件3、使用子组件 一、页面成果图展示 二、代码逻辑 1、接口封装 ap…

【C++初阶(二)缺省参数与函数重载】

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

SpringMVC的拦截器(Interceptor)

拦截器简介 SpringMVC的拦截器Interceptor&#xff0c;主要是对Controller资源访问时进行拦截的基本操作的技术&#xff0c;当然拦截后可以进行权限控制&#xff0c;功能增强等都是可以的。拦截器类似于JavaWeb开发中的Filter&#xff0c;他们之间的区别如下图所示 Filter技术…

当GDB遇到STL

STL是标准模板库&#xff08;Standard Template Library&#xff09;的简称&#xff0c;是C的三大件之一。 ‍‍ Alex是STL的核心设计者。他于1950年出生在莫斯科&#xff0c;后来到美国发展&#xff0c;曾经在Adobe、A9.com等公司工作。在Adobe工作时&#xff0c;他和保罗•麦…

参数解析(牛客)

目录 一、题目 二、代码 一、题目 二、代码 #include <iostream> #include <vector> using namespace std;int main() {string s;getline(cin, s);int i 0;vector<string>ret;while (i < s.size()){if (s[i] )//遇到空格直接跳过{i;}else if (s[i] …