【NLP】Transformer大家庭简介!
?煉丹筆記干貨?
作者:Lilian
Transformer Family
01
準備
02
Attention 以及 Self-Attention
1.Attention
是神經網絡中的一種機制:模型可以通過選擇性地關注給定的數據集來學習做出預測。Attention的個數是通過學習權重來量化的,輸出則通常是一個加權平均值。
2.Self-Attention:
是一種注意機制,模型利用對同一樣本觀測到的其他部分來對數據樣本的剩下部分進行預測。從概念上講,它感覺非常類似于non-local的方式。還要注意的是,Self-attention是置換不變的;換句話說,它是對集合的一種操作。
而關于attention和self-attention存在非常多的形式,我們之前常見的Transformer是依賴于scaled-dot-product的形式,也就是:給定query矩陣Q, key矩陣K以及value矩陣V,那么我們的輸出就是值向量的加權和,其中,分配給每個值槽的權重由Quey與相應Key的點積確定。
對于一個query以及一個key向量,,我們計算下面的值:
其中,是keys的集合。
03
Multi-Head Self-Attention
multi-head self-attention是Transformer的核心組成部分,和簡單的attention不同之處在于,Multihead機制將輸入拆分為許多小的chunks,然后并行計算每個子空間的scaled dot product,最后我們將所有的attention輸出進行拼接,
其中,是concate操作,是權重矩陣,它將我們的輸出embeddings(L*d)的映射到query,key,value矩陣,而且是輸出的線性轉化,這些權重都是在訓練的時候進行訓練的。
04
Transformer
Transformer,很多時候我們也稱之為"vanilla Transformer", 它有一個encoder-decoder的結構,decoder的Transformer可以在語言建模的時候獲得非常好的效果
Encoder-Decoder結構
Encoder生成一個基于attention的表示,能夠從一個大的上下文中定位一個特定的信息片段。它由6個身份識別模塊組成,每個模塊包含兩個子模塊、一個multihead self-attention和一個point-wise全連接前饋網絡。
按point-wise來說,這意味著它對序列中的每個元素應用相同的線性變換(具有相同的權重)。這也可以看作是濾波器大小為1的卷積層。每個子模塊都有一個剩余連接和layer normalization。所有子模塊輸出相同維度的數據。
Transformer的decoder功能是從encoder的表示中抽取信息。該結構與encoder非常相似,只是decoder包含兩個多頭注意子模塊,而不是在每個相同的重復模塊中包含一個。第一個多頭注意子模塊被屏蔽,以防止位置穿越。
Positional Encoding
因為self-attention操作是permutation不變的,所以使用正確的位置編碼是非常重要的,此處我們使用如下的位置編碼來提供order信息,位置編碼,我們可以直接將它們加入到我們到vanilla Transformer中,
(1).Sinusoidal positional encoding,給定token的位置,維度,
(2).Learned positional encoding,對每個學習得到對列向量,對每個絕對位置進行編碼。
輔助Loss
為了取得更好的效果,我們一般會加入輔助loss,
除了在序列末尾只生成一個預測之外,還要求每個immediatge位置能做出正確的預測,迫使模型預測給定的較小上下文(例如,上下文窗口開頭的前幾個tokens)。
每個中間Transformer也用于進行預測。隨著訓練的進行,較低層的權重對總損失的貢獻越來越小。
序列中的每個位置可以預測多個目標,即,對未來token的兩個或多個預測。
05
ACT(Adaptive Computation?Time)
Adaptive Computation Time是一種動態決定遞歸神經網絡需要多少計算步驟的機制。
我們有一個RNN模型,它由輸入的權重,一個參數話的狀態遷移函數一個輸出權重和一個輸出的bias 組成。給定一個輸入序列,輸出的序列是由:
ACT使上述RNN設置能夠在每個輸入元素上執行數量可變的步驟。大量的計算步驟會導致中間狀態序列并且輸出, 它們都共享相同的遷移狀態函數, 以及相同的輸出權重,:
其中是一個二元的flag,來表示是否輸入步是遞增的。
step的個數是由額外的sigmoidal halting單元決定的,帶有相關的權重矩陣 以及bias , 對于第輸入元素在中間步驟處輸出一個中止概率:
為了使計算在一個步驟后停止,ACT引入了一個小常數(例如0.01),因此每當累積概率超過時,計算就會停止。
其中為中間步驟個數的上限。
最終狀態和輸出的mean-field的update:
避免對每個輸入進行不必要的思考,ACT增加了ponder cost
用此來鼓勵中間計算步驟的小的次數。
06
Improved Attention Span
提高Attention Span的目的是使可用于self-attention的上下文更長、更有效、更靈活。
1. Longer Attention Span(Transformer-XL)
vanilla Transformer有一個固定的和有限的注意廣度。在每個更新步驟中,該模型只能處理同一段中的其他元素,并且沒有任何信息可以在分離的固定長度段之間流動。也就是說層數固定不夠靈活,同時對于算力需求非常大,導致其并不適合處理超長序列。
這種context segmentation會導致幾個問題:
模型不能捕獲非常長期的依賴關系;
在沒有上下文或上下文很薄的情況下,很難預測每個片段中的前幾個tokens。
評估是昂貴的。每當segment右移一位時,新的segment就會從頭開始重新處理,盡管有很多重疊的tokens。
Transformer-XL解決來上下文的segmentation問題:
對于segments之間的隱藏狀態進行重復使用;
使用位置編碼使其適用于重新使用的states;
Hidden state Reuse:
我們對第層的segment的隱藏狀態打標簽為,除了對相同segment 的最后一層的英藏狀態,我們還依賴于之前的segment 的相同層的隱藏狀態。通過從前面隱藏狀態加入信息,模型可以將attention的廣度進行擴大,可以在多個segments之間發揮作用:
key和value依賴于擴展的隱藏狀態,同時query僅僅只依賴于當前步的隱藏狀態,是序列長度的維度的concatenation操作。
2. Relative Positional Encoding
為了處理這種新的attention span的形式,Transformer-XL提出了一種新的位置編碼。如果使用相同的方法對絕對位置進行編碼,則前一段和當前段將分配相同的編碼,這是不需要的。
為了保持位置信息流在各段之間的一致性,Transformer XL對相對位置進行編碼,因為它足以知道位置的offset,從而做出更好的預測,即:,在一個key向量以及它的query之間。
如果我們省略并且對它們以softmax的形式進行normalize,我們可以重寫在位置的query和位置的key之間的attention分數:
上面的幾項又可以被表示為:
用相對位置編碼替換;
用兩個可訓練的參數(針對內容)和(針對位置)替換;
將劃分為兩個矩陣, 用于內容信息, 用于位置信息;
3. Adaptive Attention Span
Transformer的一個關鍵優勢是能夠捕獲長期依賴關系。根據上下文的不同,模型可能更愿意在某個時候比其他人更進一步地注意;或者一個attention head可能有不同于另一個attention head的注意模式。如果attention span能夠靈活地調整其長度,并且只在需要時再往回看,這將有助于減少計算和內存開銷,從而在模型中支持更長的最大上下文大小(這就是Adaptive Attention Span的動機)。
后來Sukhbaatar等人提出了一種self-attention機制以尋找最優的attention span,他們假設不同的attention heads可以在相同的上下文窗口中賦予不同的分數,因此最優的span可以被每個頭分開訓練。
給定第個token,我們需要計算該token和其它在位置的keys的attention權重,其中定義了第個token第上下文窗口:
增加了一個soft mask函數來控制有效的可調attention span,它將query和key之間的距離映射成一個,值。,參數化,要學習:
其中是一個超參數,它可以定義的softness:
soft mask函數應用于注意權重中的softmax元素:
在上面的等式,是可微的,所以可以和模型的其它部分一起聯合訓練,參數每個head可以分開學習,此外,損失函數有額外的懲罰.
利用Adaptive Computation Time,該方法可以進一步增強attention span的長度,動態地適應當前輸入。attention head在時間t的跨度參數是一個sigmoid函數,,其中向量和偏置標量與其他參數一起學習。
在具有自適應注意廣度的Transformer實驗中,Sukhbatar等人發現了一個普遍趨勢,即較低層不需要很長的注意廣度,而較高層的一些attention heads可能會使用非常長的注意廣度。適應性attention span有助于大大減少失敗的次數,特別是在一個有許多注意層和大上下文長度的大模型中。
4. Localized Attention Span (Image Transformer)
Transformer最初用于語言建模。文本序列是一維的,具有明確的時間順序,因此attention span隨著上下文大小的增加而線性增長。
然而,如果我們想在圖像上使用Transformer,我們還不清楚如何定義上下文的范圍或順序。Image Transformer采用了一種圖像生成公式,類似于Transformer框架內的序列建模。此外,圖像Transformer將self-attention span限制在局部鄰域內,因此模型可以放大以并行處理更多的圖像,并保持可能性損失可控。
encoder-decoder架構保留用于image-conditioned生成:
encoder生成源圖像的上下文化的每像素信道表示;
decoder自回歸地生成輸出圖像,每個時間步每像素一個通道。
讓我們將要生成的當前像素的表示標記為查詢。其表示將用于計算的其他位置是關鍵向量它們一起形成一個內存矩陣。的范圍定義了像素查詢的上下文窗口。
Image Transformer引入了兩種類型的localized ,如下所示。
(1).1D Local Attention:輸入圖像按光柵掃描順序(即從左到右、從上到下)展平。然后將線性化后的圖像分割成不重疊的查詢塊。上下文窗口由與相同的查詢塊中的像素和在此查詢塊之前生成的固定數量的附加像素組成。
(2).2D Local Attention:圖像被分割成多個不重疊的矩形查詢塊。查詢像素可以處理相同內存塊中的所有其他像素。為了確保左上角的像素也可以有一個有效的上下文窗口,內存塊將分別向上、左和右擴展一個固定的量。
07
Less Time and Memory Cost
如何減少計算和內存的消耗。
1. Sparse Attention Matrix Factorization (Sparse Transformers)
一般Transformer的計算和存儲開銷隨序列長度呈二次增長,因此很難應用于很長的序列。
Sparse Transformer
引入分解的self-attention,通過稀疏矩陣分解,我們可以將訓練上百層的dense的attention網絡,這樣序列長度就可以到達16384.
給定attention鏈接的模式集合,其中記錄key位置的集合,第個query向量可以擴展為:
盡管的size是不固定的,是size為的,因此,.
在自回歸的模型中,一個attention span被定義為, 它允許每個token可以處理過去的所有其它位置。
在分解的self-attention中,被分解為樹的依賴,例如對于沒對,其中, 存在一條路徑鏈接和。
更加精確地說,集合被劃分為個non-overlapping的子集,第個子集被表示為,所以輸出位置和任意的的路徑有最大長度,例如,如果是和的索引路徑,我們有
Sparse Factorized Attention
Sparse Transformer提出了兩類分解的attention,
Strided attention(stride ,在圖像中,每個像素可以鏈接到所有到之前個像素raster scanning順序,然后那些像素在相同列中相互鏈接。
Fixed attention,一個小的tokens集合總結之前的位置并且向未來的位置傳遞信息:
其中是一個超參數.
Use Factorized Self-Attention in Transformer
存在三種方式使用sparse factorized attention模式的方法:
每個residual block的attention type,把它們交錯起來,,其中是當前residual模塊的index;
設置一個單獨的head,它負責所有分解head負責的位置,;
食欲哦那個一個multi-head attention機制,但是和原始的transformer不同,每個head可以接受上面的一種模式,1或者2.
稀疏Transformer還提出了一套改進方案,將Transformer訓練到上百層,包括梯度檢查點、在backward pass的時候重新計算attention和FF層、混合精度訓練、高效的塊稀疏實現等。
2. Locality-Sensitive Hashing (Reformer)
Reformer模型旨在解決Transformer中的下面幾個痛點:
具有N層的模型中的內存比單層模型中的內存大N倍,因為我們需要存儲反向傳播的activations。
中間FF層通常相當大。
長度為的序列上的注意矩陣通常在記憶和時間上都需要的內存和時間;
Reformer進行了兩種改變:
將dot-product的attention替換為locality-sensitive hashing(LSH) attention,這將時間復雜度從降低為;
將標準residual block替換為reversible residual layer,這樣在訓練期間只允許存儲一次激活,而不是次(即與層數成比例)。
Locality-Sensitive Hashing Attention
在attention 中,我們更加關注大的只,對于每個,我們在尋找中于最近的一個行向量,為了尋找它,我們在attention機制中加入:Locality-Sensitive Hashing (LSH)
如果它保留了數據點之間的距離信息,我們稱hashing機制是locality-sensitive的,這么做相近的向量可以獲得相似的hash,Reformer中,給定一個固定的隨機矩陣,其中是超參數,hash函數為
在LSH attention中,一個query只可以和在相同的hashing bucket中的位置進行交互,,
attention矩陣通常是稀疏的;
使用LSH, 我們基于hash buckets可以對keys和queries進行排序
設置,這樣,一個bucket中的keys和queries相等,更便于批處理。有趣的是,這種“共享QK”配置并不影響Transformer的性能。
使用個連續的group在一起的query的batching,
Reversible Residual Network
Reversible Residual Network的動機是設計一種結構,使任何給定層的激活都可以從下一層的激活中恢復,只需使用模型參數。因此,我們可以通過在backprop期間重新計算激活來節省內存,而不是存儲所有激活。
給定一層, 傳統的residual layer都是做的,但是reversible layer將輸入和輸出split為,然后執行下面的操作:
reversing就是:
我們將相同的思想應用到Transformer中得到:
內存可以通過chunking 前向計算進行操作:
08
Make it Recurrent (Universal Transformer)
Universal Transformer將Transformer中的自我注意與RNN中的循環機制結合起來,旨在受益于Transformer的長期全局receptive field和RNN的學習inductive偏差。
Universal Transformer使用自適應計算時間動態調整步長。如果我們固定步數,一個通用變換器就相當于一個多層變換器,具有跨層共享的參數。
在較高的層次上,Universal Transformer可以看作是學習每個token的隱藏狀態表示的遞歸函數。遞歸函數在標記位置之間并行演化,位置之間的信息通過self-attention進行共享。
給定長度為的序列,Universal Transformer在第步迭代更新表示,在第0步,被出事為輸入embedding矩陣,所以的位置編碼在multi-head self-attenion中被并行處理,然后在經過一個recurrent transition function
Transition()可以是一個 separable convolution或者fully-connected neural network。
在Universal Transformer的自適應版本中,循環步數由ACT動態確定。每個位置都配有一個動態停止機制。一旦每令牌循環塊停止,它將停止進行更多的循環更新,而只是將當前值復制到下一步,直到所有塊停止或直到模型達到最大步長限制。
09
Stabilization for RL (GTrXL)
Self-attention避免了將整個過去壓縮成一個固定大小的隱藏狀態,并且不像RNN那樣受到梯度消失或爆炸的影響。強化學習任務肯定能從這些特質中受益。然而,即使在有監督學習中,也很難訓練Transformer,更不用說在RL環境中了。畢竟,穩定和訓練一個LSTM代理本身可能是相當具有挑戰性的。
Gated Transformer-XL (GTrXL)是使用Transformer到RL中的一次嘗試,GTrXL可以在Transformer-XL上成功穩定的訓練。
layer normalization應用于residual模塊中的輸入流,而不應用于shortcut流。這種重新排序的一個關鍵好處是允許原始輸入從第一層流到最后一層。
Residual連接被GRU樣式選通機制取代。
參考文獻
https://lilianweng.github.io/lil-log/2020/04/07/the-transformer-family.html#locality-sensitive-hashing-reformer
總結
以上是生活随笔為你收集整理的【NLP】Transformer大家庭简介!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11控制面板里面怎么找到系统安全?
- 下一篇: 开心一刻,你和导师之间有什么有趣的事情?