0
雷鋒網 AI 科技評論按:NLP 任務中具有標桿意義的 Transformer 模型喜提新升級,不僅翻譯表現進一步提升,更成為了圖靈完備的通用計算模型。
在過去的兩三年中,注意力機制(Attention Mechanism)逐漸進入深度學習研究人員們的視野中,并開始變得熱門。去年 6 月,谷歌大腦在論文《Attention Is All You Need》中提出了一個完全基于注意力機制的編解碼器模型 Transformer ,它完全拋棄了之前其它模型引入注意力機制后仍然保留的循環與卷積結構,然后在任務表現、并行能力和易于訓練性方面都有大幅的提高。Transformer 從此也成為了機器翻譯和其它許多文本理解任務中的重要基準模型。一年多之后的今天,谷歌大腦團隊在新的論文 arxiv.org/abs/1807.03819 中提出了 Transformer 的升級模型「Universal Transformer」,并在博客撰文對其作了介紹。雷鋒網 AI 科技評論把博文內容編譯如下。

在 Transformer 出現之前,基于神經網絡的機器翻譯模型多數都采用了 RNN(循環神經網絡)的模型架構,它們依靠循環功能(每一步的輸出都要作為下一步的輸入)進行有序的序列操作(句子中的單詞按照順序一個接一個地被翻譯)。雖然 RNN 架構有較強的序列建模能力,但它們有序操作的天然屬性也意味著它們訓練起來很慢、越長的句子就需要越多的計算步驟,而且循環的架構也給它們留下了流傳千里的「很難訓練好的」壞名聲。
與這些基于 RNN 的方法形成鮮明對比的是,Transformer 模型中沒有任何循環結構。它的設計是把序列中的所有單詞或者符號并行處理,同時借助自注意力機制可以從距離較遠的詞中提取含義。由于 Transformer 并行處理所有的詞,以及每個單詞都可以在多個處理步驟內與其他單詞之間產生聯系,它的訓練速度也要比 RNN 模型快多了。尤其值得一提的是,它在翻譯任務中的表現要比 RNN 模型好很多。然而,在更小、更結構化的語言理解任務中,甚至更簡單的算法任務中,比如復制一個字符串(輸入字符串「abc」,要求輸出「abcabc」), Transformer 的表現就不怎么好。在這些任務中表現較好的模型,比如 Neural GPU 和 Neural Turing Machine,反倒是在翻譯這樣的大規模語言理解任務中表現糟糕。
在新論文「Universal Transformers」中,谷歌大腦的研究人員們對標準的 Transformer 模型進行了拓展,讓它具有通用計算能力(也就是「圖靈完備」)。他們使用了一種新型的、注重效率的時間并行循環結構,并在更多任務中取得了有力的結果。他們保留了 Transformer 模型原有的并行結構,以便保持它的高訓練速度,然后把 Transformer 一組幾個各異的固定的變換函數替換成了一組由單個的、時間并行的循環變換函數構成的結構(也就是說,在多個處理步驟中,同一個學到的變換函數可以并行作用于序列內的所有符號,同時每一步的輸出都成為下一步的輸入)。其中有個關鍵點是,相比于 RNN 處理序列的方式是一個符號接著一個符號從左至右依次處理,Universal Transformer 和 Transformer 一樣地一次同時處理所有的符號,但 Universal Transformer 接下來會根據自我注意力機制對每個符號的解釋做數次并行的循環處理修飾。Universal Transformer 中時間并行的循環機制不僅比 RNN 中使用的串行循環速度更快,也讓 Universal Transformer 比標準的前饋 Transformer 更加強大。

在每個步驟中,每一個符號(比如句子中的一個詞)的信息都可以借助自我注意力機制與所有其他的符號進行溝通,就和原本的 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 確實可以在序列復制、倒序輸出、整數加法之類的任務中取得比 Transformer 以及 RNN 好得多的表現(雖然比 Neural GPU 模型還是要差那么一點)。更進一步地,在一組各有不同的有挑戰的語言理解任務中,Universal Transformer 的泛化性有大幅提升,在 bAbl 語言學推理任務和極具挑戰的 LAMBADA 語言建模任務中都取得了新的最好成績記錄。當然了,最有意思的大概還是在語言翻譯任務中,相比于具有同樣參數數目、同樣訓練方式、同樣訓練數據的基準 Transformer,Universal Transformer 的翻譯質量可以提高 0.9 BLEU。0.9 BLEU的提升具體是多大呢,當原本的 Transformer 去年發表的時候,它相比更早的模型就有 2.0 BLEU 的表現提升,這基本上就是把提升的分數繼續增加了 50%。
那么,Universal Transformer 就這樣兼具了大規模語言理解任務上的實用序列處理模型(比如機器翻譯模型)以及 Neural GPU 和 Neural Turing Machine 這樣的通用計算模型(它們可以通過梯度下降訓練用來執行任意的算法任務)的優點。谷歌大腦對于時間并行序列處理模型的近期發展抱有充分的熱情,且,除了拓展模型的計算容量以及在高深度的處理中增加循環之外,他們也希望更多的研究人員可以對這次提出的 Universal Transformer 的基礎結構提出更多的改進,整個社區共同構建出更強大、更數據高效、在當前的成績之外取得更多泛化成果的模型。
Universal Transformer 的訓練和評估代碼已開源在 Tensor2Tensor 目錄:http://t.cn/RkvRgjU
論文地址:https://arxiv.org/abs/1807.03819
via ai.googleblog.com,雷鋒網 AI 科技評論編譯
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。