Seq2Seq 粗浅理解

  • 1、Seq2Seq的理论知识
    • 1.1 简单介绍
    • 1.2 Seq2Seq的结构
      • 1.2.1 Seq2Seq的结构图
        • Encoder阶段(编码阶段)
        • Decoder阶段(编码阶段)
      • 1.2.2 Seq2Seq的不同结构
    • 1.3 优缺点
  • 2、训练Seq2Seq的问题

1、Seq2Seq的理论知识

1.1 简单介绍

目前Seq2Seq模型在机器翻译语音识别文本摘要问答系统等领域取得了巨大的成功。

Seq2Seq其实就是Encoder-Decoder结构的网络,它的输入是一个序列,输出也是一个序列。在Encoder中,将序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成我们想要的序列输出出来。

在经典的实现中,编码器和解码器各由一个循环神经网络(RNN,LSTM,GRU均可)构成,在Seq2Seq中,两个循环神经网络是共同训练的。

1.2 Seq2Seq的结构

1.2.1 Seq2Seq的结构图

Encode意思是将输入序列转化成一个固定长度的向量(就是下图的C)decode意思是将输入的固定长度向量解码成输出序列。其中编码解码的方式可以是RNN,CNN等(一般是用RNN、LSTM之类的)。

Encoder阶段(编码阶段)

Encoder负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码。获取语义向量最简单的方式就是直接将最后一个输入的隐状态作为语义向量C。也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。

Decoder阶段(编码阶段)

decoder则负责根据语义向量生成指定的序列,这个过程也称为解码。最简单的方式是将encoder得到的语义变量作为初始状态输入到decoder的rnn中,得到输出序列。上一时刻的输出会作为当前时刻的输入,而且其中语义向量C只作为初始状态参与运算,后面的运算都与语义向量C无关

decoder处理方式还有另外一种,就是语义向量C参与了序列所有时刻的运算。上一时刻的输出仍然作为当前时刻的输入,但语义向量C会参与所有时刻的运算。

1.2.2 Seq2Seq的不同结构

这部分可以看看我在介绍RNN的一篇博客循环神经网络(RNN)当中的《2.2 RNN要这么多yt干嘛?》

  • 文本摘要任务
    输入的序列是长句子或者段落,输出的序列是摘要短句
  • 图像描述文本生成
    输入的是图像经过视觉网络的特征,输出的序列是图像的描述短句
  • 语音识别
    输入的序列是音频信号,输出的序列是识别出的文本

1.3 优缺点

  • 优点:自然语言处理的时候,经常会遇到序列长度完全不同的问题,不仅在每对输入和输出序列之间,而且在输入序列本身之间。

例如,在构建语言翻译模型时,每对输入和输出序列都使用不同的语言,因此很可能它们的长度不同。显然,这是一个非常大的问题。Seq2Seq就可以实现一个序列信号转化成一个不定长的序列输出(循环神经网络只能将一个序列信号转换为定长输出)

有个问题需要提出:输入序列长度不等怎么解决?
答案是:padding(该方案适用于循环神经网络(RNN,LSTM,GRU)以及Seq2Seq)

  • 缺点
    (1) padding后固定长度的输入序列输入到encoder编码器,一旦完成编码器输入序列的处理,就会遗忘开始的部分。因此,翻译长句子是,效果会不好。
    (2) 压缩损失了信息
    解决方案:注意力机制

2、训练Seq2Seq的问题

在 Decoder 部分,大家可能会有以下几个问题,我做下解答

  1. 训练过程中,如果 Decoder 停不下来怎么办?(即一直不输出句子的终止标志的情况
    首先,训练过程中 Decoder 应该要输出多长的句子,这个是已知的。假设当前时刻已经到了句子长度的最后一个字符了,并且预测的不是终止标志,那也没有关系,就此打住,计算 loss 即可
  2. 测试过程中,如果 Decoder 停不下来怎么办?例如预测得到 “wasd s w \n sdsw \n…(一直输出下去)”
    不会停不下来的,因为测试过程中,Decoder 也会有输入,只不过这个输入是很多个没有意义的占位符。例如很多个 “”。由于 Decoder 有有限长度的输入,所以 Decoder 一定会有有限长度的输出。那么只需要获取第一个终止标志之前的所有字符即可,对于上面的例子,最终的预测结果为 “wasd s w”
  3. Decoder 的输入和输出,即 dec_input 和 dec_output 有什么关系?
    在训练阶段不论当前时刻 Decoder 输出什么字符,下一时刻 Decoder 都按照原来的 “计划” 进行输入(就是不会影响下一个输入)。举个例子,假设 dec_input=“\t wasted”,首先输入 “\t” 之后,Decoder 输出的是 “m” 这个字母,记录下来就行了,并不会影响到下一时刻 Decoder 继续输入 “w” 这个字母。
    在验证或者测试阶段Decoder 每一时刻的输出是会影响到下一时刻的输入,因为在验证或者测试时,网络是看不到结果的,所以它只能循环的进行下去。举个例子,我现在要将英语 “wasted” 翻译为德语 “verschwenden”。那么 Decoder 一开始输入 “\t”,得到一个输出,假如是 “m”,下一时刻 Decoder 会输入 “m”,得到输出,假如是 “a”,之后会将 “a” 作为输入,得到输出… 如此循环往复,直到最终时刻

Seq2Seq 粗浅理解相关推荐

  1. 对矩阵分解的粗浅理解之LU分解

    ** 欢迎大家到Matlab与线性代数专栏中查看相关图文. ** 本图文从行列式计算出发引出了对矩阵LU分解的粗浅理解,希望对正在学习线性代数的同学有所帮助.

  2. UNITY 画布的粗浅理解

    UNITY 画布的粗浅理解 画布:当画布是screen-space overlay时,这个好理解,画布可以控制如分辨率,层次等. 但当画布是 world-space时,这个严格来说就不算是一个画布了, ...

  3. 【成长点滴】对SMART原则的一些粗浅理解

    [成长点滴]对SMART原则的一些粗浅理解 以下解释来自百度百科 "所谓SMART原则,即是: S:(Specific) 目标要清晰.明确,让考核者与被考核者能够准确的理解目标: M:(Me ...

  4. 电信号、模拟型号、图像声音储存原理及傅里叶转换的粗浅理解

    1.电 电是被美国的科学家富兰克林发明的. 古希腊人就发现用毛皮磨擦过的琥珀能吸引一些像绒毛.麦杆等一些轻小的东西,他们把这种现象称作"电". 1-1引力场.静电场.电磁场 引力场 ...

  5. 个人对于SAR的粗浅理解

    个人对于SAR的粗浅理解 有同学问我是做成像的,让我解释一下SAR成像,我思索了一下,决定这样简单回答: 首先SAR的全称为Synthetic Aperture Radar,即合成孔径雷达,本质还是一 ...

  6. Attention的本质:从Encoder-Decoder(Seq2Seq)理解

    目录 1. 前言 2. Encoder-Decoder(Seq2Seq)框架 3. Attention原理 3.1 Soft Attention介绍 4. Attention机制的本质思想 5. 总结 ...

  7. volatile(粗浅理解)

    (一)阅读指导    1.本文站在设计者角色进行思考.    2.知其然,知其所以然.    3.没有完美东西,请遵循应用场景.    请原谅我用大量篇幅来娓娓道来,只为了以上三点!    推荐缓存文 ...

  8. 面向对象概念粗浅理解

    面向对象是什么? 程序设计范型,同时也是一种程序开发的方法. 什么是对象?为何要面向对象? 对象则是数据和动作的结合体. 目前计算机被用于解决越来越复杂的问题,传统设计规范(结构化,模块化)无法支撑需 ...

  9. 对java的粗浅理解

    随着时间的推移,不觉间接触java也有好几个年头了,在这期间接触过很多人,也做过很多项目,也面了很多试,下面是鄙人对java的一些粗浅的认识和感悟吧,也许说的不是很对,只是自己的一些记录吧,希望各位大 ...

最新文章

  1. LoadRunner 参数模拟——快速得到并发用户的进场规则
  2. ios之UISplitViewController
  3. Find和FirstOrDefault()有什么区别?
  4. 全新SQL Server教程
  5. CAD插件学习系列教程(五) 小菜选择易
  6. web端内嵌二维码进行微信登陆
  7. 托业单词表Part2
  8. 用微笑面对一切令你烦恼的人或事,不久之后,你会发现令你微笑的人或事变得越来越多了。
  9. DELL EqualLogic PS存储硬盘故障数据恢复
  10. Excel 美化要点
  11. torch.cat()函数的官方解释,详解以及例子
  12. 微信支付后台接口开发(扫码版)
  13. ds服务器没检测到有响应,设备或资源dns没检测到有响应 网络无法连接
  14. 名家丨 顾险峰:当深度学习遇到3D
  15. 重庆交通大学c语言程序设计考试,2019重庆交通大学C语言程序设计考研复试大纲...
  16. 如何把CAJ文件转换为PDF?
  17. 204B实战应用-LMK04821代码详解(二)
  18. ffmpeg 转换视频格式
  19. thinkcmf搭建教程_ThinkCMF插件教程之写个HelloWorld插件
  20. Matlab 图像分割 (阈值处理)

热门文章

  1. 关于 python 的 IDE
  2. 用python写vip电影进行地址解析
  3. Eclipse解决SVN版本冲突
  4. ios中用AFN做https
  5. 摩拜单车用户行为数据分析报告
  6. 地理空间数据共享资源大汇总
  7. 如何理解GPU中的SIMT(单指令流多线程模型)
  8. ASP.NET Core开发-后台任务利器Hangfire使用
  9. Vscode好用的快捷键:批量文字修改快捷键选中相同内容快捷键
  10. 详解熵、最大熵、联合熵和条件熵、相对熵以及互信息之间的关系