文 / Google Brain Team 的研究科學家 Stephan Gouws、阿姆斯特丹大學的 Mostafa Dehghani 博士生、谷歌研究實習生
來源 | 谷歌開發者公眾號
去年,我們釋出了 Transformer,這是一種新的機器學習模型,相較現有的機器翻譯演算法和其他語言理解任務,成效卓著。 在 Transformer 之前,大多數基於神經網路的機器翻譯方法依賴於迴圈運算的遞迴神經網路(RNN),它們使用迴圈(即每一步的輸出都進入下一步)按遞迴順序執行(例如,逐字翻譯句中的單詞)。 雖然 RNN 在建模序列方面非常強大,但它們的順序性本質意味著它們訓練起來非常緩慢,因為長句需要更多的處理步驟,並且其繁複迴圈的結構也使訓練難上加難。
相較於基於 RNN 的方法,Transformer 不需要迴圈,而是並行處理序列中的所有單詞或符號,同時利用自醒機制將上下文與較遠的單詞結合起來。 通過並行處理所有單詞,並讓每個單詞在多個處理步驟中處理句子中的其他單詞,使 Transformer 的訓練速度比起復制模型要快得多。 值得注意的是,與此同時其翻譯結果也比 RNN 好得多。 然而,在更小、更結構化的語言理解任務中,或是簡單的演算法任務諸如複製字串(例如,將 “abc” 的輸入轉換為 “abcabc”)上,Transformer 則表現欠佳。 相比之下,在這方面表現良好的模型,如神經 GPU 和神經圖靈機,在大規模語言理解任務(如翻譯)中潰不成軍。
在《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 無法做到的事情,因為它是由只應用一次的學習變換塊的固定堆疊組成。
儘管 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 富有成效的意見建議和靈感。