2021-A Survey of Transformers

1. 作者以及單位

Tianyang Lin(復旦邱錫鵬組)

2. 解決問題

對各種各樣的 Transformer 變體(又名 X-former)分了2類4種優化派別:
2.1 原版類 Transformer。
2.2 變種 X-former類:2.2.1架構修改、2.2.2預訓練、2.2.3應用。

下面是4種類的對應的文章:


transform分類圖taxonomy

3. 研究動機

這應該是第一篇關于Transformers結構的綜述(之前有類似A Survey on Visual Transformer、Efficient Transformers: A Survey類似的文章)。但是本文注重是結構,主要動機是把變種X-former根據優化目的分了3類。這3類比較有概括性

  1. 模型效率。應用 Transformer 的一個關鍵挑戰是其處理長序列的效率較低,這主要是由于 self-attention 的計算和內存復雜性。改進方法包括輕量化注意力模塊(例如稀疏注意力)和分而治之的方法(例如循環和分層機制)。

  2. 模型泛化。由于 Transformer 是一種靈活的架構,并且對輸入數據的結構偏差幾乎沒有假設,因此很難在小規模數據上進行訓練。改進方法包括引入結構偏差或正則化,對大規模未標記數據進行預訓練等。我看BERT(時序優化)都在這一層。

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

根據以上3個方面,改進原版 Transformer 的方式提出新的分類法,架構修改,預訓練和應用

4. 研究方法

下面就按照4個種類:2.1原版,2.2架構修改,2.3預訓練,2.4應用,分別講究規律(左是原版,右是架構修改,預訓練,應用)。


左邊1類+右邊3類分別對應修改的分類
4.1原版Attention

原版我準備掰開揉碎了說一下,把Attention和Transformer關系也說一下(文章沒有提及)。本部分分兩節:第一部分介紹一下Transformers之前的Attention是怎么演變過來的(我發現很多分析這個文章的blog都沒有介紹清楚)。第二部分在說transformer在文章中談到的問題。

4.1.1 Attention到底是什么

Attention的經典定義,是來源于Attention is all you need這篇曠世奇作(Transformer也是這個文章提出的)。這個公式看似復雜,但是理解了之后就會發現非常的簡單和基本。先講一下每個字母的含義。字面意思:Q表示query,表示的是K表示key,V表示value, d_k是K的維度。如果類比QKV在推薦系統中:在淘寶買東西,key就是淘寶數據庫中所有的商品信息,query就是你最近關注到的商品信息,比如高跟鞋、緊身褲,value就是推送給你的商品信息。這個例子比較的具體,但是往往在人工智能運用中,key,query,value都是隱變量特征。因此,他們的含義往往不那么顯然,我們需要把握的是這種計算結構。

QKV定義

回到公式本身,這個公式本質上就是表示按照關系矩陣進行加權平均。關系矩陣就是QK^T ,而softmax就是把關系矩陣歸一化到概率分布,然后按照這個概率分布對V進行重新采樣,最終得到新的attention的結果。

transformer

拆開看的話主要有以下幾個模塊(重點是2和3):

  1. 左右分別是encoder(enc)和decoder(dec)。encoder對輸入序列進行編碼,即X=(x_0,x_1,x_2...x_n)變成H=(h_0,h_1,h_2...h_n);decoder對H=(h_0,h_1,h_2...h_n)進行解碼,得到X=(x_0,x_1,x_2...x_n)。但encoder和decoder都不用RNN,而且換成了多個attention。
  2. enc和dec的底部是embedding;而embedding又分為兩部分:input embedding和positional embedding;其中input embedding就是seq2seq中的embedding。而為什么要positional embedding呢?因為transformer中只有attention;回想一下attention,任意一對(query, key)的計算都是完全一樣的,不像CNN和RNN,有一個位置或者時序的差異:CNN框住一塊區域,隨著卷積核移動,邊緣的少量點會跟著有序變化;因此為了體現出時序或者在序列中的位置差異,要對input加入一定的位置信息,即positional embedding。
  3. enc和dec的中部分別是兩個block,分別輸入一個序列、輸出一個序列;這兩個block分別重復N次。enc的每個block里有兩個子網,分別是multihead attention和feedforward network(ffn);dec的block里有三個子網,分別是兩個multihead attention和一個ffn。這些子網后面都跟了一個add&norm,即像resnet一樣加一個跳邊,然后做一個layer norm。難理解是ffn和multihead attention。先說ffn:就是對一個輸入序列X=(x_0,x_1,x_2...x_n),對每個x_i進行一次channel的重組,512→2048→512,也可以理解為對整個序列做一個1X1的卷積 。再說*multihead attention:原始的attention, 就是一個query (以下簡稱Q) 和一組key (以下簡稱K) 算相似度, 然后對一組value (以下簡稱V) 做加權和; 假如每個Q和K都是512維的向量, 那么這就相當于在512維的空間里比較了兩個向量的相似度. 而multihead就相當于把這個512維的空間人為地拆成了多個子空間, 比如head number=8, 就是把一個高維空間分成了8個子空間, 相應地V也要分成8個head; 然后在這8個子空間里分別計算Q和K的相似度, 再分別組合V. 這樣可以讓attention能從多個不同的角度進行結合, 這對于NMT是很有幫助的,
  4. dec最后還有一個linear和softmax。這個就無需解釋了。

我起初一直沒有看懂Attention上面那個圖,為什么左邊是Encoder?右邊是Decoder,他輸入輸出走勢為什么這樣的?我覺得看下面圖就明白了,Decoder生成輸出序列的過程是逐個進行的,已經生成的子序列會指導新的item的生成。如圖所示,輸入的序列是法語的我是一個學生,翻譯成英語的時候, Decoder的輸入是Encoder的輸出,輸出第一個item “I”,然后再將 I 和Encoder的輸出輸入到Decoder,輸出“am”,之后依次類推。所以,圖中Decoder的輸入有兩個,一個是output embedding,另外一個是Encoder的輸出。

實例對應(注意Encoder和Decoder的多層堆砌)

很多文章都說Attention吊打cnn,總結一下有2個優勢的原因:
1.Attention比recurrent相比,需要的序列操作變成了O(1),而卷積是O(log(n)),典型的計算機內犧牲空間換時間的想法,由于計算結構的改進(如加約束、共享權重)和硬件的提升,這點空間并不算什么。
2.Attention是可以有比CNN更好的解釋性的。CNN的解釋性不高,大家都知道,但是剛剛粗體說了attention是對V的加權分析,天然就具有解釋性的屬性。

在說說本文對self-Attention缺點的分析,說了2點挑戰:

  1. 復雜性。self-attention 的復雜度是O(T^2.D)。因此,在處理長序列時 Attention 模塊會成為瓶頸。
  2. 結構先驗。Self-attention 不假設對輸入有任何結構性偏見(我覺得這一點很重要)。甚至順序信息也需要從訓練數據中學習。因此,無預訓練的 Transformer 通常很容易在小型或中等規模的數據上過擬合。
4.1.2 Transformer機制的改進方向

原文針對以上調整有6點建議(具體可以看原文):

  1. 稀疏注意力。這一系列工作將稀疏偏差引入 Attention 機制,從而降低了復雜性。
  2. 線性化注意力。這一系列工作將注意力矩陣與核特征圖分解,然后以相反的順序計算注意力以實現線性復雜度。
  3. 原型和內存壓縮。這類方法減少了查詢或鍵值記憶對的數量,以減少注意力矩陣的大小。
  4. 低秩的自注意力。這一系列工作捕獲了 Self-attention 的低秩屬性。
  5. 先驗注意力。該研究領域探索用先驗的注意力分布來補充或替代標準注意力。
  6. 改進的多頭機制。這一系列工作探索了多個不同的多頭(Multi-head)機制。

1-4我都沒有看太懂(或者我感覺提升可能甚微),主要說說5和6。
先驗注意力:之前提過注意力機制通常將預期的注意力值輸出為向量的加權和。作為一般情況,注意力分布也可以來自其他來源,我們稱之為先驗的。預先注意分布可以補充或替代輸入產生的分布。我們將注意力的這種表述抽象為具有先驗的注意力,如圖所示。在大多數情況下,兩個注意力分布的融合可以通過在應用 softmax 之前計算對應于先驗注意力和生成注意力的分數的加權和來完成。優化方式有:模型位置先驗、從下層模塊先驗、多任務適配器先驗和僅注意力先驗。

先驗概率+attention

改進的多頭機制:多頭(Multi-head)注意力的吸引力在于能夠共同關注來自不同位置的不同表示子空間的信息。然而,沒有機制可以保證不同的注意力頭確實捕捉到不同的特征。所有有:頭部行為建模、跨度受限的多頭和精細聚合的多頭行為。

除此之外,還可以做:調整位置表示(Transformer 中的自注意力模塊和位置前饋層都是置換等變的,這可能在建模時成為一個問題,而不是需要輸入結構的集合輸入問題。例如,在對文本序列建模時,單詞的順序很重要,因此在 Transformer 架構中正確編碼單詞的位置至關重要)。層歸一化(Layer Normalization, LN)以及殘差連接被認為是一種穩定深度網絡訓練的機制(例如,減輕不適定梯度和模型退化)。位置前饋網絡 (FFN) 層對于 Transformer 實現良好性能很重要,可以換FFN 中的激活函數,調整 FFN 以獲得更大容量,刪除 FFN 層(我感覺提升不大)。

4.2架構

在原文中羅列了好幾種架構修改方法,畢竟是綜述,把問題說全很重要。但是有一些,在推薦系統,或者算法解決上用不上,我把架構的修改方法簡單分為兩類:功能性修改操作和分治策略。

4.2.1 功能性修改(我覺得推薦系統用不上的)

有的功能性使 Transformer 輕量化,適合移動設備。 有的加強跨塊連接,在相鄰的 Transformer 塊之間創建了一條前向路徑。有的自適應計算時間,目的減少的計算時間來提取特征。

4.2.2 分治策略(我覺得推薦系統用的上的)

長序列的有效方法是使用分治策略,即將輸入序列分解為可以由 Transformer 或 Transformer 模塊有效處理的更細段。有兩類有代表性的方法,循環和分層 Transformer,如圖所示。這些技術可以被理解為 Transformer 模型的包裝器,其中 Transformer 作為一個基本組件,被重用以處理不同的輸入段。

分而治之

(a)循環 Transformer:在循環 Transformer 中,會維護一個緩存以合并歷史信息。在處理一段文本時,網絡從緩存中讀取作為附加輸入。處理完成后,網絡通過簡單地復制隱藏狀態或使用更復雜的機制來寫入內存(很多時序的文章講這個TI-SASR)。
(b)分層 Transformer:分層 Transformer (論文HIBERT就屬于這種)將輸入分層分解為更細粒度的元素。低級特征首先被送到 Transformer 編碼器,產生輸出表示,然后聚合(使用池化或其他操作)以形成高級特征,然后由高級 Transformer 處理。這類方法可以理解為一個層次抽象的過程。這種方法的優點有兩個:1)分層建模允許模型以有限的資源處理長輸入;2)它有可能產生更豐富的對任務有益的表征。

4.3預訓練Pre-Train-Model(PTM)

Transformer 不對數據的結構做出任何假設(例如,卷積假設數據是二維的),優點是有效地使 Transformer 成為一種非常通用的架構,具有捕獲不同范圍依賴關系的潛力。缺點是使得 Transformer 在數據有限時容易過擬合。緩解此問題的一種方法是在模型中引入歸納偏置。

歸納偏置(預訓練PTM)有以下方法:

  1. 僅 Encoder。大名鼎鼎的BERT是典型的 PTM。
  2. 僅 Decoder。大規模 PTM 可以通過將任務和示例作為構造提示輸入模型來在低資源場景下實現不錯的功能。
  3. Encoder-Decoder。使用 Encoder-Decoder 架構的好處是,誘導模型具備執行自然語言理解和生成的能力。
4.4應用

還有一些綜合修改,我覺得其實和上面架構訓練比較有重合,例如NLP的BERT,CV的DERT,多媒體的VLBERT,推薦系統的DIN等。

5. 創新點

文章很長,由于是survey,每個人看創新點都是帶著自己的問題看,所以各不同,我談談推薦系統下從這個文章的啟發。

1.把 Transformer 分了2類4種。如果只保留干貨,這個文章主要談了3種:基本 Transformer模型哪些點可以優化(把 Transformer 當成山,每個優化的點是石頭)、 Transformer 的架構修改(把 Transformer 當成山,每個優化的點是山峰)、Transformer 預訓練處理(把 Transformer 當成山,每個優化的點又是一座山)。優化的目的是:效率,泛化和適配(我覺得推薦系統主要關注是效率)。這一點還是很重要,基本定了未來所有Transformer 優化歸類的思路。

2.首先,確定一點,Transformer 的核心是利用QK矩陣的softmax是概率分布,對V的加權平均。默認Transformer 對輸入有任何結構性偏見,甚至順序信息也需要從訓練數據中學習。因此,無預訓練的 Transformer 通常很容易在小型或中等規模的數據上過擬合。所以可以探索用先驗的Attention分布來補充或替代標準Attention分布(這里的“標準Attention分布”說的是Softmax(QK^T))。

  1. 架構的修改,這個survey主要談了分治策略。就跟CNN可以搭建起非常厲害的檢測模型或者更高級的模型一樣,attention的最厲害的地方,是它可以作為基本模塊搭建起非常復雜的模型。結合其他文章舉兩個例子:

首先是全局attention和部分attention。全局attention就是上面講的基本attention,部分attention主要是還允許某些特征在做attention之前先做融合,再進一步attention。如swintransformer。

全局和部分attention

其次是hard attention和soft attention。之前我們講的基本都是soft attention。但是站到采樣的角度來講,可以考慮hard attention,把概率當成一個分布,然后再進行多項式采樣。這個或許在強化學習里面,有啟發性作用。

4.Transformer 預訓練處理方面(和第二點先驗區別是,這里“預”主要關注的點是Encoder和Decoder)如推薦系統里面的阿里寫的BERT4REC。BERT的全稱是Bidirectional Encoder Representations from Transformer,從名稱上可以看出來BERT從Transformer中取Encoder部分,進行Bidirectional Representation的representation learning。BERT的作用類似CNN, 扮演的是feature extractor提取的角色,阿里這個文章很長,這里就說結論:BERT的輸出中,不同的mask會有不同的embedding,該mask的增強后embedding,含有豐富的context信息,對增強后embedding放到softmax 預測性能提高了。因為預測被mask的詞是從序列的前后雙向獲得的信息,不是單向從左往右或者從右往左的,所以這也是BERT中bidirectional的來歷。

總結一下:在看基本模型有哪些值得優化的(灌水)的點基本跳不出這個創新點框架。要不是不改架構,對默認模型進行防止過擬合的優化;要不組合起來優化,采樣上動動腦筋;最后是Encoder和Decoder上比原來更豐富。

6. 結論

當前的關注點(例如效率和泛化)之外,Transformer 的進一步改進可能在于以下幾個方向:

  1. 理論分析。Transformer 的架構已被證明能夠支持具有足夠參數的大規模訓練數據集。許多工作表明,Transformer 具有比 CNN 和 RNN 更大的容量,因此具有處理大量訓練數據的能力。當 Transformer 在足夠的數據上進行訓練時,它通常比 CNN 或 RNN 具有更好的性能。一個直觀的解釋是 Transformer 對數據結構的先驗假設很少,因此比 CNN 和 RNN 更靈活。然而,理論原因尚不清楚,我們需要對Transformer能力進行一些理論分析。

  2. 超越注意力的更好的全局交互機制。Transformer 的一個主要優點是使用注意力機制來模擬輸入數據中節點之間的全局依賴關系。然而,許多研究表明,對于大多數節點來說,完全注意是不必要的。在某種程度上,無法區分地計算所有節點的注意力是低效的。因此,在有效地對全局交互進行建模方面仍有很大的改進空間。一方面,self-attention 模塊可以看作是一個具有動態連接權重的全連接神經網絡,它通過動態路由聚合非局部信息。因此,其他動態路由機制是值得探索的替代方法。另一方面,全局交互也可以由其他類型的神經網絡建模,例如記憶增強模型。

  3. 多模態數據統一框架。在許多應用場景中,集成多模態數據對于提高任務性能是有用且必要的。此外,通用人工智能還需要能夠捕捉不同模態之間的語義關系。由于 Transformer 在文本、圖像、視頻和音頻方面取得了巨大成功,我們有機會構建一個統一的框架,更好地捕捉多模態數據之間的內在聯系。然而,模內和跨模態注意力的設計仍有待改進。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容