Sequence to sequence入门详解:从RNN, LSTM到Encoder-Decoder, Attention, transformer(三)

424 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

4. Encoder-Decoder模型

由前面的章节我们知道,Encoder-Decoder模型就是输入输出长度为一般情况的RNN模型,示意图如下: 在这里插入图片描述

图4.1 Encoder-Decoder

其中Encoder负责将输入进行编码,得到语义编码向量C;Decoder负责将语义编码向量C进行解码,得到输出。以机器翻译为例,英文作为输入,输出为中文。可以用如下的数学模型来表示:

input=(x1,x2,,xn)C=f(input)yi=g(C,y1,y2,,yi1),i=1,2,,moutput=(y1,y2,,ym)(4-1)\begin{aligned} input&= ( x_1,x_2,\cdots,x_n )\\ C&=f(input)\\ y_i&=g( C,y_1,y_2,\cdots,y_{i-1} ),i=1,2,\cdots,m\\ output&=( y_1,y_2,\cdots,y_m )\\ \tag{4-1} \end{aligned}

从Encoder得到C的方式有多种,可以将Encoder最后一个时刻的隐藏状态作为C,也可以将所有的隐藏状态进行某种变换得到C。 语义编码C在Decoder中的作用当时有多种,常见的有如下两种 (1) C作为Decoder的初始状态h0h_0在这里插入图片描述

图4.2 C作为Decoder的初始状态h0

(2) C作为Decoder的每一步输入。 在这里插入图片描述

图4.2 C作为Decoder的每一步输入

4.1. 几种典型的encoder-decoder

4.1.1. 第一种:语义编码C作为Decoder的初始输入

本小节的encode-decoder模型可以看成是seq2seq的开山之作,来源于google的论文arxiv.org/abs/1409.32… Sequence to Sequence Learning with Neural Networks。该论文的模型是为了翻译问题而提出的,其中的encoder和decoder都采用LSTM,decoder中采用了beam search来提升效果。此外,该论文还采用了一个tric——将输入源句子倒序输入。这是因为,无论RNN还是LSTM,其实都是有偏的,即顺序越靠后的单词最终占据的信息量越大。如果源句子是正序的话,则采用的是最后一个词对应的state来作为decoder的输入来预测第一个词。这样是是不符合直觉的,因为没有对齐。将源句子倒序后,某种意义上实现了一定的对齐。 在这里插入图片描述

图4.3 Encoder-Decoder框架1-C作为Decoder的初始输入

Encoder:

ht=tanh(W[ht1,xt]+b)c=hT(4-2)\begin{aligned} h_t&=tanh(W[h_{t-1},x_t]+b)\\ c&=h_T\\ \tag{4-2} \end{aligned}

Decoder:

ht=tanh(W[ht1,yt1]+b),h0=cot=softmax(Vht+d)(4-3)\begin{aligned} h_t&=tanh(W[h_{t-1},y_{t-1}]+b),h_0=c\\ o_t&=softmax(Vh_t+d)\\ \tag{4-3} \end{aligned}

4.1.2. 第一种:语义编码C作为Decoder的每一步输入

arxiv.org/pdf/1406.10… Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation 在这里插入图片描述

图4.4 Encoder-Decoder框架2-C作为Decoder的每一步输入

Encoder:

ht=tanh(W[ht1,xt]+b)c=(VhT)(4-4)\begin{aligned} h_t&=tanh(W[h_{t-1},x_t]+b)\\ c&=(Vh_T)\\ \tag{4-4} \end{aligned}

Decoder:

ht=tanh(W[ht1,yt1,c]+b)ot=softmax(Vht+c)(4-5)\begin{aligned} h_t&=tanh(W[h_{t-1},y_{t-1},c]+b)\\ o_t&=softmax(Vh_t+c)\\ \tag{4-5} \end{aligned}

4.2. Encoder-Decoder的缺点

  1. 对于输入序列的每个分量的重要程度没有区分,这和人的思考过程是不相符的,例如人在翻译的时候,对于某个一词多义的词,可能会结合上下文中某些关键词进行辅助判断。
  2. 如果在Decoder阶段,仅仅将C作为初始状态,随着时间往后推进,C的作用会越来越微弱。

事实上,Attention机制的提出,主要就是为了解决上述问题。