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模型相关推荐

  1. encoder decoder 模型理解

    encoder decoder 模型是比较难理解的,理解这个模型需要清楚lstm 的整个源码细节,坦率的说这个模型我看了近十天,不敢说完全明白. 我把细胞的有丝分裂的图片放在开头,我的直觉细胞的有丝分 ...

  2. encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用

    位来 发自 凹非寺 量子位 报道 | 公众号 QbitAI 4月9日,英伟达x量子位分享了一期nlp线上课程,来自NVIDIA的GPU计算专家.FasterTransformer 2.0开发者之一的薛 ...

  3. encoder decoder模型_3分钟|聊一聊 Decoder 模块

    微信公众号:NLP从入门到放弃 本文大概需要阅读 4.1 分钟 聊一下对 Decoder 的个人总结和理解,我保证里面大部分内容你没在别人那看过,绝对原创. 我先说一个很小的细节点,当时花了点时间才琢 ...

  4. encoder decoder模型_机器学习11 -- 无监督学习之Auto-Encoder

    1 什么是Auto-Encoder 自编码器Auto-Encoder是无监督学习的一种方式,可以用来做降维.特征提取等.它包括两部分 Encoder:对原始样本进行编码 Decoder:对经过编码后的 ...

  5. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation之每日一篇

    真正提出 Seq2Seq 的文章是<Sequence to Sequence Learning with Neural Networks>,但本篇<Learning Phrase R ...

  6. 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 ...

  7. T5-small的encoder,decoder模型结构

    decoder结构 model = model_class.from_pretrained("t5-small")# print(model)#t5 = transformers. ...

  8. WebRTC Audio Encoder/Decoder Factory 的实现

    Audio encoder factory 用于创建完成各种 audio codec 编码的 encoder 对象,audio decoder factory 则用于创建完成各种 audio code ...

  9. Attension Mechanism模型的详细介绍,原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 Attention是一种用于提升基于RNN(LSTM或GRU)的Encoder + Decoder模型的效 ...

  10. PyTorch学习(7)-Seq2Seq与 Attention

    Seq2Seq与 Attention import os import sys import math from collections import Counter import numpy as ...

最新文章

  1. mysql聚合函数不存在的数据_SELECT子句中不存在聚合函数时的GROUP BY行为
  2. 060_JavaScript作用域
  3. 1.5 不同类型的循环网络-深度学习第五课《序列模型》-Stanford吴恩达教授
  4. 计算机光盘工作原理,CD-ROM的工作原理
  5. python一些常用函数_【python】常用的一些内置函数
  6. python 下标 遍历列表_python中的数据结构与算法(1):列表、元组与字符串
  7. python文件批量改名_python文件批量重命名
  8. 02 掌握实现数据导入导出的方法 1214
  9. boostrap中模态框显示在阴影之下
  10. python贴吧数据可视化_Python数据可视化
  11. 为虚幻4安装VS2019
  12. 计算机学院硕导北京工业大学,北京工业大学
  13. CTF warmup
  14. 刨根究底字符编码之一——关键术语解释(上)
  15. 失业一年,学做跨境电商赚了50万,才知道上班是真的耽误赚钱 !
  16. 联想计算机怎么添加打印机,电脑和联想打印机连接不上怎么办啊
  17. 每日五题-202112
  18. GPS坐标系与实际地图坐标系
  19. CentOS 6 忘记密码,修改密码
  20. Hbase的表查询操作

热门文章

  1. 抢红包算法 c++_“抠抠族”的出行利器,斤斤计较的几何C为了节能果然够拼
  2. 佩服,竟然有人把高等数学这么晦涩难懂的科目,讲解得如此通俗易懂
  3. python中group是啥_python中group和groups函数的区别
  4. android als传感器,环境光传感器(ALS)背光控制解决方案
  5. linux filp open,内核模块中filp-open对文件的读写【转】
  6. phalcon 自动加载_Phalcon自动加载(PHP自动加载)
  7. 23种常见设计模式详解
  8. 读名老中医之路笔记(三)
  9. 基岩版服务器开启坐标显示,mc基岩版怎么看坐标 mc基岩版如何看坐标
  10. HTML中svg的作用,html中的svg可以用来干什么