系列介绍
最近看了一些Seq2Seq模型的文章。东西看杂了容易忘记,花点时间简单的整理一下。
这个Seq2Seq系列主要梳理关于Seq2Seq模型的几篇重要的文章的模型,分为三个内容分别是:Encoder-Decoder, Sequence to Sequence 和 attention mechanism.
三个系列的文章列举如下:
一来我本人不搞机器翻译,二来没时间,因此上述文章的实验部分,本文不会介绍,只是模型有涉及时会提到。有时间的话,我会再加上对Tensorflow中Seq2Seq的源码分析的文章。
Seq2Seq系列论文:
[1]Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
[2]Sequence to Sequence Learning with Neural Networks
[3]Neural Machine Translation by Jointly Learning to Align and Translate
其中[2]和[3]均引用[1],而[2]和[3]是相互引用,且[2]和[3]都是14年9月放到arXiv上面,两篇文章的作者没有重叠,我目前没分清谁先谁后了,暂时先不管。按照先Seq2Seq后attention机制来介绍。
上述论文是本系列将要介绍的内容,此外还有几篇Seq2Seq的论文贴出来如下:
[4]A Neural Conversational Model
[5]Grammar as a Foreign Language
简单整理,应该有漏掉,欢迎补充!
正文
系列第一篇介绍的是论文[1],这是一篇将Encoder-Decoder模型用于机器翻译的文章。下面内容中出现的变量无特别说明都是向量。
模型部分,作者首先回顾了RNN模型。记输入向量序列为
即前一时刻的隐状态和当前输入的非线性组合。其中
通过训练RNN预测一个序列中的下一时刻的symbol,RNN可以得到序列的概率分布模型,即
其中
序列
通过这迭代的方式来选取下一个时刻的symbol,可以用来生成全新的序列。
RNN Encoder–Decoder
!下面图片截至论文
有两个不同的RNN,一个作为Encoder,一个作为Decoder。Encoder将长度可变的输入序列表达成为固定长度的vector representation(即后面提到的
输入序列(比如原文句子中的单词)逐个输入到Encoder的RNN中,这部分的RNN输出不要,当输入序列输入完毕时保留RNN的最后的隐状态
Encoder端的某一时刻的隐层状态只与上一时刻的隐状态和当前的输入有关,即
此处用
Decoder端隐状态的计算为:
此处
可能令人困惑的地是上面两个
另外需要注意的是
继续
模型训练的损失函数为:
作者接下来讲了RNN模型的内部,本文自己提了一个新的隐藏单元,包括remember门和forget门。就我感觉和LSTM区别不大。主要的是几个公式,直接上原文吧:
这四个公式可以说就是说了一下
至此模型部分就介绍完了。
额外的针对本文的SMT的一些细节说一点,以英文译法文为例。
设翻译用到的英文词的集合为
Encoder的每一时刻的输入就是英文句子中单词的one-hot向量
在Encoder中先执行word embedding即
Decoder的输出是
然而,Decoder的下一时刻的输入是上一时刻的输出,显然将概率作为下一次的输入是不可取的。所以实际上在把上一时刻的输出作为下一时刻的输入之前,也对最有可能输出(概率最大的)的那个词做了一次word embedding。
本文完