本文主要是介绍Transfomer完整学习笔记一:Encoder-Decoder,Seq2Seq,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近常看到transformer框架下的论文,且知道transformer势头大盛,但对transformer缺乏了解,所以就记录下关于transformer的完整学习过程,从最基本的部分开始学习这里做以记录。
Encoder-Decoder,Seq2Seq
- 什么是seq2seq& encoder-decoder
- Encoder
- Decoder
本篇学习笔记主要参考 这篇blog
什么是seq2seq& encoder-decoder
常见的应用场景为nlp问题。以机器翻译为例:
英语输⼊:“They”、“are”、“watching”、“.”
法语输出:“Ils”、“regardent”、“.”
我们的目标就是完成这个翻译任务。而在翻译任务中,输入和输出是不定长的。用于分析处理不定长输入的RNN网络即encoder,用于生成不定长输出的RNN网络即decoder。这二者共同构成的结构即Seq2Seq,并同时进行训练。
如图描述了这个机器翻译任务的实现过程。蓝色部分为编码器,eos意为end of seq代表输入的结束。每个时间段t对encoder的输入即要翻译的句子的一个单词或标点或eos。在这个图中,将encoder的最终状态(即输入完eos)作为整个输入的representation。而每个时间片都以前一个时间片的状态和当前输入为输入。
右侧白色部分为decoder,bos意为begin of seq代表输出的开始。每个decoder时间片t以encoder的最终状态和decoder中前一个时间片的输出及前一个时间片的状态为输入。
Encoder
encoder的目的是将一个不定长的输入序列转化为一个定长的背景变量c。让我们考虑批量⼤小为1的时序数据样本。假设输⼊序列是 x1, . . . , xT,例如 xi是输⼊句⼦中的第 i 个词。在时间步 t,循环神经⽹络将输⼊ 的特征向量 xt 和上个时间步的隐藏状态ht−1变换为当前时间步的隐藏状态ht。我们可以⽤函数 f 表达循环神经⽹络隐藏层的变换:
ht=f(xt,ht−1)
然后根据指定的函数,通过所有状态,计算得到背景变量c。
c=q(h1,h2,…,hT)
这里描述的encoder是单向rnn,也可使用双向rnn。
Decoder
通过encoder得到了输入向量的背景变量c。给定输出序列y1,y2,…yT’.我们需要得到yi和si两类变量。对于si,我们可以用如下函数表示:
st′=g(yt′−1,c,st′−1)
当得到了隐藏层状态,就可以计算当前的输出。可以用自定义的输出层和softmax来计算yi的条件概率:
P(yt′|y1,…,yt′−1,c)
这篇关于Transfomer完整学习笔记一:Encoder-Decoder,Seq2Seq的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!