最近復旦放出了一篇各種Transformer的變體的綜述(重心放在對Transformer結構(模塊級別和架構級別)改良模型的介紹),打算在空閑時間把這篇文章梳理一下:
Part1背景1Transformer的優點
2Transformer的缺點
3原生Transformer(Vanilla Transformer)
注意力模塊(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)
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的優點:
注意:最大路徑長度指的是從任何輸入位置通過前向和后向信號的到達任意輸出位置的最大長度。較短的句子長度意味著更好的學習長期依賴性的能力。 歸納偏置(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中的核心模塊,實際應用時通常會遇到以下問題:
針對上述問題的改進主要可以分為以下幾種:
8稀疏注意力(Sparse Attention)在標準的Transformer中,每個token都需要和其他的所有token做運算,但是有研究人員觀察到針對一個訓練好的Transformer,其中的注意力矩陣通常非常稀疏。因此,通過結合結構偏差來限制每個Q關注的Q-K對的數量,可以降低計算復雜度。在該限制下,只需要根據預定義的模式計算Q-K對的相似度即可。 上述公式得到的結果是一個非歸一化的矩陣,在具體的實現中,矩陣中的一般不會被存儲。 從另一個角度來看,標準的注意力可以看作是一個完整的二部圖,其中每個Q接收來自所有存儲節點的信息并更新其表示。稀疏注意可以看作是一個稀疏圖,其中刪除了節點之間的一些連接。我們將確定稀疏連接的度量分為兩類:基于位置的稀疏注意和基于內容的稀疏注意。 基于位置的稀疏注意力在基于位置的稀疏注意力中,注意力矩陣根據一些預先定義的pattern進行限制。雖然這些稀疏模式有不同的形式,但本文發現其中一些可以分解為原子類型的稀疏pattern。本文首先確定一些原子類型的稀疏pattern,然后描述這些pattern是如何在一些現有的工作應用的。最后本文介紹了一些針對特定數據類型的擴展稀疏pattern。 原子稀疏注意力(Atomic Sparse Attention) 主要有五種原子稀疏注意模式,如下圖所示。
![]() 復合稀疏注意力(Compound Sparse Attention) 現有的稀疏注意力通常由以上原子模式中的一種以上組成。圖5顯示出了一些代表性的復合稀疏注意模式。
擴展的稀疏注意力(Extended Sparse Attention) 除了上述模式之外,一些現有的研究還探索了特定數據類型的擴展稀疏模式。 對于文本數據,BP Transformer構造了一個二叉樹,其中所有標記都是葉節點,內部節點是包含許多標記的span節點。圖中的邊是這樣構造的:每個葉節點都連接到它的鄰居葉節點和更高級別的span節點,這些節點包含來自更長距離的token。這種方法可以看作是全局注意的一種擴展,其中全局節點是分層組織的,任何一對token都與二叉樹中的路徑相連接。圖6(a)展示出了該方法的抽象視圖。 對于視覺數據也有一些擴展。Image Transformer探索了兩種類型的注意力模式:
基于內容的稀疏注意力另一個方向的工作是基于輸入內容創建稀疏圖,即構造輸入中的稀疏連接時是有條件的。 構造基于內容的稀疏圖的簡單方法是選擇那些可能與給定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對:
好了,本次的分享就是這些,剩余部分之后會繼續解讀。希望能對大家有幫助。 |
|