本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注。
近日,Facebook 共享了 Caffe2 在支持循環神經網絡(RNN)方面的最新成果。在 Caffe2 RNN 中,最突出的亮點是幾乎零開銷的 RNN 引擎,它不僅可執行任意 RNN 單元且難以置信地靈活,還可以進行束搜索;Caffe2 RNN 還允許每塊 GPU 使用大批量數據進行訓練,並實現了所謂的靜態 RNN。通過 Caffe2 RNN,Facebook 的神經機器翻譯的效率提升高達 2.5x,Facebook 全部的機器翻譯模型從基於短語的系統轉換為所有語言的神經模型。這意味著 Facebook 可在產品中部署神經機器翻譯了。
我們很高興共享 Caffe2 在支持循環神經網絡(RNN)方面的最新成果。今年 4 月推出 Caffe2 時,它並不支持 RNN;為此,在過去的幾個月,我們開發出了當前最優的 RNN 構件以支持 RNN 用例(比如機器翻譯、語音識別)。
通過 Caffe2,我們顯著提升了 Facebook 機器翻譯系統的效率和質量,效率提升達 2.5x,使得 Facebook 可在產品中部署神經機器翻譯。因此,Facebook 全部的機器翻譯模型從基於短語的系統轉換為所有語言的神經模型。此外,還有若干個產品團隊,包括語音識別和廣告排名團隊在內,已經開始使用 Caffe2 訓練 RNN 模型。
我們邀請了機器學習工程師和研究者體驗 Caffe2 對 RNN 的支持,下面是更多關於 RNN 支持的實現和開源細節:
Caffe2 RNN 的獨特特徵
Caffe2 提供了一個通用的 RNN 庫,其中 RNN 引擎是用於執行任意 RNN 單元(cell)的幾乎零開銷的虛擬框;在底層,一個單元就是一個袖珍版的 Caffe2,具備 Caffe2 所有的主要性能。同樣還有一組豐富的 API,允許人們使用現有的 RNN 單元,並可通過 Python 部署新單元。MultiRNNCell 允許將現有單元輕鬆組合成更複雜的單元。例如,你可以整合 LSTMCell 的若干個層,然後將 AttentionCell 放到頂部。
RNN 引擎難以置信地靈活。它允許你選擇哪些輸出有梯度,並需要通過時間傳播;允許你定義單元彼此連接的方式,以及如何與外在世界相連接。每一個輸入接收到了通過時間傳播回來的正確梯度。
除了零開銷的引擎之外,Caffe2 RNN 的另一個核心優勢是內存,它允許我們每塊 GPU 都使用大批量數據進行訓練。RNN 引擎支持回收跨時間步的中間結果,並使你有權力決定要回收什麼。關於計算的交易內存的更多分析細節請參閱 https://arxiv.org/abs/1606.03401。
在上圖中,後向傳遞的中間結果可以跨時間步重複使用。前向結果如果需要重複使用,則需要在後向傳遞中重新計算。Caffe2 允許你指定要丟棄的前向 blob 對象以節省計算資源。
靜態 RNN
Caffe2 也實現了所謂的靜態 RNN。它可以在序列長度已知的情況下通過時間反向傳播來使用。另外,循環網絡也成為了圖形的一部分,這可以讓全局神經網絡執行器 DAGNet 找到最佳的 RNN 並行執行方式。靜態 RNN 引擎支持所有現有的 RNNCell,幾乎無需更改代碼即可插入使用。在多層 LSTM 模型中,我們可以看到靜態 RNN 的速度比動態 RNN 高出 25%。
用於束搜索的 RNN 引擎
開發團隊遵循在機器翻譯中常見的在解碼時使用束搜索(beam search)來提高模型輸出預測表現的方法。我們使用 Caffe2 中 RNN 抽象的泛化性能來直接實現束搜索——使用單一前向網絡計算(single forward network computation),這樣可以提供快速而有效率的推理。無論底層模型的架構如何(RNN、CNN……),束搜索都可以作為循環網絡解碼器使用。束搜索推斷功能已在 Caffe2 庫中提供。
主頁: https://caffe2.ai/GitHub: https://github.com/caffe2/caffe2Facebook: https://facebook.com/Caffe2AI
為了提高翻譯質量,Facebook 近日決定將所有產品中基於短語的機器翻譯模型轉換成神經網絡翻譯系統。該公司稱,目前所有業務中,每天會收到 2000 種翻譯方向(translation direction),約 45 億個翻譯請求。新模型將提供更為準確和流暢的翻譯,改善 Facebook 產品的用戶體驗。
帶有注意力機制的序列到序列 LSTM:結合上下文
我們之前的基於短語的統計技術很有用,但也有其局限性。基於短語的系統最主要的缺點是它們將句子拆分成獨立的單詞或詞組,系統在輸出翻譯結果時一次只考慮幾個單詞。這使得詞序差別顯著的語言間的翻譯非常困難。為改進該系統、構建我們的神經網絡系統,我們開始使用一種循環神經網絡,叫作帶有注意力機制的序列到序列 LSTM(長短期記憶)。該網絡可以考慮到源語言句子的上下文和已經生成的所有內容,以創建更準確、流暢的譯文。該網絡允許長距調序,正如在英語和土耳其語翻譯中遇到的那樣。我們來看一下基於短語的土耳其語-英語翻譯系統輸出的譯文:
再比較一下基於新型神經網絡的土耳其語-英語翻譯系統輸出的譯文:
我們看到,新系統在所有語言對上的 BLEU 值與基於短語的系統相比平均增長了 11 個百分點。
解決未知單詞
在許多案例中,原句子中的單詞並沒有直接對應於目標詞彙表中的翻譯。這種情況下,神經系統將為未知單詞生成佔位符。所以我們採用注意力機制在源單詞和目標單詞中產生軟對齊,從而將單詞彙傳遞到目標句子中。然後,我們從使用訓練數據構建的雙語詞典中查找該單詞的翻譯,並替代目標句子中的未知詞。這個方法要比使用傳統詞典的方法更加魯棒,特別是對於有噪聲的輸入。例如,在英語到西班牙語的翻譯中, 我們能夠將"tmrw(tomorrow)"翻譯為「maana」。雖然添加一個詞典在 BLEU 分值上只有少量的提升,但是它令人們在 Facebook 翻譯上有更高的評分。
詞彙量簡化
典型的神經機器翻譯模型會計算所有單詞在目標詞彙表中的概率分布。該分布包含的單詞量越大,計算所用的時間就越多。我們使用一種詞彙量簡化(vocabulary reduction)的建模技術在訓練和推理時間上修正該問題。通過詞彙量簡化,我們將目標詞彙中最常出現的單詞與給定句子單個詞彙的一組可能翻譯相結合,以減少目標詞彙的大小。過濾目標詞彙會減少輸出映射層的大小,這有助於使計算更快,而且不會使質量降低太多。
模型調參
神經網絡基本上總是具有可調整的參數以控制模型的學習速率等模型性質。選擇這些超參數的最優集非常有益於性能的提升。然而,調參對於大規模機器翻譯提出了重大的挑戰,因為具有獨特超參數的唯一模型才能表徵一個翻譯方向。因為每個模型的最優值可能不同,因此我們必須獨立地對生產中的每個系統進行超參數調整。我們在數月內進行了數千次端對端翻譯實驗,並利用 FBLearner Flow 平臺微調超參數(如學習速率,注意力類型和集成大小等)。這對一些系統有重大影響。比如說我們僅基於調優模型超參數就可以令英語到西班牙語的 BLEU 分值相對提高了 3.7%。
使用 Caffe2 調整神經機器翻譯的規模
向神經系統過渡的一個挑戰是使模型運行的速度和效率適用於 Facebook 的規模。我們在深度學習框架 Caffe2 中實現了該翻譯系統。Caffe2 追根溯源和靈活的本質使得我們可以在我們的 GPU 和 CPU 平臺上進行訓練和推斷時,能夠調整翻譯模型的性能。
對於訓練,我們實現了記憶優化,如 blob 循環(blob recycling)和 blob 再計算(blob recomputation),幫助我們訓練更大規模的數據,更快地完成訓練。關於推斷,我們使用專門的向量數學庫和加權量化來提高計算效率。現有模型的早期基準顯示能夠支持 2000 多個翻譯方向的計算資源已經相當高了。但是,Caffe2 的靈活性本質和已經實現的優化使我們在效率上實現了 2.5x 的提升,這使得我們可以將神經機器翻譯應用到產品中。
我們在解碼時間使用束搜索來改善我們對模型輸出的最高似然句子的評估,這是機器翻譯中的常見做法。我們利用 RNN 抽象在 Caffe2 中的泛化性能來實現束搜索,將其作為單一前向網絡計算,以獲得快速高效的推斷。
在整個過程中,我們開發了 RNN 構件,如 LSTM、乘法積分 LSTM(multiplicative integration LSTM)、注意力機制。我們很高興能夠將該技術作為 Caffe2 的一部分來分享,以及和開源社區共享我們的研究成果。
正在進行的工作
實現從基於短語的翻譯系統向神經機器翻譯的轉變是我們向每個用戶提供在 Facebook 上使用常用語言的經歷的裡程碑。我們將繼續擴展神經機器翻譯技術的邊界,向每一個使用 Facebook 的用戶提供更高質的翻譯。