深度学习的seq2seq模型

原创 2017年09月07日 16:21:22

从rnn结构说起

根据输出和输入序列不同数量rnn可以有多种不同的结构,不同结构自然就有不同的引用场合。如下图,

  • one to one 结构,仅仅只是简单的给一个输入得到一个输出,此处并未体现序列的特征,例如图像分类场景。
  • one to many 结构,给一个输入得到一系列输出,这种结构可用于生产图片描述的场景。
  • many to one 结构,给一系列输入得到一个输出,这种结构可用于文本情感分析,对一些列的文本输入进行分类,看是消极还是积极情感。
  • many to many 结构,给一些列输入得到一系列输出,这种结构可用于翻译或聊天对话场景,对输入的文本转换成另外一些列文本。
  • 同步 many to many 结构,它是经典的rnn结构,前一输入的状态会带到下一个状态中,而且每个输入都会对应一个输出,我们最熟悉的就是用于字符预测了,同样也可以用于视频分类,对视频的帧打标签。

这里写图片描述

seq2seq

在 many to many 的两种模型中,上图可以看到第四和第五种是有差异的,经典的rnn结构的输入和输出序列必须要是等长,它的应用场景也比较有限。而第四种它可以是输入和输出序列不等长,这种模型便是seq2seq模型,即Sequence to Sequence。它实现了从一个序列到另外一个序列的转换,比如google曾用seq2seq模型加attention模型来实现了翻译功能,类似的还可以实现聊天机器人对话模型。经典的rnn模型固定了输入序列和输出序列的大小,而seq2seq模型则突破了该限制。

这里写图片描述

这里写图片描述

其实对于seq2seq的decoder,它在训练阶段和预测阶段对rnn的输出的处理可能是不一样的,比如在训练阶段可能对rnn的输出不处理,直接用target的序列作为下时刻的输入,如上图一。而预测阶段会将rnn的输出当成是下一时刻的输入,因为此时已经没有target序列可以作为输入了,如上图二。

encoder-decoder结构

seq2seq属于encoder-decoder结构的一种,这里看看常见的encoder-decoder结构,基本思想就是利用两个RNN,一个RNN作为encoder,另一个RNN作为decoder。encoder负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码,如下图,获取语义向量最简单的方式就是直接将最后一个输入的隐状态作为语义向量C。也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。

这里写图片描述

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

这里写图片描述

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

这里写图片描述

encoder-decoder模型对输入和输出序列的长度没有要求,应用场景也更加广泛。

如何训练

前面有介绍了encoder-decoder模型的简单模型,但这里以下图稍微复杂一点的模型说明训练的思路,不同的encoder-decoder模型结构有差异,但训练的核心思想都大同小异。

这里写图片描述

我们知道RNN是可以学习概率分布然后进行预测的,比如我们输入t个时刻的数据后预测t+1时刻的数据,最经典的就是字符预测的例子,可在前面的《循环神经网络》《TensorFlow构建循环神经网络》了解到更加详细的说明。为了得到概率分布一般会在RNN的输出层使用softmax激活函数,就可以得到每个分类的概率。

对于RNN,对于某个序列,对于时刻t,它的输出概率为p(xt|x1,...,xt1),则softmax层每个神经元的计算如下:

p(xt,j|x1,...,xt1)=exp(wjht)Ki=1exp(wiht)
其中ht是隐含状态,它与上一时刻的状态及当前输入有关,即ht=f(ht1,xt)

那么整个序列的概率就为

p(x)=Tt=1p(xt|x1,...,xt1)

而对于encoder-decoder模型,设有输入序列x1,...,xT,输出序列y1,...,yT,输入序列和输出序列的长度可能不同。那么其实就是要根据输入序列去得到输出序列的可能,于是有下面的条件概率,x1,...,xT发生的情况下y1,...,yT发生的概率等于p(yt|v,y1,...,yt1)连乘。其中v表示x1,...,xT对应的隐含状态向量,它其实可以等同表示输入序列。

p(y1,...,yT|x1,...,xT)=Tt=1p(yt|x1,...xT,y1,...,yt1)=Tt=1p(yt|v,y1,...,yt1)

此时,ht=f(ht1,yt1,v),decoder的隐含状态与上一时刻状态、上一时刻输出和状态向量v都有关,这里不同于RNN,RNN是与当前时刻输入相关,而decoder是将上一时刻的输出输入到RNN中。于是decoder的某一时刻的概率分布可用下式表示,

p(yt|v,y1,...,yt1)=g(ht,yt1,v)

所以对于训练样本,我们要做的就是在整个训练样本下,所有样本的p(y1,...,yT|x1,...,xT)概率之和最大,对应的对数似然条件概率函数为,1NNn=1log(yn|xn,θ),使之最大化,θ则是待确定的模型参数。对于rnn、lstm和gru的结构可以看这几篇文章《循环神经网络》 《LSTM神经网络》 《GRU神经网络》

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

LSTM神经网络

LSTM是什么LSTM即Long Short Memory Network,长短时记忆网络。它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的。我们说RNN不能处理距...

TensorFlow实现seq2seq

前言前面在《深度学习的seq2seq模型》文章中已经介绍了seq2seq结构及其原理,接下去这篇文章将尝试使用TensorFlow来实现一个seq2seq网络结构,该例子能通过训练给定的训练集实现输入...

深度学习:Seq2seq模型

Encoder-Decoder模型和Attention模型。seq2seq是什么?简单的说,就是根据一个输入序列x,来生成另一个输出序列y。seq2seq有很多的应用,例如翻译,文档摘取,问答系统等等...

深度学习(BOT方向) 番外1 Seq2Seq的变种VHRED MrRNN

系列目录: 要不,和机器聊聊?– 小谈Bot系统 Seq2Seq Chatbot 聊天机器人:基于Torch的一个Demo搭建 手札 深度学习(BOT方向) 学习笔记(1) Sequence2...
  • MebiuW
  • MebiuW
  • 2016年11月27日 20:51
  • 1668

<深度学习-实战2>Convolutional_Seq2Seq的环境搭建及训练

上次分享了FaceBook最近提出的Convolution Seq2Seq模型的一些理论知识,今天跟大家分享一下实际操作经验,     主要包括三个方面内容:1、安装Torch平台,2、配置fair...

Facebook开源Caffe2深度学习框架:开发者可快速训练和迭代AI模型

我们所在的世界每分每秒都在不断的产生海量的文字,图片和视频等信息,Facebook正着力于开发新的AI系统来管理这些信息,从而使人们更好的了解世界,同时在信息冗余的时代仍保持高效的沟通。在现有人工智能...
  • AMDS123
  • AMDS123
  • 2017年04月19日 11:53
  • 7704

一个模型库学习所有:谷歌开源模块化深度学习系统Tensor2Tensor

选自Google.research 机器之心编译 参与:黄小天、李泽南 在谷歌提交热点论文《Attention Is All You Need》和《One Model To Learn...
  • AMDS123
  • AMDS123
  • 2017年06月20日 11:57
  • 1748

《深度学习C++对象模型》学习笔记2:构造函数语意学

构造函数语意学

深度学习之图像分类模型inception v2、inception v3解读

inception v2与inception v3两种模型配置。 Inception v3单模型达到了21.2%的top1错误率,多模型达到了17.3%的top1错误率...

深度学习之图像分类模型inception v2、inception v3解读

来自caffeCN的一个简要的总结(http://caffecn.cn/?/question/255): 先上Paper列表: [v1] Going Deeper with Convolu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习的seq2seq模型
举报原因:
原因补充:

(最多只允许输入30个字)