文章中首先提到DNN,不能解決sequence2sequence的問題,因爲輸入和輸出固定的,但是對於翻譯等問題,序列的長度是不固定的,這篇文章主要是用了多層的LSTM,把輸入映射到一個固定的維度,然後再用另外一個LSTM,從這固定的向量去還原抽取目標序列。這裏測試場景是採用了英文到法文的翻譯,採用BLEU來度量效果。
1. 模型示意圖
- 輸入是ABC, 輸出是WXYZ
- 當輸出的序列產生之後,就不再進行預測了
2. 模型目標
- x1,...,xT 表示輸入 , y1,...,yt 表示輸出, v是什麼呢?v 就是 將輸入通過LSTM得到的最後一個hidden state , 因爲
最後一個hidden state 包含了整個sequence的信息.
- 需要增加一個sequence的結束符號 <EOS>
- 發現深度的LSTM 模型效果相比shallow的LSTM模型更好,所以用了4層的LSTM
- LSTM是逆向讀取輸入序列,逆向讀取的好處,試驗板塊有一些解釋
3. 試驗
- 數據集
- 英 譯 法 的數據集,共計1200萬句子,包含3.48億個法文單詞,和3.04億個英文單詞
- 對於輸入,除了最常用的16萬個詞之外,其他都定義爲unk,對於輸出,除了最常用的80000個詞外,其他都定義爲unk
- 訓練的目標函數
- 逆向讀取input
- 作者這麼解釋,當我們要把一個詞翻譯成另外一個詞的時候,比如 a,b,c 翻譯成 1,2,3的時候,對於目標1來說,a距離比較遠,相關性也較低,但每個source 和目標詞的平均距離是沒有改變的
- 訓練的細節
- 深度爲4的LSTM,每層1000個單元
- 1000維的embedding,輸入是160000詞庫,輸出是80000個詞庫
- 發現深度的LSTM對perlexity減少近10%,可能是因爲更多的隱層狀態
- LSTM參數的初始化是參數服從[-0.08,0.08]的均勻分佈中抽取
- 用SGD,學習率是0.7,在5個epoch之後,學習率減半,實際上訓練只用了7.5個epoch
- LSTM不會遇到梯度消失的問題,但是會遇到梯度爆炸的問題,會把梯度限制在[10,25]範圍內
- 設置句子長度是固定的
4.結論
- 反向讀取效果比較好
- LSTM對於長句子準確率也高
refer:Sequence to Sequence Learning with Neural Networks Google團隊的