Encoder-Decoder模型
1.Encoder-Decoder模型及RNN的实现
所谓encoder-decoder模型,又叫做编码-解码模型。这是一种应用于seq2seq问题的模型。
那么seq2seq又是什么呢?简单的说,就是根据一个输入序列x,来生成另一个输出序列y。seq2seq有很多的应用,例如翻译,文档摘取,问答系统等等。在翻译中,输入序列是待翻译的文本,输出序列是翻译后的文本;在问答系统中,输入序列是提出的问题,而输出序列是答案。
这里复习下Sequence2Sequence任务到底是什么,所谓的Sequence2Sequence任务主要是泛指一些Sequence到Sequence的映射问题,Sequence在这里可以理解为一个字符串序列,当我们在给定一个字符串序列后,希望得到与之对应的另一个字符串序列(如 翻译后的、如语义上对应的)时,这个任务就可以称为Sequence2Sequence了。
在现在的深度学习领域当中,通常的做法是将输入的源Sequence编码到一个中间的context当中,这个context是一个特定长度的编码(可以理解为一个向量),然后再通过这个context还原成一个输出的目标Sequence。
如果用人的思维来看,就是我们先看到源Sequence,将其读一遍,然后在我们大脑当中就记住了这个源Sequence,并且存在大脑的某一个位置上,形成我们自己的记忆(对应Context),然后我们再经过思考,将这个大脑里的东西转变成输出,然后写下来。
那么我们大脑读入的过程叫做Encoder,即将输入的东西变成我们自己的记忆,放在大脑当中,而这个记忆可以叫做Context,然后我们再根据这个Context,转化成答案写下来,这个写的过程叫做Decoder。其实就是编码-存储-解码的过程。
而对应的,大脑怎么读入(Encoder怎么工作)有一个特定的方式,怎么记忆(Context)有一种特定的形式,怎么转变成答案(Decoder怎么工作)又有一种特定的工作方式。
好了,现在我们大体了解了一个工作的流程Encoder-Decoder后,我们来介绍一个深度学习当中,最经典的Encoder-Decoder实现方式,即用RNN来实现。
在RNN Encoder-Decoder的工作当中,我们用一个RNN去模拟大脑的读入动作,用一个特定长度的特征向量去模拟我们的记忆,然后再用另外一个RNN去模拟大脑思考得到答案的动作,将三者组织起来利用就成了一个可以实现Sequence2Sequence工作的“模拟大脑”了。
而我们剩下的工作也就是如何正确的利用RNN去实现,以及如何正确且合理的组织这三个部分了。
参考:http://blog.csdn.net/mebiuw/article/details/53341404
Encoder-Decoder模型
Encoder-Decoder框架可以看作是一种文本处理领域的研究模式,应用场景异常广泛。下图是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示:
Encoder-Decoder框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对<X,Y>,我们的目标是给定输入句子X,期待通过Encoder-Decoder框架来生成目标句子Y。X和Y可以是同一种语言,也可以是两种不同的语言。而X和Y分别由各自的单词序列构成:
Encoder顾名思义就是对输入句子X进行编码,将输入句子通过非线性变换转化为中间语义表示C:
对于解码器Decoder来说,其任务是根据句子X的中间语义表示C和之前已经生成的历史信息y1,y2….yi-1来生成i时刻要生成的单词yi
每个yi都依次这么产生,那么看起来就是整个系统根据输入句子X生成了目标句子Y。
参考文章:http://blog.csdn.net/malefactor/article/details/51124732
Encoder-Decoder不是一种模型,而是一种框架,一种处理问题的思路,最早应用于机器翻译领域,输入一个序列,输出另外一个序列。机器翻译问题就是将一种语言序列转换成另外一种语言序列,将该技术扩展到其他领域,比如输入序列可以是文字,语音,图像,视频,输出序列可以是文字,图像,可以解决很多别的类型的问题。这一大类问题就是上图中的sequence-to-sequence问题。这里以输入为文本,输出也为文本作为例子进行介绍:
encoder部分是将输入序列表示成一个带有语义的向量,使用最广泛的表示技术是Recurrent Neural Network,RNN是一个基本模型,在训练的时候会遇到gradient explode或者gradient vanishing的问题,导致无法训练,所以在实际中经常使用的是经过改良的LSTM RNN或者GRU RNN对输入序列进行表示,更加复杂一点可以用BiRNN、BiRNN with LSTM、BiRNN with GRU、多层RNN等模型来表示,输入序列最终表示为最后一个word的hidden state vector。
decoder部分是以encoder生成的hidden state vector作为输入“解码”出目标文本序列,本质上是一个语言模型,最常见的是用Recurrent Neural Network Language Model (RNNLM),只要涉及到RNN就会有训练的问题,也就需要用LSTM、GRU和一些高级的model来代替。目标序列的生成和LM做句子生成的过程类似,只是说计算条件概率时需要考虑encoder向量。
这里,每一种模型几乎都可以出一篇paper,尤其是在这个技术刚刚开始应用在各个领域中的时候,大家通过尝试不同的模型组合,得到state-of-the-art结果。
参考文章:
【1】http://www.weixinnu.com/v/00DK3E
【2】http://www.bigdataway.net/node/2850
为了解决seq2seq问题,有人提出了encoder-decoder模型,也就是编码-解码模型。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。
当然了,这个只是大概的思想,具体实现的时候,编码器和解码器都不是固定的,可选的有CNN/RNN/BiRNN/GRU/LSTM等等,你可以自由组合。比如说,你在编码时使用BiRNN,解码时使用RNN,或者在编码时使用RNN,解码时使用LSTM等等。
这边为了方便阐述,选取了编码和解码都是RNN的组合。在RNN中,当前时间的隐藏状态是由上一时间的状态和当前时间输入决定的,也就是
获得了各个时间段的隐藏层以后,再将隐藏层的信息汇总,生成最后的语义向量
一种简单的方法是将最后的隐藏层作为语义向量C,即
解码阶段可以看做编码的逆过程。这个阶段,我们要根据给定的语义向量C和之前已经生成的输出序列y1,y2,…yt−1来预测下一个输出的单词yt,即
Encoder-Decoder模型相关推荐
- encoder decoder 模型理解
encoder decoder 模型是比较难理解的,理解这个模型需要清楚lstm 的整个源码细节,坦率的说这个模型我看了近十天,不敢说完全明白. 我把细胞的有丝分裂的图片放在开头,我的直觉细胞的有丝分 ...
- encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用
位来 发自 凹非寺 量子位 报道 | 公众号 QbitAI 4月9日,英伟达x量子位分享了一期nlp线上课程,来自NVIDIA的GPU计算专家.FasterTransformer 2.0开发者之一的薛 ...
- encoder decoder模型_3分钟|聊一聊 Decoder 模块
微信公众号:NLP从入门到放弃 本文大概需要阅读 4.1 分钟 聊一下对 Decoder 的个人总结和理解,我保证里面大部分内容你没在别人那看过,绝对原创. 我先说一个很小的细节点,当时花了点时间才琢 ...
- encoder decoder模型_机器学习11 -- 无监督学习之Auto-Encoder
1 什么是Auto-Encoder 自编码器Auto-Encoder是无监督学习的一种方式,可以用来做降维.特征提取等.它包括两部分 Encoder:对原始样本进行编码 Decoder:对经过编码后的 ...
- Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation之每日一篇
真正提出 Seq2Seq 的文章是<Sequence to Sequence Learning with Neural Networks>,但本篇<Learning Phrase R ...
- Hybrid LSTM and Encoder–Decoder Architecture for Detection of Image Forgeries论文阅读
Hybrid LSTM and Encoder–Decoder Architecture for Detection of Image Forgeries Code link:https://gith ...
- T5-small的encoder,decoder模型结构
decoder结构 model = model_class.from_pretrained("t5-small")# print(model)#t5 = transformers. ...
- WebRTC Audio Encoder/Decoder Factory 的实现
Audio encoder factory 用于创建完成各种 audio codec 编码的 encoder 对象,audio decoder factory 则用于创建完成各种 audio code ...
- Attension Mechanism模型的详细介绍,原理、分类及应用
模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 Attention是一种用于提升基于RNN(LSTM或GRU)的Encoder + Decoder模型的效 ...
- PyTorch学习(7)-Seq2Seq与 Attention
Seq2Seq与 Attention import os import sys import math from collections import Counter import numpy as ...
最新文章
- mysql聚合函数不存在的数据_SELECT子句中不存在聚合函数时的GROUP BY行为
- 060_JavaScript作用域
- 1.5 不同类型的循环网络-深度学习第五课《序列模型》-Stanford吴恩达教授
- 计算机光盘工作原理,CD-ROM的工作原理
- python一些常用函数_【python】常用的一些内置函数
- python 下标 遍历列表_python中的数据结构与算法(1):列表、元组与字符串
- python文件批量改名_python文件批量重命名
- 02 掌握实现数据导入导出的方法 1214
- boostrap中模态框显示在阴影之下
- python贴吧数据可视化_Python数据可视化
- 为虚幻4安装VS2019
- 计算机学院硕导北京工业大学,北京工业大学
- CTF warmup
- 刨根究底字符编码之一——关键术语解释(上)
- 失业一年,学做跨境电商赚了50万,才知道上班是真的耽误赚钱 !
- 联想计算机怎么添加打印机,电脑和联想打印机连接不上怎么办啊
- 每日五题-202112
- GPS坐标系与实际地图坐标系
- CentOS 6 忘记密码,修改密码
- Hbase的表查询操作
热门文章
- 抢红包算法 c++_“抠抠族”的出行利器,斤斤计较的几何C为了节能果然够拼
- 佩服,竟然有人把高等数学这么晦涩难懂的科目,讲解得如此通俗易懂
- python中group是啥_python中group和groups函数的区别
- android als传感器,环境光传感器(ALS)背光控制解决方案
- linux filp open,内核模块中filp-open对文件的读写【转】
- phalcon 自动加载_Phalcon自动加载(PHP自动加载)
- 23种常见设计模式详解
- 读名老中医之路笔记(三)
- 基岩版服务器开启坐标显示,mc基岩版怎么看坐标 mc基岩版如何看坐标
- HTML中svg的作用,html中的svg可以用来干什么