<模型匯總-6>基於CNN的Seq2Seq模型-Convolutional Sequence to Sequence
Seq2seq是現在使用廣泛的一種序列到序列的深度學習演算法,在圖像、語音和NLP,比如:機器翻譯、機器閱讀、語音識別、智能對話和文檔摘要生成等,都有廣泛的應用。Seq2Seq模由encoder和decoder兩個部分來構成,假設模型的訓練樣本為(X,Y),encoder負責把輸入X映射到隱向量Z,再由decoder把Z映射到輸出Y。現在大多數場景下使用的Seq2Seq模型基於RNN構成的,雖然取得了不錯的效果,但也有一些學者發現使用CNN來替換Seq2Seq中的encoder或decoder可以達到更好的效果。最近,FaceBook帆布一篇論文:《Convolutional Sequence to Sequence Learning》,提出了完全使用CNN來構成Seq2Seq模型,用於機器翻譯,超越了谷歌創造的基於LSTM機器翻譯的效果。
論文下載地址:[1705.03122] Convolutional Sequence to Sequence Learning
開源代碼github地址:facebookresearch/fairseq
FaceBook發布的這篇文章的工作持續時間比較長了,依賴於《Language Modeling with Gated Convolutional Networks》文章中的工作。個人認為,FaceBook的Convolutional SeqSeq取得了超越Google翻譯的成果,重要原因在於採用了很多的trick,很多工作值得借鑒:
1、Position Embedding,在輸入信息中加入位置向量P=(p1,p2,....),把位置向量與詞向量W=(w1,w2,.....)求和構成向量E=(w1+p1,w2+p2),做為網路輸入,使由CNN構成的Encoder和Decoder也具備了RNN捕捉輸入Sequence中詞的位置信息的功能。
2、層疊CNN構成了hierarchical representation表示。層疊的CNN擁有3個優點:
(1)捕獲long-distance依賴關係。底層的CNN捕捉相聚較近的詞之間的依賴關係,高層CNN捕捉較遠詞之間的依賴關係。通過層次化的結構,實現了類似RNN(LSTM)捕捉長度在20個詞以上的Sequence的依賴關係的功能。
(2)效率高。假設一個sequence序列長度為n,採用RNN(LSTM)對其進行建模 需要進行n次操作,時間複雜度O(n)。相比,採用層疊CNN只需要進行n/k次操作,時間複雜度O(n/k),k為卷積窗口大小。
(3)可以並行化實現。RNN對sequence的建模依賴於序列的歷史信息,因此不能並行實現。相比,層疊CNN正個sequence進行卷積,不依賴序列歷史信息,可以並行實現,模型訓練更快,特別是在工業生產,面臨處理大數據量和實時要求比較高的情況下。
3、融合了Residual connection、liner mapping的多層attention。通過attention決定輸入的哪些信息是重要的,並逐步往下傳遞。把encoder的輸出和decoder的輸出做點乘(dot products),再歸一化,再乘以encoder的輸入X之後做為權重化後的結果加入到decoder中預測目標語言序列。
4、採用GLU做為gate mechanism。GLU單元激活方式如下公式所示:
每一層的輸出都是一個線性映射X*W + b,被一個門gate:o(X*V+c)控制,通過做乘法來控制信息向下層流動的力度,o採用雙曲正切S型激活函數。這個機制類似LSTM中的gate mechanism,對於語言建模非常有效,使模型可以選擇那些詞或特徵對於預測下一個詞是真的有效的。
5、進行了梯度裁剪和精細的權重初始化,加速模型訓練和收斂。
完整的結構分析:
Figure1是論文中給出的的Convolutional Seq2Seq的結構,看起來有點複雜,其實挺簡單的。下面簡要分析下是如何與上述5個trick結合起來的:
上左encoder部分:通過層疊的卷積抽取輸入源語言(英語)sequence的特徵,圖中直進行了一層卷積。卷積之後經過GLU激活做為encoder輸出。
下左decoder部分:採用層疊卷積抽取輸出目標語言(德語)sequence的特徵,經過GLU激活做為decoder輸出。
中左attention部分:把decoder和encoder的輸出做點乘,做為輸入源語言(英語)sequence中每個詞權重。
中右Residualconnection:把attention計算的權重與輸入序列相乘,加入到decoder的輸出中輸出輸出序列。
最後實驗結論:在多個公開數據集上獲得了新的state-of-the-art的成績。在WMT-16、英語-羅馬尼亞語翻譯,高出以前方法1.8 BLEU;在WMT-14、英語-法語翻譯,比以前LSTM模型所取得的成績高出1.5 BLEU;在WMT-14、英語-德語翻譯,比以前方法高出0.5 BLEU。
總結:個人感覺本文採用了很多簡單且非常有效的trick,達到了基於LSTM的NMT方法更好的效果,正因為如此,並不能說,基於CNN seq2seq模型就一定比基於LSTM的Seq2Seq一定好。採用CNN的Seq2Seq最大的優點在於速度快,效率高,缺點就是需要調整的參數太多。上升到CNN和RNN用於NLP問題時,CNN也是可行的,且網路結構搭建更加靈活,效率高,特別是在大數據集上,往往能取得比RNN更好的結果。
下期預告:下期將給大家帶來基於Convolutional Seq2Seq實戰,盡情期待。
推薦閱讀:
※魏劍峰:人工智慧的發展會讓翻譯失業嗎?
※GNMT(Google's Neural Machine Translation System) 閱讀筆記
※目前各種機器翻譯服務質量均不佳,技術難點有哪些?
※DeepL Translator | 人工智慧輔助翻譯
※AI 時代的媒體會是什麼樣
TAG:深度学习DeepLearning | 机器翻译 | 计算机科学 |