这篇笔记主要是我在学习这些算法的过程中,遇到难以理解的地方之后去查询资料,然后记录下了我自己的一些针对这些难点的理解,并不是对大标题中的概念进行一个基础地介绍,如果你完全没有听说过这些概念,建议先去百科一下,或者看看原文,然后如果有卡壳的地方,希望这篇笔记能帮助到你。
Seq-to-Seq model
- 以Neural Machine Translation来说,seq1的每个字依次进入encoder被encode成一个个hidden states(也可以称context——越是往后的hidden states/context,包含句子的内容越多),当最后一层hidden states被算出来,这个last hidden states就包含了seq1句子所有的context,并且被送入decoder,decoder开始output seq2的每个字,并且在decoding的过程中,不断地产生hidden states(即so far目前被decode了的所有context)。
- context vector,即最后一层的hidden layer,会比较有问题,因为没办法处理过长的句子的所有信息(毕竟要把一整个句子的含义全部encode到一个vector里),后来出现了Attention这种结构,作为弥补RNN的hidden layers的解决办法。
- Seq-to-Seq with Attentions:
1)不同于之前只把最后一层encoder生成的hidden layer递给decoder,现在encoder生成的所有的hidden layers都要递给decoder,然后让decoder自己来判断当它想翻译一个字(例如f3 -> e3)的时候,它会更多更多地参考哪个 f i , i ≠ 3 f_i, i \ne 3 fi,i=3词向量,所以decoder的第一层hidden states其实是一个weighted sum of encoder hidden states。
2)所以整个流程是:
- encoder生成所有的hidden layers, h 1 e h_1^e h1e,…, h n e h_n^e hne
- decoder接收到 < E N D > <END> <END>的词向量,和一个initial decoder hidden layer h i n i t d h^d_{init} hinitd,生成 h n + 1 d h_{n+1}^d