前言
我們通常使用RNN來對序列到序列問題建模,但是使用RNN建模,輸出序列的長度必須和輸入序列的長度相等。seq2seq框架很好地解決了這個問題。本文介紹了兩種最常見的seq2seq框架。若對RNN不熟悉,請參考我前兩篇文章:RNN詳解、LSTM詳解。
seq2seq介紹:
seq2seq模型,全稱Sequence to sequence,由Encoder和Decoder兩個部分組成,每部分都是一個RNNCell(RNN、LSTM、GRU等)結構。Encoder將一個序列編碼爲一個固定長度的語義向量,Decoder將該語義向量解碼爲另一個序列。
特點:輸入序列和輸出序列的長度是可變的,輸出序列長度可以不等於輸入序列長度。
訓練:對Encoder和Decoder進行聯合訓練,使給定輸入序列的目標序列的條件概率最大化。
應用:seq2seq模型可以在給定輸入序列的情況下生成目標序列,也可以對一對序列進行評分(以條件概率表示)。比如機器翻譯、文本摘要生成、對話生成等。
框架1:
該框架由這篇論文提出:Cho et al.(2014) Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation。結構圖如下:
這篇論文另一大貢獻是提出了GRU,論文中Encoder和Decoder都是GRU。爲了表達方便,這裏我們假設Encoder和Decoder都爲RNN,來看一下seq2seq的公式:
Encoder
其中是隱藏狀態,是輸出。
Encoder輸出的語義向量:
其中爲權重矩陣,是Encoder最後的隱藏狀態(記錄了整個序列的信息)。
Decoder
接收到Encoder來的語義向量,首先輸入一個開始信號(比如爲),和一個初始化的隱藏狀態,接下來就按照上面的公式一直傳遞下去。
注意:語義向量作用於Decoder的每一時刻。
其中爲每個時刻的輸出,是一個向量,向量維度是詞表長度,向量中的每個值是對應單詞的概率。直到預測值的概率最大時,結束預測。
框架2:
該框架由這篇論文提出:Sutskever et al.(2014) Sequence to Sequence Learning with Neural Networks。這個框架也是最常用的一種,結構圖如下:
Encoder輸入序列A B C,生成語義向量作爲Decoder的初始隱藏狀態,Decoder中初始時刻輸入作爲開始標誌,直至輸出結束預測。
和框架1不同的是,該框架Encoder輸出的語義向量直接作爲Decoder的初始隱藏狀態,並不作用於之後的時刻。
這篇論文中使用LSTM作爲Encoder和Decoder,爲方便描述這裏用RNN作爲示範,公式爲:
Encoder
Encoder輸出的語義向量:
論文作者發現將輸入序列反轉後再輸入Decoder中效果會好很多,以下是由此得出的結論。
We conclude that it is important to find a problem encoding that has the greatest number of short term dependencies, as they make the learning problem much simpler.
Decoder
其中。
總結
seq2seq框架先用Encoder將輸入序列編碼成一個固定大小的語義向量,這個過程是對信息壓縮的過程,不可不免地會損失很多信息,而且Decoder在解碼時無法關注到輸入序列的更多細節,這就引出了注意力機制,下篇文章講Attention。
References
[1] Cho et al.(2014) Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation
[2] Sutskever et al.(2014) Sequence to Sequence Learning with Neural Networks
[3] seq2seq學習筆記