Sequence to Sequence Learning with NN算法
《基於神經網絡的序列到序列學習》原文google scholar下載。網絡
@author: Ilya Sutskever (Google)and so on學習
1、總覽google
DNNs在許多棘手的問題處理上取得了矚目的成績。文中提到用一個包含2層隱藏層神經網絡給n個n位數字排序的問題。若是有好的學習策略,DNN可以在監督和反向傳播算法下訓練出很好的參數,解決許多計算上覆雜的問題。一般,DNN解決的問題是,算法上容易的而計算上困難的。DNN就是解決這個問題,將計算上看似不易解的問題經過一個設計好的多層神經網絡,並按照必定的策略輕鬆解決。編碼
可是,DNN有一個明顯的缺陷:DNN只能處理輸入、輸出向量維度是定長的情形。對於輸入、輸出可變長的狀況,使用RNN-Recurrent Neural Network更易求解。spa
對於一個RNN,每個cell一般是使用LSTM。也有GRU替代,GRU精度上可能不如LSTM,但計算上更加簡便,由於他是對LSTM的簡化。翻譯
這篇論文的模型相似於Encoder-Decoder的模型,Encoder和Decoder的部分採用兩個不一樣的RNN,之因此採用不一樣的RNN是由於能夠以不多的計算代價訓練更多的參數。設計
具體的說,這個Sequence to Sequence的學習中,首先將可變長的Sequence用一個RNN提取出特徵向量—定長的,這個特徵向量取自飛一個RNN的最後一個LSTM單元。code
以後,把這個向量輸入另外一個RNN(語言模型),如條件語言模型,使用beam search計算出機率最大的句子,獲得輸出。blog
本文的創新之處在於,源串做爲第一個RNN的輸入,其中的每個單詞是逆向輸入的。這樣作獲得了更高的BLEU分數。
雖然本文的模型沒有超過當下最好的模型的得分,但其逆向輸入的方法提供了新的思路。
2、模型
本文的模型以下:這是一個英語 –> 法語的翻譯模型:
源串是CBA,獲得輸出WXYZ。
數據集:WMT’14 English to French dataset。
使用的詞典是英文16萬詞,法語8萬詞。詞向量已經訓練好。未知單詞采用UNK。句子結尾爲EOS。
3、訓練細節
- 使用的是4層LSTM單元,深層的LSTM表現的更好
- 每一層1000個LSTM,也就是說,循環1000次(由於大多數句子30詞左右,其實這有點浪費)
- 初始化參數使用服從均勻分佈U(-0.8,0.8)隨機初始化
- 解碼階段輸出層機率採用的是一個很大的softmax,這個佔用了絕大多數的計算資源
- 詞向量維度是1000維度的
- 學習過程當中,使用隨機梯度降低,學習率初始0.7,迭代7.5次,前5次固定學習率是0.7,以後每半次迭代學習率減半一次
- 使用mini-batch,每一個batch是128個句子
- 爲了不梯度消失和梯度爆炸,限制梯度大小。若是梯度g的二範數||g||大於5,就進行g = 5*g/||g|| 的轉換。
- 爲了解決上面提到的,LSTM橫向1000次是浪費的,但咱們能夠儘量讓同一mini-batch裏的句子長度幾乎相同。這樣是2倍加速效果的。
- 本文的實驗採用8個GPU,其中4個用來處理LSTM的每一層,其他的處理softmax層。
4、實驗結果
一方面實驗直接對本文的模型以及其餘經典模型求BLUE比較,而且對本模型也對不一樣的超參數作了對比。
另外一方面,與統計的機器翻譯模型一塊兒使用,一般會比直接使用RNN得分更高。這樣作的結果以下:
此外,實驗發現,LSTM對長句子表現的更好。
實驗還對針對不一樣句子長度的BLUE得分作了分析:
對不一樣句子的平均詞頻下的BLEU獲得作了分析:
5、結論
本文得出的結論以下:
- 使用LSTM的RNN MT能夠打敗傳統的基於統計的MT—>STM。
- 源句子反轉輸入對於模型提高的幫助很大。這個沒有數學解釋,但一個通俗的理解是:目標句子與源句子開頭的短時聯繫更加緊密了,在一個就翻譯的初期,目標句子開頭翻譯質量的提高,提升了總體翻譯的質量。
6、其餘
還有一些人研究其餘的機制。
- 編碼並不採用RNN,而是使用CNN,這樣編碼的向量/矩陣改變了語序的問題。
- 有些人致力於將RNN結合到傳統的STM中去。
- 有一種注意力機制。這種機制考慮到Encoder可能並不能徹底提取源句子的全部信息,因此使用編碼成向量+生成注意力向量 -> 在解碼的每一步都線性組合出新的條件(源句子信息)。這樣作的好處是在解碼生成每個單詞的過程當中,網絡對源句子中不一樣的單詞更加感興趣,這能夠提升翻譯質量。