【深度学习】Transformer长大了,它的兄弟姐妹们呢?(含Transformers超细节知识点)...
最近復旦放出了一篇各種Transformer的變體的綜述(重心放在對Transformer結構(模塊級別和架構級別)改良模型的介紹),打算在空閑時間把這篇文章梳理一下:
知乎:https://zhuanlan.zhihu.com/p/379057424
arxiv:https://arxiv.org/abs/2106.04554
Part1背景
1Transformer的優點
可并行
弱歸納偏置,通用性強
特征抽取能力強
自編碼上下文雙向建模
2Transformer的缺點
self-attention 計算復雜度高,序列長度上升,復雜度指數級上升
弱歸納偏置增加了小數據集上過擬合的風險
3原生Transformer(Vanilla Transformer)
sequence-to-sequence 模型(encoder and a decoder)
堆疊 ???? 個相同的 blocks
每個 encoder block 主要由多頭自注意力模塊(multi-head self-attention module)和位置相關全連接(position-wise feed-forward network (FFN))組成,構建的時候還有殘差連接(residual connection)以及層歸一化(Layer Normalization)。
與encoder相比,decoder在多頭自注意模塊和位置相關全連接之間額外插入了交叉注意模塊。
注意力模塊(Attention Modules)
多頭注意力層,核心點在于 Q/K/V 三個矩陣,其中 Q/K 矩陣生成權重矩陣(經由softmax),隨后和V矩陣得到加權和。
這個過程重復了 n_heads 次,這個 n_heads 代表的就是頭的數目,這里需要注意的是我們需要確保 hidden_size/n_heads 需要為一個整數,不然會報錯。
基于位置的全連接(Position-wise FFN)
注意:Transformer中的FFN全稱是Position-wise Feed-Forward Networks,重點就是這個position-wise,區別于普通的全連接網絡,這里FFN的輸入是序列中每個位置上的元素,而不是整個序列,所以每個元素完全可以獨立計算,最極端節省內存的做法是遍歷序列,每次只取一個元素得到FFN的結果,但是這樣做時間消耗太大,“分段”的含義就是做下折中,將序列分成 段,也就是 個子序列,每次讀取一個子序列進行FFN計算,最后將 份的結果拼接。分段FFN只是一種計算上的技巧,計算結果和原始FFN完全一致,所以不會影響到模型效果,好處是不需要一次性將整個序列 讀入內存,劣勢當然是會增加額外的時間開銷了。
殘差與歸一化(Residual Connection and Normalization)
殘差連接一般出現在比較深的模型中,可以使得信息前后向傳播更加順暢,緩解了梯度破碎問題。為什么這里使用 Layer Normalization,而不是BN,這里直白的回答就是,BN的效果差,所以不用。
位置編碼(Position Encodings)
因為Transformer不引入RNN或CNN,所以它忽略了位置信息(尤其是對于encoder)。因此Transformer使用Position Encodings來建模token之間的順序。
4使用方法(Usage)
Encoder-Decoder 因為具有encoder和decoder,所以可以用作Seq2Seq任務;
Encoder only 通常將Encoder作為文本的編碼器,通常用于文本分類任務;
Decoder only 只使用decoder時,需要將encoder和decoder的交叉編碼器刪除,通常用作文本生成任務。
5模型分析(Model Analysis)
為了分析Tranformer的計算復雜度,本文分析了其主要的兩個組件:self-attention和position-wise FFN。具體的對比如下表所示,本文假設隱藏層的維度為????,輸入的序列長度為????。FFN的中間單元數量設置為4????,key和value的維度設置為????/???? 。
當輸入數據的長度較短時, 隱藏層的維度????主導了self-attention和position-wise FFN的復雜度。此時Transformer的計算瓶頸在于FFN,但是隨著序列長度的增加,序列長度????逐漸主導復雜度,此時Transformer的計算瓶頸在于self-attention。此外,自注意力的計算需要存儲???? × ???? 的注意力分布矩陣,這使得Transformer的計算在長序列場景(例如,長文本文檔和高分辨率圖像的像素級建模)是不可行的。
6Transformer和其他網絡的對比(Comparing Transformer to Other Network Types)
Self-Attention的分析(Analysis of Self-Attention)
本文將self-attention和其余幾個神經網絡模型進行了對比,總結出了以下幾點Transformer的優點:
self-attention具有和FFN相同的最大路徑長度,因此Transformer更適合長距離依賴的建模。但是相對于FNN,Transformer的參數的有效性更高且對于變長序列的處理更好。
由于卷積層的感受野有限,人們通常需要堆疊一個深的網絡來擁有一個全局感受野。另一方面,恒定的最大路徑長度允許self-attention建模恒定層數之間的長期依賴性。
恒定的順序操作和最大路徑長度使得self-attention比RNN更具并行性,在遠程建模中表現更好。
注意:最大路徑長度指的是從任何輸入位置通過前向和后向信號的到達任意輸出位置的最大長度。較短的句子長度意味著更好的學習長期依賴性的能力。
歸納偏置(In Terms of Inductive Bias)
歸納偏置其實可以理解為:從現實生活中觀察到的現象中歸納出一定的規則(heuristics),然后對模型做一定的約束,從而可以起到“模型選擇”的作用,即從假設空間中選擇出更符合現實規則的模型。
在具體的深度學習模型中:CNN具有平移不變性和局部性的歸納偏置。類似地,RNN因為其馬爾可夫結構具有時間不變性和局部性的歸納偏置。
而Transformer很少對數據的結構信息進行假設。這使得Transformer成為一個通用且靈活的體系結構。但是這樣也有其對應的缺點。缺少結構歸納偏置使得Transformer容易對小規模數據過擬合。
另外一種和Transformer類似的模型則是Graph Neural Networks (GNNs),Transformer可以看作是一個定義在一個完全有向圖(帶環)上的GNN,其中每個輸入都是GNN中的一個節點。Transformer和GNNs之間的關鍵區別在于Transformer沒有引入關于輸入數據結構的先驗知識,Transformer中的消息傳遞過程完全依賴于文本的相似性度量。
Part2Transformer的分類(TAXONOMY OF TRANSFORMERS)
到目前為止,研究人員已經基于vanilla Transformer從三個角度提出了各種各樣的模型:體系結構修改的類型;預訓練方法;應用。
7注意力機制(Attention)
注意力模塊是Transformer中的核心模塊,實際應用時通常會遇到以下問題:
復雜度過高:上一節中提到了Transformer隨著序列長度增加,復雜度指數上升的問題。序列長度變長的話,self-attention成為Transformer計算效率的瓶頸。
缺少結構先驗:自注意力機制并沒有引入任何的結構假設,甚至順序信息都還要從訓練數據中學習得到,因為未預訓練過的Transformer可能會在小數據集上過擬合。
針對上述問題的改進主要可以分為以下幾種:
稀疏注意力(Sparse Attention):采用稀疏注意力機制,將O(n)依賴降至線性,解決了BERT模型中的全注意力機制帶來的序列長度二次依賴限制,同時兼顧更長的上下文。
線性化的注意力(Linearized Attention)?:為了給計算復雜度降低到線性,使用核函數來簡化Attention的計算過程,并且替換掉SoftMax。
Prototype and Memory Compression:這類方法減少了Q和KV內存對的數量,以減小注意力矩陣的大小。
Low-rank Self-Attention:這類工作抓住了自我注意力的low rank屬性。
注意力先驗(Attention with Prior):這一系列的研究旨在補充或取代具有先驗的注意分布標準注意力機制。
改善多頭自注意力機制:這一系列研究探索了不同可替代多頭機制的結構。
8稀疏注意力(Sparse Attention)
在標準的Transformer中,每個token都需要和其他的所有token做運算,但是有研究人員觀察到針對一個訓練好的Transformer,其中的注意力矩陣通常非常稀疏。因此,通過結合結構偏差來限制每個Q關注的Q-K對的數量,可以降低計算復雜度。在該限制下,只需要根據預定義的模式計算Q-K對的相似度即可。
上述公式得到的結果是一個非歸一化的矩陣,在具體的實現中,矩陣中的一般不會被存儲。
從另一個角度來看,標準的注意力可以看作是一個完整的二部圖,其中每個Q接收來自所有存儲節點的信息并更新其表示。稀疏注意可以看作是一個稀疏圖,其中刪除了節點之間的一些連接。我們將確定稀疏連接的度量分為兩類:基于位置的稀疏注意和基于內容的稀疏注意。
基于位置的稀疏注意力
在基于位置的稀疏注意力中,注意力矩陣根據一些預先定義的pattern進行限制。雖然這些稀疏模式有不同的形式,但本文發現其中一些可以分解為原子類型的稀疏pattern。本文首先確定一些原子類型的稀疏pattern,然后描述這些pattern是如何在一些現有的工作應用的。最后本文介紹了一些針對特定數據類型的擴展稀疏pattern。
原子稀疏注意力(Atomic Sparse Attention)
主要有五種原子稀疏注意模式,如下圖所示。
Global Attention.?為了緩解在稀疏注意中對長距離依賴性建模能力的退化,可以添加一些全局節點作為節點間信息傳播的中心。這些全局節點可以attend到序列中的所有節點,并且整個序列也可以attend到這些全局節點,其中注意矩陣如圖4(a)所示。
Band Attention.?又稱之為滑動窗口注意力或局部注意力。由于大多數數據都具有很強的局部性,因此很自然地會限制每個Q去關注其鄰居節點。這種稀疏模式被廣泛采用的一類是Band Attention,其中注意矩陣如圖4(b)所示。
Dilated Attention.?與擴張的CNN類似,通過使用具有間隙的擴張窗口,可以潛在地增加Band Attention的感受野,而不增加計算復雜度。其中注意矩陣如圖4(c)所示。這可以很容易地擴展到跨越式的注意力機制,窗口大小不受限制,但???????? 需要設置為更大的值。
Random Attention.?為了增加非局部交互的能力,對每個Q隨機抽取一些邊,如圖4(d)所示。這是基于隨機圖(Erd?s–Rényi隨機圖)可以具有與完全圖相似的譜性質,從而通過在隨機圖上的游走可以得到更加快速的mixing時間。
Block Local Attention.?這類注意力機制將輸入序列分割成若干個互不重疊的查詢塊,每個查詢塊與一個本地存儲塊相關聯。查詢塊中的所有Q只涉及相應內存塊中的K。圖4(e)展示了存儲器塊與其對應的查詢塊。
復合稀疏注意力(Compound Sparse Attention)
現有的稀疏注意力通常由以上原子模式中的一種以上組成。圖5顯示出了一些代表性的復合稀疏注意模式。
Star Transformer結合了Band Attention和Global Attention.。具體來看Star Transformer僅包括一個全局節點和一個寬度為3的Band Attention,其中任何一對非相鄰節點通過一個共享的全局節點連接,相鄰節點之間直接連接。這種稀疏模式可以在節點間形成星形圖。
Longformer結合了Band Attention和internal global-node attention,選擇做分類的[CLS]token以及問答任務中的所有的問題tokens作為全局節點。此外還用擴大的Dilated Attention代替上層的一些Band Attention頭,以增加感受野而不增加計算量。
ETC(Extended Transformer Construction)作為和Longformer同時出現的工作,ETC結合了band attention和external global-node attention。ETC還使用了一種[MASK]機制,用于處理結構化輸入和調整對比預測編碼(CPC)以用于預訓練。
除了band attention和external global-node attention之外,Big bird還使用額外的隨機注意力來接近完全注意力。相應的理論分析表明,使用稀疏編碼器和稀疏解碼器可以模擬任何類型的圖靈機,這同時解釋了這些稀疏注意模型的有效性。
Sparse Transformer使用了一種因式分解的注意力機制,其中針對不同類型的數據設計了不同的稀疏模式。對于具有周期性結構的數據(例如圖像),它使用了band attention和strided attention的組合。而對于沒有周期結構的數據(如文本),則采用block local attention與global attention相結合的組合,全局節點來自輸入序列中的固定位置。
擴展的稀疏注意力(Extended Sparse Attention)
除了上述模式之外,一些現有的研究還探索了特定數據類型的擴展稀疏模式。
對于文本數據,BP Transformer構造了一個二叉樹,其中所有標記都是葉節點,內部節點是包含許多標記的span節點。圖中的邊是這樣構造的:每個葉節點都連接到它的鄰居葉節點和更高級別的span節點,這些節點包含來自更長距離的token。這種方法可以看作是全局注意的一種擴展,其中全局節點是分層組織的,任何一對token都與二叉樹中的路徑相連接。圖6(a)展示出了該方法的抽象視圖。
對于視覺數據也有一些擴展。Image Transformer探索了兩種類型的注意力模式:
按光柵掃描順序展平圖像像素,然后應用block local稀疏注意力;
2D block local注意力,其中查詢塊和存儲塊直接排列在2D板中,如圖6(b)所示。作為視覺數據稀疏模式的另一個例子,Axial Transformer在圖像的每個軸上應用獨立的注意力模塊。如圖6(c)所示,每個注意模力塊沿一個軸混合信息,同時保持沿另一個軸的信息獨立。這可以理解為以光柵掃描水平和垂直展平的圖像像素,然后分別使用圖像寬度和高度的間隙來應用跨越式注意力。
基于內容的稀疏注意力
另一個方向的工作是基于輸入內容創建稀疏圖,即構造輸入中的稀疏連接時是有條件的。
構造基于內容的稀疏圖的簡單方法是選擇那些可能與給定Q具有較大相似性分數的K。為了有效地構造稀疏圖,可以將其看做Maximum Inner Product Search (MIPS)問題,即在不計算所有點積項的情況下,通過一個查詢Q來尋找與其具有最大點積的K。Routing Transformer使用了k-means聚類——對查詢queries和keys在同一簇質心向量集合上進行聚類。每個查詢Q只關注與其屬于同一簇內的keys。在訓練的時候,會使用分配的向量指數移動平均數除以簇的數量來更新每個簇的質心向量。
表示的是????這個簇中包含的向量的數量,?是一個可學習的超參數。
假設表示第個查詢涉及的Key的索引集合,在Routing Transformer中的表示為:
Reformer使用了局部敏感哈希(LSH)算法來為每一個query選擇對應的K-V對,LSH注意允許每個token只關注同一散列桶中的token。其基本思想是使用LSH函數將Query和Key散列到多個bucket中,相似的項有很高的概率落在同一個bucket中。
具體來看,他們使用隨機矩陣方法作為LSH的函數。假設表示bucket的數量,給定隨機矩陣大小為,則LSH函數的計算公式為:
LSH允許Query只關注具有索引的K-V對:
稀疏自適應連接(Sparse Adaptive Connection,SAC)將輸入序列視為一個圖,并學習構造注意力邊,以使用自適應稀疏連接提高特定任務的性能。SAC使用LSTM邊緣預測器來構造token之間的邊。在沒有遍的情況下,采用強化學習的方法訓練邊緣預測器。
Sparse Sinkhorn Attention(SSA)首先將查詢Q和鍵K分成幾個塊,并為每個查詢塊分配一個鍵塊。每個查詢Q只允許關注分配給其相應鍵塊中的鍵。鍵塊的分配由排序網絡控制,該網絡是一個使用Sinkhorn歸一化產生的雙隨機矩陣,該矩陣用作分配時的排列矩陣。SSA使用這種基于內容的block sparse attention以及上面中介紹的block local attention以增強模型的局部建模能力。
好了,本次的分享就是這些,剩余部分之后會繼續解讀。希望能對大家有幫助。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【深度学习】Transformer长大了,它的兄弟姐妹们呢?(含Transformers超细节知识点)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11系统显示你的账户已被停用怎么办
- 下一篇: 【深度学习】一种关注于重要样本的目标检测