Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

機器之心報道

編輯:Liyuan、杜偉

自提出至今,Transformer 模型已經在自然語言處理、計算機視覺以及其他更多領域「大展拳腳」,學界也提出了各種各樣基於原始模型的變體。但應看到,學界依然缺少系統全面的 Transformer 變體文獻綜述。復旦大學邱錫鵬教授團隊的這篇綜述正好彌補了這一空缺。

自 2017 年 6 月谷歌釋出論文《Attention is All You Need》後,Transformer 架構為整個 NLP 領域帶來了極大的驚喜。在誕生至今僅僅四年的時間裡,Transformer 已經成為自然語言處理領域的主流模型,基於 Transformer 的預訓練語言模型更是成為主流。

隨著時間的推移,Transformer 還開始了向其他領域的跨界。得益於深度學習的發展,Transformer 在計算機視覺(CV)和音訊處理等許多人工智慧領域已然殺瘋了,成功地引來了學界和業界研究人員的關注目光。到目前為止,研究者已經提出了大量且種類駁雜的 Transformer 變體(又名 X-former),但是仍然缺失系統而全面的 Transformer 變體文獻綜述。

去年,谷歌釋出的論文《Efficient Transformers: A Survey》對高效 Transformer 架構展開了綜述,但主要關注 attention 模組的效率問題,對 Transformer 變體的分類比較模糊。

近日,復旦大學計算機科學技術學院邱錫鵬教授團隊對種類繁多的 X-former 進行了綜述。首先簡要介紹了 Vanilla Transformer,提出 X-former 的新分類法。接著從架構修改、預訓練和應用三個角度介紹了各種 X-former。最後概述了未來研究的一些潛在方向。

論文連結:https://arxiv。org/pdf/2106。04554。pdf

回顧 Transformer 的發展

Transformer 最初是作為機器翻譯的序列到序列模型提出的,而後來的研究表明,基於 Transformer 的預訓練模型(PTM) 在各項任務中都有最優的表現。因此,Transformer 已成為 NLP 領域的首選架構,尤其是 PTM。除了語言相關的應用,Transformer 還被用於 CV、音訊處理,甚至是化學和生命科學。由於取得了成功,過去幾年研究者又提出了各種 Transformer 變體(又名 X-former)。這些 X-former 主要從以下三個不同的角度改進了最初的 Vanilla Transformer

模型效率。應用 Transformer 的一個關鍵挑戰是其處理長序列時的效率低下,這主要是由於自注意力(self-attention)模組的計算和記憶體複雜度。改進的方法包括輕量級 attention(例如稀疏 attention 變體)和分而治之的方法(例如迴圈和分層機制);

模型泛化。由於 Transformer 是一種靈活的架構,並且對輸入資料的結構偏差幾乎沒有假設,因此很難在小規模資料上進行訓練。改進方法包括引入結構偏差或正則化,對大規模未標記資料進行預訓練等;

模型適配。這一系列工作旨在使 Transformer 適應特定的下游任務和應用程式。

雖然可以根據上述角度來組織 X-former,但許多現有的 X-former 可能會解決一個或幾個問題。例如,稀疏 attention 變體不但降低了計算複雜度,而且在輸入資料上引入了結構先驗以緩解小資料集上的過度擬合問題。因此,主要根據 X-former 改進 Vanilla Transformer 的方式進行分類更加有條理:架構修改、預訓練和應用。考慮到本次綜述的受眾可能來自不同的領域,研究者主要關注的是通用架構變體,僅簡要討論了預訓練和應用方面的具體變體。

Vanilla Transformer

架構

Vanilla Transformer 是一個序列到序列的模型,由一個編碼器和一個解碼器組成,二者都是相同的塊 組成的堆疊。每個編碼器塊主要由一個多頭 self-attention 模組和一個位置前饋網路(FFN)組成。為了構建更深的模型,每個模組周圍都採用了殘差連線,然後是層歸一化模組。與編碼器塊相比,解碼器塊在多頭 self-attention 模組和位置方面 FFN 之間額外插入了 cross-attention 模組。此外,解碼器中的 self-attention 模組用於防止每個位置影響後續位置。Vanilla Transformer 的整體架構如下圖所示:

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

用法

通常有三種不同的方式使用 Transformer 架構:

使用編碼器 - 解碼器,通常用於序列到序列建模,例如神經機器翻譯;

僅使用編碼器,編碼器的輸出用作輸入序列的表示,通常用於分類或序列標記問題;

僅使用解碼器,其中也移除了編碼器 - 解碼器 cross-attention 模組,通常用於序列生成,例如語言建模。

Transformer 變體的的分類

截止目前,領域研究人員從架構修改型別、預訓練方法和應用這三個方面提出了各種基於 vanilla Transformer 的變體模型。下圖顯示了 這些變體模型的類別:

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

而下圖顯示了本文研究者的分類和一些代表性模型:

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

Attention 模組

Self-attention 在 Transformer 中非常重要,但在實際應用中存在兩個挑戰:

複雜度。self-attention 的複雜度為 O(T^2·D)。因此,attention 模組在處理長序列時會遇到瓶頸;

結構先驗。Self-attention 對輸入沒有假設任何結構性偏差,甚至指令資訊也需要從訓練資料中學習。因此,無預訓練的 Transformer 通常容易在中小型資料集上過擬合。

Attention 機制的改進可以分為以下幾個方向:

稀疏 attention。將稀疏偏差引入 attention 機制可以降低了複雜性;

線性化 attention。解開 attention 矩陣與核心特徵圖,然後以相反的順序計算 attention 以實現線性複雜度;

原型和記憶體壓縮。這類方法減少了查詢或鍵值記憶對的數量,以減少注意力矩陣的大小;

低階 self-Attention。這一系列工作捕獲了 self-Attention 的低階屬性;

Attention 與先驗。該研究探索了用先驗 attention 分佈來補充或替代標準 attention;

改進多頭機制。該系列研究探索了不同的替代多頭機制。

稀疏 attention

在標準的 self-attention 機制中,每個 token 都需要 attend 所有其他的 token。然而,據觀察,對於經過訓練的 Transformer,學習到的 attention 矩陣 A 在大多數資料點上通常非常稀疏。因此,可以透過結合結構偏差來限制每個查詢 attend 的查詢鍵對的數量來降低計算複雜度。

從另一個角度來看,標準 attention 可以被視為一個完整的二部圖,其中每個查詢從所有記憶體節點接收資訊並更新其表示。而稀疏 attention 可以看成是一個稀疏圖,其中刪除了節點之間的一些連線。基於確定稀疏連線的指標,研究者將這些方法分為兩類:基於位置和基於內容的稀疏 attention。

原子稀疏 attention

基於位置的稀疏 attention 之一是原子稀疏 attention,如下圖所示主要有五種模式。彩色方塊表示計算的 attention 分數,空白方塊表示放棄的 attention 分數。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

複合稀疏 attention

而另一種基於位置的稀疏 attention 是複合稀疏 attention,下圖顯示了其五種主要模式,其中紅色框表示序列邊界。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

擴充套件稀疏 attention

除了上述模式,一些現有的研究已經針對特定資料型別探索了擴充套件稀疏模式。下圖(a)展示了全域性 attention 擴充套件的抽象檢視,其中全域性節點是分層組織的,任何一對 token 都與二叉樹中的路徑相連。紅色框表示查詢位置,橙色節點 / 方塊表示查詢關注相應的 token。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

還有一些視覺資料的擴充套件。Image Transformer 探索了兩種型別的 attention:

按光柵掃描順序展平影象畫素,然後應用塊區域性稀疏 attention;

2D 塊區域性 attention,其中查詢塊和記憶體塊直接排列在 2D 板中,如上圖 (b) 所示。

視覺資料稀疏模式的另一個例子,Axial Transformer 在影象的每個軸上應用獨立的 attention 模組。每個 attention 模組沿一個軸混合資訊,同時保持另一個軸的資訊獨立,如上圖 (c) 所示。這可以理解為按光柵掃描順序水平和垂直展平影象畫素,然後分別應用具有影象寬度和高度間隙的跨步 attention。

線性化 attention

下圖顯示了標準 self-attention 和線性化 linear-attention 的複雜度區別。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

查詢原型和記憶體壓縮

除了使用稀疏 attention 或基於核心的線性化 attention 之外,還可以透過減少查詢或鍵值對的數量來降低 attention 的複雜度,這分別引向了查詢原型和記憶體壓縮的方法。

在查詢原型設計中,幾個查詢原型作為計算 attention 分佈的主要來源。該模型要麼將分佈複製到表示的查詢的位置,要麼用離散均勻分佈填充這些位置。

下圖 (a) 說明了查詢原型的計算流程。除了透過查詢原型減少查詢數量外,還可以透過在應用 attention 機制之前減少鍵值對的數量(壓縮鍵值記憶體)來降低複雜度,如下圖(b)所示。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

先驗 attention

Attention 機制通常將預期值輸出為向量的加權和,其中權重是值上的 attention 分佈。傳統上,分佈是從輸入生成的,例如 Vanilla Transformer 中的 softmax(QK⊤)。一般情況下,attention 分佈也可以來自其他來源,也就是先驗。先驗注意力分佈可以補充或替代輸入產生的分佈。Attention 的這種表述可以抽象為具有先驗 attention,如下圖所示。在大多數情況下,兩個 attention 分佈的融合可以透過在應用 softmax 之前計算對應於先驗 attention 和生成 attention 的分數的加權和來完成。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

改進的多頭機制

多頭 attention 的吸引力在於能夠共同 attend 來自不同位置的不同表示子空間的資訊。然而,沒有機制可以保證不同的 attention 頭確實地捕捉到不同的特徵。

如下圖所示,多頭機制下三種跨度遮蔽函式()。橫軸代表距離,縱軸代表掩碼值。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

其他模組級修改

位置的重要性

驗證卷積和迴圈網路不是置換等變是很簡單的。然而,Transformer 中的 self-attention 模組和位置前饋層都是置換等變的,這在建模問題時可能是一個問題。例如,在對文字序列建模時,單詞的順序很重要,因此在 Transformer 架構中正確編碼單詞的位置至關重要。因此,需要額外的機制將位置資訊注入到 Transformer 中。一種常見的設計是首先使用向量表示位置資訊,然後將向量作為附加輸入注入模型。

層的歸一化

層歸一化 ( Layer Normalization, LN) 以及殘差連線被認為是一種穩定深度網路訓練的機制(如減輕不適定梯度和模型退化)。在 Vanilla Transformer 中,LN 層位於殘差塊之間,被稱為 post-LN 。後來的 Transformer 實現將 LN 層放在 attention 或 FFN 之前的殘差連線內,在最後一層之後有一個額外的 LN 來控制最終輸出的大小,即 pre-LN。Pre-LN 已被許多後續研究和實現所採用。pre-LN 和 post-LN 的區別如下圖所示。

Transformer模型有多少種變體?復旦邱錫鵬教授團隊做了全面綜述

位置方面的 FFN

儘管很簡單,但位置前饋網路 (feed-forward network, FFN) 層對於 Transformer 實現良好效能至關重要。研究者觀察到簡單地堆疊 self-attention 模組會導致等級崩潰問題以及 token 均勻性歸納偏差,而前饋層是緩解此問題的重要構建塊之一。本節探索了研究者對 FFN 模組的修改。

架構級修改

在本章中,研究者介紹了架構層面的 X-former 變體模型。

輕量級 Transformer

除了在模組層面為減輕計算開銷所做的努力外,領域內還出現了一些在更高層面進行修改的輕量級 Transformer 模型,如 Lite Transformer、Funnel Transformer 和 DeLighT。

Strengthening Cross-Block Connectivity

在 deep Transformer 編碼器 - 解碼器模型中,解碼器中的 cross-attention 模組僅利用編碼器的最終輸出,因此誤差訊號必須沿著編碼器的深度進行遍歷。這使得 Transformer 更易於受到梯度消失等最佳化問題的影響。

Transparent Attention [8] 使用每個 cross-attention 模組中所有編碼器層(包括嵌入層)上的編碼器表示的加權和。對於第 j 個編碼器塊,cross-attention 應表示如下:

Feedback Transformer[34] 提出在 Transformer 解碼器新增反饋機制,其中每個位置均關注來自所有層的歷史表示的加權和:

自適應計算時間

與大多數神經模型一樣,Vanilla Transformer 使用固定(學習的)計算程式來處理每個輸入。一個有趣且有發展潛力的修改是使計算時間以輸入為條件,即在 Transformer 模型中引入自適應計算時間(Adaptive Computation Time, ACT)。

如下圖 12(a)所示,Universal Transformer (UT) 結合了深度迴圈(recurrence-over-depth)機制,該機制使用一個在深度上共享的模組來迭代地改進所有符號的表示;圖 12(b)中,Conditional Computation Transformer (CCT) 在每個自注意力和前饋層新增一個門控模組來決定是否跳過當前層;圖 12(c)中,與 UT 中使用的動態停機機制類似,有一條工作線專門用於調整每個輸入的層數以實現良好的速度 - 準確率權衡,這稱為「提前退出機制」(early exit mechanism)。

利用「分而治之」策略的 Transformer

自注意力對序列長度的二次複雜度會顯著限制一些下游任務的效能。研究者確定了兩類有具有代表性的方法,分別是迴圈和層級 Transformer,具體如下圖 13 所示

在迴圈 Transformer 中,維護一個快取記憶體(cache memory)用來合併歷史資訊。在處理一段文字時,該網路從快取中的讀取作為額外輸入。處理完成後,網路透過簡單地複製隱藏狀態或使用更復雜的機制來寫入記憶體。

層級 Transformer 將輸入分層分解為更細粒度的元素。低階特徵首先被饋入到 Transformer 編碼器,產生輸出表示,然後使用池化或其他操作來聚合以形成高階特徵,然後透過高階 Transformer 進行處理。