对seq2seq的一些个人理解

原创 2017年05月10日 11:43:25
  • 496
  • 0
  • 1

因为做毕设用到seq2seq框架,网上关于seq2seq的资料很多,但关于seq2seq的代码则比较少,阅读tensorflow的源码则需要跳来跳去比较麻烦(其实就是博主懒)。踩了很多坑后,形成了一些个人的理解,在这里记录下,如果有人恰好路过,欢迎指出错误~

seq2seq图解如下: 

上图中,C是encoder输出的最终状态,作为decoder的初始状态;W是encoder的最终输出,作为decoder的初始输入。

具体到tensorflow代码中(tensorflow r1.1.0cpu版本),查阅tf.contrib.rnn.BasicLSTMCell的源码如下:

class BasicLSTMCell(RNNCell):def __init__(self, num_units, forget_bias=1.0,input_size=None, state_is_tuple=True, activation=tanh,reuse=None):super(BasicLSTMCell, self).__init__(_reuse=reuse)if not state_is_tuple:logging.warn("%s: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.", self)if input_size is not None:logging.warn("%s: The input_size parameter is deprecated.", self)self._num_units = num_unitsself._forget_bias = forget_biasself._state_is_tuple = state_is_tupleself._activation = activation@propertydef state_size(self):return (LSTMStateTuple(self._num_units, self._num_units) if self._state_is_tuple else 2 * self._num_units)@propertydef output_size(self):return self._num_unitsdef call(self, inputs, state):"""Long short-term memory cell (LSTM)."""# Parameters of gates are concatenated into one multiply for efficiency.if self._state_is_tuple:c, h = stateelse:c, h = array_ops.split(value=state, num_or_size_splits=2, axis=1)concat = _linear([inputs, h], 4 * self._num_units, True)# i = input_gate, j = new_input, f = forget_gate, o = output_gatei, j, f, o = array_ops.split(value=concat, num_or_size_splits=4, axis=1)new_c = (c * sigmoid(f + self._forget_bias) + sigmoid(i) * self._activation(j))new_h = self._activation(new_c) * sigmoid(o)if self._state_is_tuple:new_state = LSTMStateTuple(new_c, new_h)else:new_state = array_ops.concat([new_c, new_h], 1)return new_h, new_state
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

令调用LSTM的命令为:

output,state = tf.contrib.rnn.BasicLSTMCell(input,init_state)
  • 1

可知,state其实是包含了output在内的。state[0]才是真正的state,即图中的C;state[1]是output,即图中的W。这样一来,最后输出的output其实就显得鸡肋了。(如果要在encode和decode之间搞事情的话,这点就比较重要了。博主就是踩了这个坑。。。当然如果不在这里搞事情的话就可以完美绕过这个坑)

知道这点后,那么接下来的就好理解多了。博主之前曾有过一段时间的疑惑,那就是seq2seq的decode_input到底是什么?如果跟target只是移了一个位,其他完全不变的话,那要encoder干什么?知道了上面的背景后,我们不难知道,教程中decode_input跟target的移位只是加速训练过程。而在具体应用中,decode_input可以是encode的最后一个输出,也可以自己设定一个全零的数组。个人觉得设定全零的数组比较好,因为初始状态就已经包含了encode的最后一个输出了,而且全零数组可以当作是一个开始的标识(至于seq2seq具体的训练过程可视化,可以阅读2017年ACL的一篇文章Visualizing and Understanding Neural Machine Translation http://nlp.csai.tsinghua.edu.cn/~ly/papers/acl2017_dyz.pdf)

最后,还说几点比较零散的: 
1、对于短句(<30词),可以不进行输入翻转,模型收敛地稍微慢一点而已;对于长句则最好进行翻转 
2、多阅读教程,多实践。上手操作永远是学习的最佳途径

对seq2seq的一些个人理解相关推荐

  1. seq2seq模型_直观理解并使用Tensorflow实现Seq2Seq模型的注意机制

    采用带注意机制的序列序列结构进行英印地语神经机器翻译 Seq2seq模型构成了机器翻译.图像和视频字幕.文本摘要.聊天机器人以及任何你可能想到的包括从一个数据序列到另一个数据序列转换的任务的基础.如果 ...

  2. seq2seq模型_彻底理解 Seq2Seq 模型

    Seq2Seq 是一种循环神经网络的变种,包括编码器 (Encoder) 和解码器 (Decoder) 两部分.Seq2Seq 是自然语言处理中的一种重要模型,可以用于机器翻译.对话系统.自动文摘. ...

  3. 万能的Seq2Seq:基于Seq2Seq的阅读理解问答

    作者丨苏剑林 单位丨追一科技 研究方向丨NLP,神经网络 个人主页丨kexue.fm 今天给 bert4keras [1] 新增加了一个例子:阅读理解式问答(task_reading_comprehe ...

  4. 通俗理解注意力机制中的Q、K和V表示的具体含义

    https://www.jianshu.com/p/7a61533fd73b 通俗理解讲解一 以翻译为例 source:我 是 中国人 target: I am Chinese 比如翻译目标单词为 I ...

  5. [转] 图解Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention

    from : https://caicai.science/2018/10/06/attention%E6%80%BB%E8%A7%88/ 一.Seq2Seq 模型 1. 简介 Sequence-to ...

  6. 从Encoder到Decoder实现Seq2Seq模型

    首发于机器不学习 关注专栏 写文章 从Encoder到Decoder实现Seq2Seq模型 天雨粟 模型师傅 / 果粉 ​ 关注他 300 人赞同了该文章 更新:感谢@Gang He指出的代码错误.g ...

  7. 【Seq2Seq】相关理论基础与RNN的相应变体

    文章目录 1. 发展历程 2. 基础理解 2.1 基础的神经网络 2.2 RNN网络的相应变体 2.2.1 RNN变体 N V 1 2.2.2 RNN变体 (1VN)Decode的变体 2.2.3 R ...

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

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

  9. 深入理解注意力机制(Attention Mechanism)和Seq2Seq

    学习本部分默认大家对RNN神经网络已经深入理解了,这是基础,同时理解什么是时间序列,尤其RNN的常用展开形式进行画图,这个必须理解了. 这篇文章整理有关注意力机制(Attention Mechanis ...

最新文章

  1. 逆变器的技术创新 让光伏电站更具发展前景
  2. 什么才是真正的程序员?
  3. 【 c#】实现form窗口中,通过按钮实现tabPage的切换
  4. 【机器学习】6大监督学习模型:毒蘑菇分类
  5. sql unicode转中文_SELECT语句《SQL必知必会》
  6. freemarker-模板
  7. 在网页中嵌入任意字体的解决方案 (insert any font)
  8. 【今日CV 计算机视觉论文速览 第136期】Wed, 26 Jun 2019
  9. VIM - 01. 标准模式 - 下简单操作
  10. 计算机系统的工作方式,计算机的操作系统与工作方式
  11. [树上倍增][最小生成树]JZOJ P4313——电话线铺设
  12. 基于python的图书管理系统设计与实现论文_图书馆管理系统的设计与实现毕业论文...
  13. 基于STM32的智能鱼缸设计
  14. Oracle集成基础安装包+补丁包
  15. 海康硬盘录像机管理员密码初始化方法
  16. excel两个字符串相减_excel两列相减
  17. 为BIG网站建立历史记录页面
  18. 基于MK802的应用开发和相关的工具
  19. 解决Access数据库突然变得很大的方法
  20. 解决:-bash redis-server 未找到命令

热门文章

  1. 用邮箱实现多事件的单向同步
  2. 计算机辅助英语训练,一种计算机辅助外语阅读训练系统及其方法
  3. Linux可执行文件如何装载进虚拟内存
  4. C++重载下标操作符[](二)
  5. Leetcode 42.接雨水 (每日一题 20210629)
  6. FCN全连接卷积网络(4)--Fully Convolutional Networks for Semantic Segmentation阅读(引言部分)
  7. 推荐系统笔记:使用分类模型进行协同过滤
  8. Python爬虫应用实战-爬取股票数据做分析
  9. 深度学习核心技术精讲100篇(二十五)-58同城是如何构建智能化流量分发的?
  10. 算法岗一片红海,如何选择适合自己的方向?