利用 Universal Transformer,翻譯將無往不利!

文 / Google Brain Team 的研究科學家 Stephan Gouws、阿姆斯特丹大學的 Mostafa Dehghani 博士生、谷歌研究實習生git

來源 | 谷歌開發者公衆號github

去年,咱們發佈了 Transformer,這是一種新的機器學習模型,相較現有的機器翻譯算法和其餘語言理解任務,成效卓著。 在 Transformer 以前,大多數基於神經網絡的機器翻譯方法依賴於循環運算的遞歸神經網絡(RNN),它們使用循環(即每一步的輸出都進入下一步)按遞歸順序運行(例如,逐字翻譯句中的單詞)。 雖然 RNN 在建模序列方面很是強大,但它們的順序性本質意味着它們訓練起來很是緩慢,由於長句須要更多的處理步驟,而且其繁複循環的結構也使訓練難上加難。算法

相較於基於 RNN 的方法,Transformer 不須要循環,而是並行處理序列中的全部單詞或符號,同時利用自醒機制將上下文與較遠的單詞結合起來。 經過並行處理全部單詞,並讓每一個單詞在多個處理步驟中處理句子中的其餘單詞,使 Transformer 的訓練速度比起復制模型要快得多。 值得注意的是,與此同時其翻譯結果也比 RNN 好得多。 然而,在更小、更結構化的語言理解任務中,或是簡單的算法任務諸如複製字符串(例如,將 「abc」 的輸入轉換爲 「abcabc」)上,Transformer 則表現欠佳。 相比之下,在這方面表現良好的模型,如神經 GPU 和神經圖靈機,在大規模語言理解任務(如翻譯)中潰不成軍。markdown

在《Universal Transformer》一文中,咱們使用新穎高效的時間並行循環方式將標準 Transformer 擴展爲計算通用(圖靈完備)模型,從而可在更普遍的任務中產生更強的結果。咱們將模型創建在 Transformer 的並行結構上,以保持其快速的訓練速度。可是咱們用單一的時間並行循環的變換函的屢次應用代替了 Transformer 中不一樣變換函數的固定堆疊(即,相同的學習轉換函數在多個處理步驟中被並行應用於全部符號,其中每一個步驟的輸出饋入到下一個步驟中)。關鍵在於,RNN 逐個符號(從左到右)處理序列,而 Universal Transformer 同時處理全部符號(像 Transformer 同樣),隨後使用自醒機制在可變數量的狀況下並行地對每一個符號的解釋進行細化。 這種時間並行循環機制比 RNN 中使用的順序循環更快,也使得 Universal Transformer 比標準前饋 Transformer 更強大。網絡

Universal Transformer 模型經過自醒機制結合不一樣位置的信息,應用循環轉換函數,以並行化方式重複爲序列的每一個位置細化一系列向量表徵(顯示爲 h1 到 hm)。 箭頭表示操做之間的依賴關係

在每一個步驟中,利用自醒機制將信息從每一個符號(例如,句中的單詞)傳遞到其餘符號,就像在原始 Transformer 中同樣。 可是,如今這種轉換的次數(即循環步驟的數量)能夠提早手動設置(好比設置爲某個固定數字或輸入長度),也能夠經過 Universal transformer 自己進行動態設定。 爲了實現後者,咱們在每一個位置都添加了一個自適應計算機制,能夠分配更多處理步驟給較模糊或須要更多計算的符號。機器學習

咱們用一個直觀的例子來講明這是如何起效的,好比 「I arrived at the bank after crossing the river 我穿過河流終於抵達岸邊」 這句話。 在這個案例中,與沒有歧義的 「I 我」 或 「river 河流」 相比,推斷 「bank」 一詞最確切的含義須要用到更多的語景信息。 當咱們使用標準 Transformer 對這個句子進行編碼時,咱們須要把一樣的計算量無條件地應用於每一個單詞。 然而, Universal Transformer 的自適應機制容許模型僅在更模糊的單詞上花費更多的計算,例如, 使用更多步驟來整合消除 「bank」 的歧義所需額外的語境信息,而在那些比較明確的單詞上則花費較少的步驟。函數

起初,讓 Universal Transformer 僅重複應用單一學習函數來處理其輸入彷佛是有限制性的,尤爲是與學習應用固定序列的不一樣函數的標準 Transformer 相比。可是,學習如何重複應用單一函數意味着應用程序的數量(處理步驟)如今是可變的,而這是一個很重要的區別。綜上所述,除了容許 Universal Transformer 對更模糊的符號應用更多的計算以外,它還容許模型根據輸入的總體大小來調整函數應用的數量(更長的序列的更多步驟),或者根據訓練期間學習到的其餘特性來動態地決定將函數應用到輸入的任何給定部分的頻率。這使得 Universal Transformer 在理論意義上更增強大,由於它能夠有效地學習將不一樣的變換應用於輸入的不一樣部分。這是標準 Transformer 沒法作到的事情,由於它是由只應用一次的學習變換塊的固定堆疊組成。oop

儘管 Universal Transformer 在理論上更強大,但咱們也關心實驗性能。咱們的實驗結果證明,Universal Transformers 確實可以從樣本中學習如何複製和反轉字符串,以及如何比 Transformer 或 RNN 更好地執行整數加法(儘管不如神經 GPU 那麼好)。此外,在各類具備挑戰性的語言理解任務中,Universal Transformer 的泛化效果明顯更好,且在 bAbI 語言推理任務和頗有挑戰性的 LAMBADA 語言建模任務上達到了當前最優性能。但或許最使人感興趣的是,Universal Transformer 在與基礎 Transformer 使用相同數量的參數、訓練數據以相同方式進行訓練時,其翻譯質量比後者提升了 0.9 個 BLEU 值。去年 Transformer 發佈時,它的性能比以前的模型提升了 2 個 BLEU 值,而 Universal Transformer 的相對改進量是去年的 50%。性能

所以,Universal Transformer 彌補了大規模語言理解任務(如機器翻譯)上具備競爭力的實際序列模型與計算通用模型(如神經圖靈機或神經GPU)之間的差距,計算通用模型可以使用梯度降低來訓練,用於執行隨機算法任務。 咱們很高興看到時間並行序列模型的最新進展,以及處理深度中計算能力和循環的增長,咱們但願對此處介紹的基本 Universal Transformer 的進一步改進將有助於咱們構建更多,更強大的,更能高效利用數據的算法功能,泛化性能超越當前最優算法。學習

若是您想要親身體驗,能夠在開源的 Tensor2Tensor 存儲庫中找到用於訓練和評估 Universal Transformers 的代碼。 注:代碼連接 github.com/tensorflow/…

鳴謝 執行本項研究的人員 Mostafa Dehghani,Stephan Gouws,Oriol Vinyals,Jakob Uszkoreit 和 Łukasz Kaiser。 另外還要感謝來自 Ashish Vaswani,Douglas Eck 和 David Dohan 富有成效的意見建議和靈感。

相關文章
相關標籤/搜索