對 【Sequence to Sequence Learning with Neural Networks】的理解

零、背景及引言

本文是對Sequence to Sequence Learning with Neural Networks文章閱讀後的總結。
在不同的學習任務中,傳統深度神經網絡(DNN)是表現不錯的強力模型,如在圖像分類、語音識別領域,但DNN由於不能適應輸入輸出不固定的情況,導致其不能夠用於序列到序列的映射任務。 在2014年,Google的三位作者提出基於端到端的序列到序列模型:本質上是由2個4層的LSTM來分別構成編碼器和解碼器。實驗結果表明:在機器翻譯領域,達到了SOTA效果,好於傳統的統計機器翻譯(SMT)。

一、模型及訓練

1.1 模型介紹

普通RNN能夠有效捕捉序列數據(如文本數據)的語義信息,並映射生成新的序列數據,但RNN對長距離依賴表現不好,同時由於訓練時存在梯度彌散和梯度爆炸而難以訓練,因此作者使用LSTM代替RNN。
論文中的Seq2Seq模型是由2個4層的LSTM來分別構成編碼器和解碼器。訓練時對對每個句子結尾加入標誌 ,通過多層LSTM將源句子(將要被翻譯的句子)映射爲固定維度(原文用1000維)的向量,並使用另一個多層LSTM將該向量映射爲目標句子(待翻譯的句子),源句子和目標句子的長度可能不一樣。其網絡架構圖如下圖:

  • 模型目的是求最大化條件概率,如下圖

1.2 數據集及評價指標

數據集使用WMT'14 dataset,是英語到法語翻譯,文中表示訓練了12M的句子,共包括348M個法語詞彙和304M個英語詞彙,其中涉及最常用的unique英語單詞160000個及unique法語單詞80000個,對於詞表外的單詞使用表示

1.3 輸入句子反轉

原文作者發現使用源句子在訓練時,將句子的順序逆序輸入(目標句子不逆序)會獲得不錯的性能提升,如ppl從5.8變爲4.7, BLEU score從 25.9變爲30.6

1.4 並行化

LSTM使用C++實現,整個網絡共8層LSTM,使用8塊GPU計算,並使每塊GPU跑一層LSTM, 每秒單詞處理數從1700升至爲6300

1.5 幾點訓練細節

  • LSTM的初始化權重使用[-0.08 , 0.08]的均勻分佈
  • 使用不帶動量的隨機梯度下降算法訓練,初始學習率爲0.7,並訓練5個epoch,在隨後的2.5個epoch中,每0.5個epoch訓練時學習率減半
  • batch size爲 128
  • 每個LSTM各使用4層, 分別表示encoder和decoder , 每層1000個cell,embedding dim 爲1000
  • LSTM可有效避免梯度消失,但對於梯度爆炸卻沒有好辦法處理,因此原文強制限制梯度[10 , 25]之間,對於每個訓練batch,有對應梯度轉換公式
  • 每個batch 儘量選擇句子長度相當的句子來訓練,可減少padding,加速訓練

二、實驗結果

  • 使用beam search來優化計算速度
    beam size 分別爲1、2、12,並使用ensemble集成來優化結果, 具體實驗結果如下圖:

  • 對長句子及不同句子的詞頻rank實驗
    模型對長句子處理效果蠻好,對句子的詞頻rank測試發現翻譯效果先上升後逐步下降

三、個人總結

  1. Seq2Seq整體架構在NLP領域的首提很新穎,對於訓練數據逆序輸入的trick很令人amazing
  2. 對不同詞頻rank後的翻譯效果先上升再逐步下降,看來是詞頻對Seq2Seq的MT任務是有影響的,猜測剛開始隨詞頻上升是因爲停用詞或短句影響結果。

四、參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章