encoder-decoder模型

2023-05-16

 

元学习论文总结||小样本学习论文总结

2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019


 

先给自己写个标题,等我理解深刻了,再来填充内容。

Encoder-Decoder(编码-解码)是深度学习中非常常见的一个模型框架,比如无监督算法的auto-encoding就是用编码-解码的结构设计并训练的;比如这两年比较热的image caption的应用,就是CNN-RNN的编码-解码框架;再比如神经网络机器翻译NMT模型,往往就是LSTM-LSTM的编码-解码框架。因此,准确的说,Encoder-Decoder并不是一个具体的模型,而是一类框架。Encoder和Decoder部分可以是任意的文字,语音,图像,视频数据,模型可以采用CNN,RNN,BiRNN、LSTM、GRU等等。所以基于Encoder-Decoder,我们可以设计出各种各样的应用算法。

Encoder-Decoder框架有一个最显著的特征就是它是一个End-to-End学习的算法;本文将以文本-文本的例子作为介绍,这样的模型往往用在机器翻译中,比如将法语翻译成英语。这样的模型也被叫做 Sequence to Sequence learning[1]。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。

参考文章:本段出自Bin的专栏blog.csdn.net/xbinworld。

这里复习下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结果。

参考文章:http://www.weixinnu.com/v/00DK3E

所谓encoder-decoder模型,又叫做编码-解码模型。这是一种应用于seq2seq问题的模型。
那么seq2seq又是什么呢?简单的说,就是根据一个输入序列x,来生成另一个输出序列y。seq2seq有很多的应用,例如翻译,文档摘取,问答系统等等。在翻译中,输入序列是待翻译的文本,输出序列是翻译后的文本;在问答系统中,输入序列是提出的问题,而输出序列是答案。
为了解决seq2seq问题,有人提出了encoder-decoder模型,也就是编码-解码模型。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。

 

当然了,这个只是大概的思想,具体实现的时候,编码器和解码器都不是固定的,可选的有CNN/RNN/BiRNN/GRU/LSTM等等,你可以自由组合。比如说,你在编码时使用BiRNN,解码时使用RNN,或者在编码时使用RNN,解码时使用LSTM等等。
这边为了方便阐述,选取了编码和解码都是RNN的组合。在RNN中,当前时间的隐藏状态是由上一时间的状态和当前时间输入决定的,也就是

ht=f(ht−1,xt)

获得了各个时间段的隐藏层以后,再将隐藏层的信息汇总,生成最后的语义向量

C=q(h1,h2,h3,…,hTx)

一种简单的方法是将最后的隐藏层作为语义向量C,即

C=q(h1,h2,h3,…,hTx)=hTx

解码阶段可以看做编码的逆过程。这个阶段,我们要根据给定的语义向量C和之前已经生成的输出序列y1,y2,…yt−1来预测下一个输出的单词yt,即 

yt=argmaxP(yt)=∏t=1Tp(yt|{y1,…,yt−1},C)

也可以写作 

yt=g({y1,…,yt−1},C)

而在RNN中,上式又可以简化成 

yt=g(yt−1,st,C)

其中s是输出RNN中的隐藏层,C代表之前提过的语义向量,yt−1表示上个时间段的输出,反过来作为这个时间段的输入。而g则可以是一个非线性的多层的神经网络,产生词典中各个词语属于yt的概率。

encoder-decoder模型虽然非常经典,但是局限性也非常大。最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中去。但是这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,还有就是先输入的内容携带的信息会被后输入的信息稀释掉,或者说,被覆盖了。输入序列越长,这个现象就越严重。这就使得在解码的时候一开始就没有获得输入序列足够的信息, 那么解码的准确度自然也就要打个折扣了

参考地址:http://blog.csdn.net/u014595019/article/details/52826423

2019年3月16日补充:

比较好的文章:

Encoder-Decoder模型和Attention模型

地址:https://blog.csdn.net/u011734144/article/details/80230633

 


--------------------- 
作者:Microstrong0305 
原文:https://blog.csdn.net/program_developer/article/details/78752680 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

encoder-decoder模型 的相关文章

  • python提示jsondecodeerror是什么意思_json.decoder.JSONDecodeError

    import requests import re import json import csv 定义一个get table 方法来输出抓取的第一页表格内容 def get table params 61 params为url请求中所包含的
  • Access.Image Decoder

    版本 xff1a V0 41 系统要求 xff1a Access 2000及以上版本 软件介绍 xff1a Access中的Image控件将所有图形数据保存在PictureData属性数组中 xff0c 通过修改PictureData xf
  • encoder-decoder模型

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 先
  • ffmpeg 报错Encoder (codec h264) not found for output stream #0:0

    使用ffmpeg 制作流媒体的视频文件 同样的命令在本地的windows环境是正常的 xff0c 在linux 上就不行了 报错了 根据最后一行的提示 xff0c Encoder codec h264 not found for outpu
  • 使用Encoder-Decoder模型自动生成对联的思路

    版权声明 可以任意转载 转载时请标明文章原始出处和作者信息 author 张俊林 在我看到第一篇Encoder Decoder模型的论文的时候 我就觉得用这个来作对联自动生成是再合适不过的了 做诗词应该也是比较适合的 但是相对诗词 用它来做
  • Javascript,encodeURI 无法编码圆括号“(”

    我的 cookie 值包含圆括号 例如 demo 1 当我尝试使用 encodeURI 进行编码时 圆括号 未编码为 28 对圆括号等特殊字符进行编码的替代方法是什么 将 uri 组件编码为符合 RFC 3986 对字符进行编码 您可以使用
  • Android 应用程序中的 JPEG 硬件解码支持

    我的 Android 应用程序需要在 Android 2 2 手机 及更高版本 上解码基于大分辨率的 JPEG 图像 目前我正在使用 BitmapFactory decodeStream API 即 SKIA 库来解码流 1 据我所知 SK
  • Base64编码器和解码器

    Android 中是否有用于字符串的 Base 64 解码器和编码器 这是如何使用的示例Base64类来编码和解码简单的字符串值 String to be encoded with Base64 String text Test Sendi
  • Elm:将包含单个元素的 JSON 数组解码为字符串

    看过类似的东西 但找不到确切的问题 我有一个从服务器端验证返回的 JSON 如下所示 field field name messages message message 我想做的是将其解码为 elm 记录 例如 field String m
  • 在 Swift 4 中实现自定义解码器

    我想使用新的解码 XML 文档DecodableSwift 4 中引入的协议 但是 似乎没有符合该协议的 XML 解码器的现有实现Decoder协议 我的计划是使用 SWXMLHash 库来解析 XML 然后可能使XMLIndexer该库中
  • Jpeg 重新开始标记

    我制作了 jpeg 解码器 但没有实现重启标记逻辑 这就是为什么我的程序无法处理某些图像 例如使用 Photoshop 保存的图像 文件 gt 另存为 gt jpeg 的原因 我想实现重启标记逻辑 但是网上没有详细的解释重启标记逻辑如何工作
  • SpringBoot 2.0.2.RELEASE 中的 BCryptPasswordEncoder 定义

    我有一个基本的 Spring Boot 应用程序 使用 Spring Initializr JPA 嵌入式 Tomcat Thymeleaf 模板引擎 并打包为可执行 JAR 文件 我定义了这个配置文件 Configuration Enab
  • 使用带有 AVR 微控制器的旋转编码器

    我无法让旋转编码器与 AVR 微控制器正常工作 编码器是机械式的ALPS编码器 http no farnell com 1520815 passives product us0 sku alps ec12d1524401 我正在使用亚特米加
  • 在 DirectShow 之外使用 DirectShow 过滤器?

    我目前正在处理 Windows Media Foundation 但是 由于 Microsoft H 264 解码器存在一些问题 并且缺少一些自定义格式的解码器 我想知道是否可以直接使用 CLSID 实例化 DirectShow 解码器 并
  • MPlayer 如何识别 MJPEG 流?

    由于 MJPEG over http 基本上包括传输由定义的分隔符分隔的一系列 JPEG 图像 MPlayer 如何识别它是 MJPEG 流 谢谢 看一下 MplayerMjpegStreamViewing http www lavrsen
  • 如何使用 tf2 为 seq2seq 构建自定义双向编码器?

    class Encoder tf keras Model def init self vocab size embedding dim enc units batch sz super Encoder self init self batc
  • 适用于 Android 的动画 WebP 编码器

    有没有关于如何编码的示例动画WebP对于安卓 或者也许有人成功了并且可以指导我完成它 我有一批 webP 图像 我想用它们创建一个动画图像 有 libwebp 库 但是 它不支持动画 webP 如果我从所读内容中理解正确 我需要使用 web
  • Spark 数据集编码器:kryo() 与 bean()

    在 Spark 中处理数据集时 我们需要指定编码器来序列化和反序列化对象 我们可以选择使用Encoders bean Class
  • 使用快速同步 h264_qsv 编码器时 ffmpeg avcodec_encode_video2 挂起

    当我使用 mpeg4 或 h264 编码器时 我能够使用 ffmpeg 3 1 0 的 API 成功编码图像以生成有效的 AVI 文件 但是 当我使用快速同步编码器 h264 qsv 时 avcodec encode video2 有时会挂
  • 为什么我的自定义 JSONEncoder.default() 忽略布尔值?

    我想将字典转换为带有布尔值的 JSON 字符串True值转换为数字1和布尔值False值转换为数字0 我正在使用一个JSONEncoder子类 但它似乎忽略布尔值 import json class MyEncoder json JSONE

随机推荐

  • GDE103开发环境搭建

    1 KEIL环境 注意 xff1a 目前市面通用的MDK for ARM版本有Keil 4和Keil 5 xff1a 使用Keil 4建议安装4 74及以上 xff1b 使用Keil 5 建议安装5 20以上版本 xff08 注意 xff1
  • 英伟达Jetson TX2基本参数查询

    1 查看Jetson TX2 L4T版本 root 64 TX2 media mydisk chipeak span class token comment head n 1 etc nv tegra release span span c
  • 关于#!/bin/bash

    bin bash是指此脚本使用 bin bash来解释执行 其中 xff0c 是一个特殊的表示符 xff0c 其后 xff0c 跟着解释此脚本的shell路径 bash只是shell的一种 xff0c 还有很多其它shell xff0c 如
  • docker 拉取镜像及查看pull下来的image在哪里

    一 xff1a 拉取镜像 1 国内连接docker官网很慢修改docker中配置 xff0c 添加对应中国docker加速器 vi etc docker daemon json 34 registry mirrors 34 34 https
  • mac终端删除代理有效命令

    mac终端删除代理有效命令 unset http proxy unset https proxy 设置和删除淘宝镜像 xff1a 设置淘宝镜像 npm config set registry https registry npm taoba
  • 智能优化算法——布谷鸟搜索算法原理(附代码)

    目录 基本概念 算法具体流程 算法流程图 测试函数 优化结果 visual studio2017C 43 43 代码 基本概念 布谷鸟搜索算法 xff08 Cuckoo Search xff0c 缩写 CS xff09 是由剑桥大学杨新社教
  • 计蒜客2019蓝桥杯省赛B组模拟赛(一)题目及解析

    蓝桥杯历年真题题目及题解目录汇总 A 结果填空 xff1a 钟表 题库链接 分值 5 一天蒜头君 22 28 45 开始睡觉 xff0c 06 24 26 醒来之后 xff0c 蒜头君在想 xff0c 今天我睡了多久 xff1f 请你告诉蒜
  • 计蒜客2019蓝桥杯省赛A组模拟赛(一)题目及解析

    蓝桥杯历年真题题目及题解目录汇总 A 结果填空 xff1a 阶乘位数 题库链接 分值 5 蒜头君对阶乘产生了兴趣 xff0c 他列出了前 10 个正整数的阶乘以及对应位数的表 xff1a nn 位数111221361424251203672
  • 怎样区分线性和非线性_线性与非线性的区别(线性分析、线性模型)

    一直对线性非线性没有很准确的定义认识 今天特意查了查 特此记录下 怎样区分线性和非线性 1 线性Line xff0c 是指量与量之间按照比例成直线关系 xff0c 在数学上可理解为一阶导数是个常数 xff1b 非线性non line则指不按
  • RuntimeError: Input type and weight type should be the same

    pytorch使用GPU计算报错 xff1a RuntimeError Input type torch FloatTensor and weight type torch cuda FloatTensor should be the sa
  • PyTorch 多进程分布式训练实战

    PyTorch 多进程分布式训练实战 拾荒志 murphypei github io PyTorch 可以通过 torch nn DataParallel 直接切分数据并行在单机多卡上 xff0c 实践证明这个接口并行力度并不尽如人意 xf
  • 移植Android recovery升级(1)介绍

    Android OTA升级大家都有接触过 xff0c 网上也有很多说明文章 xff0c 我这边把Android OTA升级的架构移植到嵌入式设备上 对Android OTA说明文章 xff0c 我感觉比较好的是 xff1a https bl
  • 网络操作系统 第二章 用户和组管理

    习题 1 WIndows SErver 2008中的用户有那些类型 xff1f 系统默认的用户有那些 xff1f 1 xff09 用户账号 xff0c 用户组 2 xff09 管理员组 xff0c 备份操作员组 xff0c 超级用户组 xf
  • 数据增强可视化 transfrom Python中三个图像增强库

    深入浅出Python中三个图像增强库的使用 目录 介绍ImgaugAlbumentationsSOLT结论 介绍 本文中探索三个流行的 Python 图像增强库 图像分类器通常在训练更多的图像时表现得更好 在图像分类模型中 xff0c 一个
  • Mixup和CutMix数据增强

    见论文 xff1a a Unified Analysis of Mixed Sample Data Augmentation A Loss Function Perspective 2208 09913v1 pdf arxiv org
  • Transductive和Inductive的区别

    关于Transductive和Inductive 维基百科上有一段简洁扼要的定义 xff1a Transduction is reasoning from obeserved specific training cases to speci
  • win10用vncviewer远程登陆ubuntu桌面 GNOME

    一 xff1a 安装GNOME桌面 sudo apt install ubuntu desktop gnome panel gnome settings daemon metacity nautilus gnome terminal y 其
  • ros远程桌面使用x11vnc启动rviz办法

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 1
  • LaTeX教程(一)Tex Live 2018的使用教程

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 l
  • encoder-decoder模型

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 先