Transformer的前世此生

點擊上方視學算法」,選擇加"星標"或「置頂html

重磅乾貨,第一時間送達node

來自 | 煉丹筆記乾貨   做者 | Lilian


Transformer Familygit



01github

準備web




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的點積肯定。app

對於一個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模式的方法:

  1. 每一個residual block的attention type,把它們交錯起來,,其中 是當前residual模塊的index;
  2. 設置一個單獨的head,它負責全部分解head負責的位置,;
  3. 食慾哦那個一個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樣式選通機制取代。

參考文獻

  1. https://lilianweng.github.io/lil-log/2020/04/07/the-transformer-family.html#locality-sensitive-hashing-reformer


點個在看 paper不斷!

本文分享自微信公衆號 - 視學算法(visualAlgorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索