歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。技術交流QQ羣:433250724,歡迎對算法、技術感興趣的同窗加入。算法
Encoder-Decoder(編碼-解碼)是深度學習中很是常見的一個模型框架,好比無監督算法的auto-encoding就是用編碼-解碼的結構設計並訓練的;好比這兩年比較熱的image caption的應用,就是CNN-RNN的編碼-解碼框架;再好比神經網絡機器翻譯NMT模型,每每就是LSTM-LSTM的編碼-解碼框架。所以,準確的說,Encoder-Decoder並非一個具體的模型,而是一類框架。Encoder和Decoder部分能夠是任意的文字,語音,圖像,視頻數據,模型能夠採用CNN,RNN,BiRNN、LSTM、GRU等等。因此基於Encoder-Decoder,咱們能夠設計出各類各樣的應用算法。markdown
Encoder-Decoder框架有一個最顯著的特徵就是它是一個End-to-End學習的算法;本文將以文本-文本的例子做爲介紹,這樣的模型每每用在機器翻譯中,好比將法語翻譯成英語。這樣的模型也被叫作 Sequence to Sequence learning[1]。所謂編碼,就是將輸入序列轉化成一個固定長度的向量;解碼,就是將以前生成的固定向量再轉化成輸出序列。 以下圖示意[3]:網絡
這邊爲了方便闡述,選取了編碼和解碼都是RNN的組合。在RNN中,當前時刻隱層狀態是由上一時刻的隱層狀態和當前時刻的輸入決定的,也就是 框架
得到了各個時刻的隱層狀態之後,再將信息彙總,生成最後的語義編碼c函數
解碼過程咱們要根據給定的語義編碼C和已經生成的輸出序列y1,y2,…yt−1來預測下一個輸出的單詞yt,實際上就是把生成句子
其中
因此,在文本序列的Encoder-Decoder模型中,本來RNN(LSTM)語言模型是要估計
只要端到端訓練RNN(LSTM)網絡就能夠了,在每個句子末尾打上一個end-of-sentence symbol, EOS符號,用輸入句子來預測輸出句子。這樣的模型就能夠完成基本的英語-法語的翻譯任務。.net
實際上這樣的模型能作什麼應用徹底取決於訓練數據,若是用英語-法語對應句子做爲輸入輸出訓練,那就是英法翻譯;若是用文章-摘要來訓練那就是自動摘要機了。
基本的Encoder-Decoder模型很是經典,可是也有侷限性。最大的侷限性就在於編碼和解碼之間的惟一聯繫就是一個固定長度的語義向量c。也就是說,編碼器要將整個序列的信息壓縮進一個固定長度的向量中去。可是這樣作有兩個弊端,一是語義向量沒法徹底表示整個序列的信息,還有就是先輸入的內容攜帶的信息會被後輸入的信息稀釋掉,或者說,被覆蓋了。輸入序列越長,這個現象就越嚴重。這就使得在解碼的時候一開始就沒有得到輸入序列足夠的信息, 那麼解碼的準確度天然也就要打個折扣了[3]。
爲了彌補上述基本Encoder-Decoder模型的侷限性,近兩年NLP領域提出Attention Model(注意力模型),典型的例子就是在機器翻譯的時候,讓生成詞不是隻能關注全局的語義編碼向量c,而是增長了一個「注意力範圍」,表示接下來輸出詞時候要重點關注輸入序列中的哪些部分,而後根據關注的區域來產生下一個輸出,以下圖所示:
相比於以前的encoder-decoder模型,attention模型最大的區別就在於它不在要求編碼器將全部輸入信息都編碼進一個固定長度的向量之中。相反,此時編碼器須要將輸入編碼成一個向量的序列,而在解碼的時候,每一步都會選擇性的從向量序列中挑選一個子集進行進一步處理。這樣,在產生每個輸出的時候,都可以作到充分利用輸入序列攜帶的信息。並且這種方法在翻譯任務中取得了很是不錯的成果。很顯然,每個輸出單詞在計算的時候,參考的語義編碼向量c都是不同的,也就是它們的注意力焦點是不同的。
在下一篇將具體描述Attention Model的機制,是很是重要的一類模型,值得關注!
[1] Sequence to Sequence Learning with Neural Networks, 2014, Google
[2] http://chuansong.me/n/344242742806
[3] http://blog.csdn.net/u014595019/article/details/52826423 [4] NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE