天天看點

Encoder-Decoder具體過程

原文連結

Encoder-Decoder具體過程

Encoder的具體實作

Encoder-Decoder具體過程

input

:不是原始的序列,而是将序列中的每個元素都轉換為字典中對應的id。不管是train還是inference階段,為了效率都是一次輸入一個mini-batch,是以需要為input定義一個int型rank=2的placeholder。?

embedding

:embedding作用,定義為trainable=True的變量,這樣即使使用pre-trained的詞向量也可以在訓練模型的過程中調優。

MultiLayer_LSTM

:接受的輸入是序列中每個元素對應的向量。

Decoder具體實作過程

Encoder-Decoder具體過程

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的階段如果也将輸出的結果再作為輸入,一旦前面的一步錯了,都會放大誤差,導緻訓練過程更不穩定。