深度学习的seq2seq模型

从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,...,xt−1),则softmax层每个神经元的计算如下:

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

那么整个序列的概率就为

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

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

p(y1,...,yT‘|x1,...,xT)=∏T‘t=1p(yt|x1,...xT,y1,...,yt−1)=∏T‘t=1p(yt|v,y1,...,yt−1)

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

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

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

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

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

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

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

欢迎关注:

时间: 2024-09-09 03:58:14

深度学习的seq2seq模型的相关文章

深度学习的Attention模型

前言 前面看到谷歌发表的运用在机器翻译上的论文<Attention is all you need>,很是让人惊讶,这是一种全新的模型,与之前的经典的seq2seq模型改动较大,它完全摒弃了RNN或CNN神经网络,大大简化了模型的复杂度,而且效果还相当好.当然Attention模型可以单独使用,但这篇文章我们来看看Attention的机制及怎么与经典的seq2seq结合. seq2seq 前面我们有详细的文章介绍了seq2seq的机制以及如何用TensorFlow来实现seq2seq.可到&l

《中国人工智能学会通讯》——6.3 深度学习的基础模型

6.3 深度学习的基础模型 深度学习(Deep Learning)源于人工神经网络(简称神经网络),其初衷是从仿生学角度建立模拟人脑学习的神经元网络结构,从而模仿人脑的机制来解释数据.早期的神经网络是浅层神经网络,通常仅含有单个输入层.少量隐藏层和单个输出层,输入通常是人工提取的特征.其连接方式是,从输入层开始到输出层结束,中间各层接收前一级输入,并输入到下一级,整个网络中无反馈,因而又称为前馈网络.而深度学习的模型是深度神经网络,较之浅层神经网络,它具有较多的隐藏层和复杂的连接方式,因而能够自

中国人工智能学会通讯——深度学习的迁移模型 三、三种不同的迁移方法

三.三种不同的迁移方法 将这些概念加起来,就可以总结出三个不同的迁移方法 1.基于差异的方法 在哪里做迁移的转换.自适应.可以在某个层次来做,也可以在多个层次来做,如何来衡量两个领域之间的距离,可以用先验的这种概率.模型,也可以用联合概率.模型:另外还可以将源领域的信息加进来,建立一个更准确的Loss.这都是图像领域获得的知识,那自然语言会不会有类似的方式? 下面一篇描述NLP的文章也证明了这一点,假设我们把自然语言的深度处理分成三个层次,即E.H.O,如果我们锁定不变,而其他的层次有可能变化,

中国人工智能学会通讯——深度学习的迁移模型 二、如何实现迁移学习 : 深度学习 + 迁移学习

二.如何实现迁移学习 : 深度学习 + 迁移学习 今天我讲的是如何实现迁移学习中的一个方面.从单层次来看一个东西,把一个领域里的模型和知识通过层次分解,就好比杭州有雷锋塔,我们可以从一个古典的建筑发展到像雷锋塔这样有层次的建筑,一层一层分析,深度学习恰恰为我们提供了分层和层次. 下面我就仔细地描述一下.深度学习如果是从左到右.从输入到输出的变化过程,中间是有很多非线性的转化,我们可以忽略不计.但是这些层次我们要迁移到新的领域,知识的迁移就相当于参数的迁移,这些参数就是权重. 这里我们看知识到底有

我的2017年文章汇总——深度学习篇

2017快过完了,大家过去一年收获如何?不管怎样,保持好心态,未来不迎,当下不杂,既过不恋. 近期准备把过去一年写的文章按照分类重新整理推送一遍,包括:"分布式"."机器学习"."深度学习"."NLP"."Java深度"."Java并发核心"."JDK源码"."Tomcat内核". 本篇推送深度学习相关文章. LSTM神经网络 GRU神经网络 循环

《深度学习导论及案例分析》一1.3深度学习的模型和算法

1.3深度学习的模型和算法 深度学习亦称深度机器学习.深度结构学习.分层学习,是一类有效训练深层神经网络(Deep Neural Network,DNN)的机器学习算法,可以用于对数据进行高层抽象建模.广义上说,深层神经网络是一种具有多个处理层的复杂结构,其中包含多重非线性变换.如果深度足够,那么多层感知器无疑是深层网络,前馈神经网络也是深层网络.基本的深层网络模型可以分为两大类:生成模型和判别模型.生成是指从隐含层到输入数据的重构过程,而判别是指从输入数据到隐含层的归约过程.复杂的深层结构可能

用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类领域特别是应用深度学习解决文本分类的相关的思路.做法和部分实践的经验. 业务问题描述: 淘宝商品的一个典型的例子见下图,图中商品的标题是"夏装雪纺条纹短袖t恤女春半袖衣服夏天中长款大码胖mm显瘦上衣夏".淘宝网后台是通过树形的多层的类目体系管理商品的,覆盖叶子类目数量达上万个,商品量也是10亿量级,我们是任务是根据商品标题预测其所在叶子类目,示例中商品归属的类目为

专访 | 杨强教授谈CCAI、深度学习泡沫与人工智能入门

7 月 22 - 23 日,由中国人工智能学会.阿里巴巴集团 & 蚂蚁金服主办,CSDN.中国科学院自动化研究所承办,作为独家直播合作伙伴的第三届中国人工智能大会(CCAI 2017)将在杭州国际会议中心盛大开幕. 作为大会主席,香港科技大学计算机与工程系主任.AAAI Fellow 杨强教授最近接受了大会记者专访.这次访谈干货满满,其中有不少话题是杨强教授首度公开谈及,比如下一个 AI 突破口.深度学习泡沫.AI 之路心得.本科生入门 AI.好学生要能教导师学习,等等. (点击阅读杨强教授历史

盘点|10条最有用的深度学习教程资源(附教程链接)

本文来源于Github blog BY omtcyfz 译者:赫鑫宇 郭昕 今天介绍一些深度学习的资源干货!个人认为这些资源对于那些刚刚进入机器学习领域准备摸索一番的小白十分有帮助.同时如果你想进一步了解神经网络算法及其应用,那请阅览本篇文章吧,相信会对你有极大的帮助! 在上干货之前,先来讲一下我把这些资源整合起来并归结到本篇文章中的初衷.在刚开始入门学习的时候,我看了大量的没有文字介绍的链接资源,我完全不知道他们中的哪一个是值得花时间研究的.所以现在我把见过的最有用的一些链接资源拿出来并配以简