Encoder-Decoder (based on RNNS / LSTM)用于序列学习方案

2023-12-02 11:32

本文主要是介绍Encoder-Decoder (based on RNNS / LSTM)用于序列学习方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.RNN Encoder-Decoder

      所谓的Sequence2Sequence主要是泛指一些Sequence到Sequence的映射问题,Sequence在这里可以理解为一个字符串序列 / 图像序列(视频),当我们在给定一个字符串序列后,希望得到与之对应的字符串序列(如 翻译、如语义对应的)时,这个任务就可以称为Sequence2Sequence了。 

      在现在的深度学习领域当中,通常的做法是将输入的源Sequence编码到一个中间的context当中,这个context是一个特定长度的编码(可以理解为一个向量),然后再通过这个context还原成一个输出的目标Sequence。如果用人的思维来看,就是我们先看到源Sequence,将其读一遍,然后在我们大脑当中就记住了这个源Sequence,并且存在大脑的某一个位置上,形成我们自己的记忆(对应Context),然后我们再经过思考,将这个大脑里的东西转变成输出,然后写下来。那么我们大脑读入的过程叫做Encoder,即将输入的东西变成我们自己的记忆,放在大脑当中,而这个记忆可以叫做Context,然后我们再根据这个Context,转化成答案写下来,这个写的过程叫做Decoder。其实就是编码-存储-解码的过程。 

     目前来看,最经典的Encoder-Decoder网络还是基于RNNs实现的。



在RNN Encoder-Decoder的工作当中,我们用一个RNN去模拟大脑的读入动作,用一个特定长度的特征向量去模拟我们的记忆,然后再用另外一个RNN去模拟大脑思考得到答案的动作,将三者组织起来利用就成了一个可以实现Sequence2Sequence工作的“模拟大脑”了。

2.RNNs

      循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用。RNNs通常用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。这种神经网络结构在很多领域取得了不俗的成绩,但是由于其网络结构的问题,使得其在面对序列问题或者和时间密切相关的问题时,表现不佳。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网络,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理(不是变长度的时间序列处理)。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。 在RNN中神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!表示成图就是这样的: 


      在这个典型的RNN示意图当中,RNN包含一个输入层Input Layer,一个隐含层Hidden Layer,一个输出层Output Layer。其中非常值得注意的是,在Hidden Layer部分,Hidden Layer不仅连接了Input Layer Output Layer,而且也同时连接了自己本身,所以这也是称作循环神经网络的原因所在。或许上面那张图有点不太容易懂,那么如果我们将它展开看一下,或许你就会对此有一个更加清楚的理解了:


      可以看到的是,对于每一个时刻输入的数据xt,rnn的隐含层的Cell都会重复使用同一个参数W b 进行计算,并且得到当前的隐含层状态St和一个输出Ot,而这个Ot是之前所有输入(x0~xt-1)的共同作用结果,这也就解决了那些当前的输出,要求考虑到之前n个元素的问题,rnn在某一个时刻的输入,是之前所有输入的共同结果。而RNN之所以是深度学习中常用的一种网络结构,其深度之处就在于其网络时间的长度(也就是网络的深度,这里说明了一个关键点,可以利用网络学习一个时间正则化函数,且该函数是自适应的、隐式的)。


然而,RNNs虽然看起来在处理时间t的内容时,会综合考虑到之前所有时刻的内容, 但是实际情况是,随时t的增大(即输入的序列很长的时候),其会面临长期依赖(Long-Term Dependencies)问题,即最开始输入到RNN的内容对当前Ot的影响会越来越小 (时间比重下降效应),究其原因是一开始 输入RNN的内容,随着t的推进其在不停的循环传播,造成了信息的丢失

3.RNN面临的“失忆”问题

形象来说,这种丢失,就像我们人的大脑一样,短一点的句子我们看一眼还记得住,要是长一点,我们看着看着,之前看过的就忘了,只记得附近看过的几个?为了解决这个问题, 发展了诸如GRU和LSTM在内的机制,用于解决这个记忆问题。简单说,GRU和LSTM并不算是一个完全独立的结构,其看起来和上图的RNN很像(其实也都是认为对RNN Cell的一种改进), GRU和LSTM主要是通过加强原RNN当中隐含层的Unit,增加了多个“门”,实现对内容的记忆、遗忘,一定程度改善了RNN的长句记忆问题。我们这里主要讨论LSTM。
      LSTM(Long Short Term Memory),是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用 。LSTM通过记住一些长期的记忆,来改善长期依赖的问题
      首先需要再次强调的是,LSTM可以看做是RNN的一种改进版,主要是替换了其Hidden Unit的Cell,但是其依然有每一个隐含层输出的状态ht,结果的输出也是基于ht,使用方式并没有任何改变,而改变之处在于其在循环时,如何使用之前的ht-1和当前输入的xt去生成ht,下面这两张图片的对比就可以很好的说明这个问题了: 

          

标准RNN                                                        LSTM


LSTM Cell结构标识在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置

      可以看到,无论是原始的RNN还是LSTM,其基本的网络结构都是一样的,都是一个循环的网络结构,而不同在于标准RNN的在处理一个元素时其Cell的结构很简单,即将上一个时间的隐含层状态h(这里是h,上面的图是s,这里的h不是上面图的o,注意区分),同当前输入的x,使用tanh函数计算得到当前时间状态的h。而在LSTM当中就复杂了许多,可以看到其由各种五花八门的“门”构成,想了解更多细节可以参考我的另外一篇博客:LSTM。

      首先,LSTM的核心在于如何维护每一个Cell的状态(记忆),首先这里在每一个Cell当中,我们用Ct来标识当前的一个细胞状态,你可以理解为Cell的状态是LSTM单元实现记忆的核心因素。在每一个LSTM Cell中,其基本的处理流程如下图,从Ct-1输入上一个状态,途径了两个操作:第一个是“忘记门:忘记一部分之前的知识”第二个是“更新门:记住当前时间输入的内容”


忘记门  forget gate

      通俗解释就是,因为一个Cell的记忆内容是有限的,所以在记住新的内容(Xt)之前,势必需要忘记一部分内容,才能记住新的内容。那么在LSTM中,使用上一个LSTM里原RNN部分的隐藏层状态ht,和当前的输入xt,结合sigmod函数输出一个0~1的值,确定需要忘记的幅度ft(所以你看第一个操作就是 Ct-1 * ft)。
      确定了如何忘记后,就来看下如何将新的内容xt添加到Cell记忆中 


      在这里,我们同样是用ht-1和xt以及sigmod tanh函数去计算,这里包含两个部分。1. sigmoid 层称 “输入门层” 决定什么值我们将要更新。2. tanh 层, 创建一个新的候选值向量。 随后,我们确定好了需要更新的内容后,就可以添加到记忆当中(同部分忘记后的记忆内容相加),然后就可以得到新的记忆Ct。


好了,当我们得到细胞状态后,我们也可以相应的计算出当前隐藏层的状态ht了:


4.总结

      Encoder-Decoder模型中,Encoder部分负责依次读入输入序列的每个单位,将其编码成一个模型的中间表示(一般为一个向量),在这里我们将其称为上下文向量c,Decoder部分负责在给定上下文向量c的情况下预测出输出序列。 并且在在自然语言处理应用中,Encoder和Decoder部分通常选择了RNN(LSTM)实现

      为什么我们要选择以RNN为基础的结构去实现Encoder-Decoder呢?:首先,RNN可以方便地处理可变长序列的数据。其次,由于RNN中的隐层状态随着按时序读取的输入单元而不断发生变化,因此它具有对序列顺序的建模的能力,体现在自然语言处理任务中,即为对词序的建模能力。而词序也恰恰是自然语言处理任务中需要建模的重点。最后,RNN可以作为一个语言模型来预测出给定前文的基础上下一个字符出现的概率,这个特性使得其可以应用在各种文本生成任务中预测出语法正确的输出序列,从而实现Decoder的功能。

引用:https://blog.csdn.net/mebiuw/article/details/53341404

这篇关于Encoder-Decoder (based on RNNS / LSTM)用于序列学习方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445191

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘