章要點:網絡
谷歌分別研究了編碼 - 解碼模型中的每一個模型設計因素,以隔離它們的影響。架構
編碼 - 解碼網絡設計因素,諸如向量表示、編碼器和解碼器的深度,以及注意力機制等,及推薦設置和實驗結果。app
一組基本模型的設計思路,能夠用做你本身的 sequence-to-sequence 項目的起點。分佈式
神經機器翻譯的編碼 - 解碼模型ide
遞歸神經網絡的編碼 - 解碼結構取代了傳統的基於短語的統計機器翻譯系統,取得了目前最好的結果。性能
谷歌目前在谷歌翻譯服務中使用的核心技術即是來自於他們 2016 年的論文《Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation(谷歌神經機器翻譯系統:縮小人類與機器翻譯的差距)》。學習
論文連接:https://arxiv.org/abs/1609.08144測試
這種結構的一個問題是模型很大,須要很是大的數據集來訓練。這就意味着模型訓練每每須要數天或數週的時間,而且會消耗大量的計算資源。所以,不多有人研究不一樣設計因素對模型以及對模型的性能會帶來怎樣的影響。優化
Denny Britz 在 2017 年的論文《Massive Exploration of Neural Machine Translation Architectures(關於神經機器翻譯架構的大規模探索)》中強調了這一問題。他們設計了一個標準的英語 - 德語翻譯任務的基線模型,列舉了一組不一樣的模型設計選擇,並描述了它們對模型表現的影響。他們稱完整的實驗消耗了超過 250000 小時的 GPU 計算,能夠說是使人印象深入的。ui
論文連接:https://arxiv.org/abs/1703.03906
「咱們報告了來自幾百次實驗運行的結果與變異數,這幾百次實驗即 GPU 上運行超過 250000 小時的標準 WMT 數據集英語到德語的翻譯任務。咱們的實驗爲構建和擴展 NMT 結構帶來了新的看法和實用建議。」
在這篇文章中,咱們也會介紹上述論文中的一些發現,咱們能夠借鑑他們的結果來調整咱們本身的神經機器翻譯模型,以及通常的 sequence-to-sequence 模型。
想了解編碼 - 解碼結構和注意力機制的更多背景,請閱讀下列文章:
Encoder-Decoder Long Short-Term Memory Networks(編碼 - 解碼長短時記憶網絡)
https://machinelearningmastery.com/encoder-decoder-long-short-term-memory-networks/
Attention in Long Short-Term Memory Recurrent Neural Networks(長短時記憶循環神經網絡的注意力機制)
https://machinelearningmastery.com/attention-long-short-term-memory-recurrent-neural-networks/
基線模型
咱們首先介紹全部實驗中所用的基線模型。模型的基準配置以下,使其能較好地執行翻譯任務。
向量表示(Embedding):512 維
RNN 單元:門控循環單元(Gated Recurrent Unit,GRU)
編碼器:雙向
編碼器深度:2 層(每一個方向各一層)
解碼器深度:2 層
注意力機制:Bahdanau 提出的注意力機制
優化器:Adam
丟棄:輸入的 20%
NMT 編碼 - 解碼模型
每一個實驗都由基線模型開始,每次改動一個因素以隔離其餘設計因素對模型性能的影響,以 BLEU 得分做爲評價標準。
向量表示的維度
向量表示(word-embedding),顧名思義,每個輸入編碼器的單詞都有一個對應的向量(每每是低維的)表示。
這是一個分佈式表示,每一個單詞被映射到一個固定大小的連續值向量。這種方法的好處是,具備類似含義的不一樣詞語會有類似的表示。
這種分佈式表示一般是在模型擬合數據的過程當中學習獲得的。向量表示的維度指用來表示單詞的向量的長度。通常認爲,向量的維度越大,其表現力越強,從而也能使模型有更好的性能。
有趣的是,結果代表,向量維度最大的實驗確實取得了最好的結果,可是增長維度所帶來的模型提高較小。
「【結果代表】2048 維的向量表示能產生最好的結果,它們只獲得了很小的提高。即便小到 128 維的向量表示也能取得驚人的結果,並且收斂速度是高維向量的兩倍。」
推薦設置:實驗開始用小向量,例如 128 維,隨後能夠考慮增長向量表示維度來略微提高模型性能。
RNN 單元類型
有三種經常使用的 RNN 單元:
簡單 RNN
長短時記憶(LSTM)
門控循環單元(GRU)
簡單 RNN 會出現梯度消失問題,從而限制了網絡較深的 RNN 的訓練,LSTM 是針對該問題而設計的。GRU 的出現是爲了簡化 LSTM。
實驗結果代表,GRU 和 LSTM 的表現明顯優於簡單的 RNN,但一般 LSTM 表現最佳。
「實驗中,LSTM 單元的性能始終優於 GRU 單元。」
推薦設置:在模型中使用 LSTM 單元。
解碼 - 編碼網絡深度
通常來講,較深的網絡比淺層網絡性能更好。
關鍵是要在網絡深度、模型性能和訓練時長之間找到一個平衡點。這是當性能表現的提高成爲次要因素時,網絡一般已經達到足夠的深度,而咱們一般沒有這樣的資源來訓練很是深的網絡。
對於編碼器來講,研究人員發現網絡深度對於性能並無很大的影響,更使人驚訝的是,1 層雙向模型的表現比 4 層雙向模型還要稍好一些。兩層雙向編碼器比其餘配置的測試稍微好一些。
「咱們沒有發現明確的證據代表編碼器的深度有必要超過 2 層。」
推薦設置:使用 1 層雙向編碼器,若是想要性能稍有提高,能夠擴展至 2 層雙向編碼器。
解碼器也符合相似的規律。一、二、4 層解碼器之間的性能只是略有不一樣,4 層解碼器略微好些。在測試條件下,8 層解碼器出現了不收斂的狀況。
「在解碼器方面,更深的模型以較小的優點賽過較淺的網絡。」
推薦設置:用 1 層解碼器做爲出發點,並利用 4 層解碼器得到更好的結果。
編碼器輸入序列順序
源文本序列的順序能夠經過多種方式提供給編碼器:
前向(普通)
反向
同時前向和反向
做者探討了不一樣輸入序列順序的狀況下,單向和雙向配置對模型性能的影響。
他們證明了先前的研究,即倒序輸入比正序輸入更好,並且雙向編碼器比單向倒序輸入稍微好一些。
「雙向編碼器通常優於單向編碼器,但幅度不是很大。輸入文本倒序的編碼器始終優於正序的編碼器。」
推薦設置:使用倒序輸入,或者用雙邊編碼器來提高模型性能。
注意力機制
注意力機制是對模型的一種改進,使得解碼器在輸出每一個單詞時,對輸入序列的不一樣詞語「賦予不一樣的注意力」。
做者研究了簡單注意力機制的一些變體。結果代表,加入注意力機制的模型比不加註意力機制的模型性能有驚人的提高。
「雖然咱們確實指望基於注意力的模型能顯著優於那些沒有注意力機制的模型,但那些沒有注意力模型的糟糕程度使人感到驚訝。」
Bahdanau 等人在其 2015 年的論文《Neural machine translation by jointly learning to align and translate(聯合學習標定和翻譯的神經機器翻譯)》中所描述的簡單的加權平均注意力機制是目前實驗結果最好的。
推薦設置:使用注意力機制,而且最好是用 Bahdanau 提出的加權平均法。
推斷
在神經機器翻譯系統中,經常使用束搜索(beam-search)來採樣模型輸出單詞的機率。束寬度越寬,搜索就越完全,你們廣泛認爲結果也越好。實驗結果代表,束寬度爲 3-5 的性能最好,經過長度懲罰只能獲得很小的提高。做者建議根據每一個具體問題調整束寬度。
「咱們發現,一個好的束搜索是取得好結果的關鍵,並且它帶來的 BLEU 分數提高不止一個點。」
推薦設置:從貪婪搜索開始(beam= 1),並根據問題進行微調。
最終模型
做者將他們的發現結合起來,造成一個「最佳模型」,並將該模型的結果與其餘性能良好的模型和最早進的結果進行比較。
下表中總結了該模型的具體設置。當你爲 NLP 應用程序開發本身的編碼 - 解碼模型時,能夠將這些參數做爲一個很好甚至是最好的起點。
最終 NMT 模型參數設置
該系統的實驗結果使人印象深入,做者用更簡單的模型取得了接近目前最早進的結果,而這原本不是論文的目標。
「咱們證實,經過細緻地超參數調整和良好地初始化,能夠在 WMT 基準數據集上達到最早進的性能表現」
重要的是,做者提供了他們全部的代碼做爲開源項目——tf-seq2seq。由於兩位做者是谷歌大腦實習項目的成員,谷歌研究院的博客上發佈了他們的工做:Introducing tf-seq2seq: An Open Source Sequence-to-Sequence Framework in TensorFlow,2017。
深度閱讀
若是您想深刻了解該話題,推薦閱讀下列文章:
Massive Exploration of Neural Machine Translation Architectures,2017
Denny Britz 主頁
WildML 博客
Introducing tf-seq2seq: An Open Source Sequence-to-Sequence Framework in
TensorFlow, 2017
tf-seq2seq: A general-purpose encoder-decoder framework for Tensorflow
tf-seq2seq Project Documentation
tf-seq2seq Tutorial: Neural Machine Translation Background
Neural machine translation by jointly learning to align and translate, 2015.
總結
在這篇文章中,咱們介紹瞭如何配置編碼 - 解碼遞歸神經網絡的參數,使其在神經機器翻譯和其餘天然語言處理任務中取得更好的性能。