Encoder-Decoder具体过程

原文链接
Encoder-Decoder具体过程_第1张图片Encoder的具体实现
Encoder-Decoder具体过程_第2张图片input:不是原始的序列,而是将序列中的每个元素都转换为字典中对应的id。不管是train还是inference阶段,为了效率都是一次输入一个mini-batch,所以需要为input定义一个int型rank=2的placeholder。?
embedding:embedding作用,定义为trainable=True的变量,这样即使使用pre-trained的词向量也可以在训练模型的过程中调优。
MultiLayer_LSTM:接受的输入是序列中每个元素对应的向量。

Decoder具体实现过程
Encoder-Decoder具体过程_第3张图片input:与encoder的一样,也是序列元素对应的id。
embedding:视情况而定需不需要与encoder的embedding不同,比如在翻译中,源语言与目标语言的词向量空间就不一样,但是像文本摘要这种都是基于一种语言的,encoder与decoder的embedding matrix是可以共用的。

Dense_Layer:与encoder仅输出hidden state不同,decoder需要输出每个时刻词典中各token的概率,因此还需要一个dense layer将hidden state向量转换为维度等于vocabulary_size的向量,然后再将dense layer输出的logits经过softmax层得到最终的token概率。

Decoder的定义需要区分inference阶段还是train阶段。

inference阶段,decoder的输出是未知的,对于生成[‘W’, ‘X’, ‘Y’, ‘Z’, ‘’]序列,是在decoder输出token 'W’之后,再将’W’作为输入,结合此时的hidden state,推断出下一个token ‘X’,以此类推直到输出为或达到最长序列长度之后终止。

而在train阶段,decoder应该输出的序列是已知的,不管最终output的结果是什么,都将已知序列中的token依次输入。train的阶段如果也将输出的结果再作为输入,一旦前面的一步错了,都会放大误差,导致训练过程更不稳定。

你可能感兴趣的:(encoder-decoder)