电竞比分网-中国电竞赛事及体育赛事平台

分享

Transformer的一家!

 520jefferson 2021-02-10
作者:Lilian

Transformer Family

01

準(zhǔn)備

02

Attention 以及 Self-Attention

1.Attention

  • 是神經(jīng)網(wǎng)絡(luò)中的一種機(jī)制:模型可以通過(guò)選擇性地關(guān)注給定的數(shù)據(jù)集來(lái)學(xué)習(xí)做出預(yù)測(cè)。Attention的個(gè)數(shù)是通過(guò)學(xué)習(xí)權(quán)重來(lái)量化的,輸出則通常是一個(gè)加權(quán)平均值。

2.Self-Attention

  • 是一種注意機(jī)制,模型利用對(duì)同一樣本觀測(cè)到的其他部分來(lái)對(duì)數(shù)據(jù)樣本的剩下部分進(jìn)行預(yù)測(cè)。從概念上講,它感覺(jué)非常類似于non-local的方式。還要注意的是,Self-attention是置換不變的;換句話說(shuō),它是對(duì)集合的一種操作。

而關(guān)于attention和self-attention存在非常多的形式,我們之前常見(jiàn)的Transformer是依賴于scaled-dot-product的形式,也就是:給定query矩陣Q, key矩陣K以及value矩陣V,那么我們的輸出就是值向量的加權(quán)和,其中,分配給每個(gè)值槽的權(quán)重由Quey與相應(yīng)Key的點(diǎn)積確定。

對(duì)于一個(gè)query以及一個(gè)key向量,,我們計(jì)算下面的值:

其中,是keys的集合。

03

Multi-Head Self-Attention

multi-head self-attention是Transformer的核心組成部分,和簡(jiǎn)單的attention不同之處在于,Multihead機(jī)制將輸入拆分為許多小的chunks,然后并行計(jì)算每個(gè)子空間的scaled dot product,最后我們將所有的attention輸出進(jìn)行拼接,

其中,是concate操作,是權(quán)重矩陣,它將我們的輸出embeddings(L*d)的映射到query,key,value矩陣,而且是輸出的線性轉(zhuǎn)化,這些權(quán)重都是在訓(xùn)練的時(shí)候進(jìn)行訓(xùn)練的。


04

Transformer

Transformer,很多時(shí)候我們也稱之為'vanilla Transformer', 它有一個(gè)encoder-decoder的結(jié)構(gòu),decoder的Transformer可以在語(yǔ)言建模的時(shí)候獲得非常好的效果

Encoder-Decoder結(jié)構(gòu)

Encoder生成一個(gè)基于attention的表示,能夠從一個(gè)大的上下文中定位一個(gè)特定的信息片段。它由6個(gè)身份識(shí)別模塊組成,每個(gè)模塊包含兩個(gè)子模塊、一個(gè)multihead self-attention和一個(gè)point-wise全連接前饋網(wǎng)絡(luò)。

按point-wise來(lái)說(shuō),這意味著它對(duì)序列中的每個(gè)元素應(yīng)用相同的線性變換(具有相同的權(quán)重)。這也可以看作是濾波器大小為1的卷積層。每個(gè)子模塊都有一個(gè)剩余連接和layer normalization。所有子模塊輸出相同維度的數(shù)據(jù)。

Transformer的decoder功能是從encoder的表示中抽取信息。該結(jié)構(gòu)與encoder非常相似,只是decoder包含兩個(gè)多頭注意子模塊,而不是在每個(gè)相同的重復(fù)模塊中包含一個(gè)。第一個(gè)多頭注意子模塊被屏蔽,以防止位置穿越。

Positional Encoding

因?yàn)閟elf-attention操作是permutation不變的,所以使用正確的位置編碼是非常重要的,此處我們使用如下的位置編碼來(lái)提供order信息,位置編碼,我們可以直接將它們加入到我們到vanilla Transformer中,

  • (1).Sinusoidal positional encoding,給定token的位置,維度,


  • (2).Learned positional encoding,對(duì)每個(gè)學(xué)習(xí)得到對(duì)列向量,對(duì)每個(gè)絕對(duì)位置進(jìn)行編碼。

輔助Loss

為了取得更好的效果,我們一般會(huì)加入輔助loss,

  • 除了在序列末尾只生成一個(gè)預(yù)測(cè)之外,還要求每個(gè)immediatge位置能做出正確的預(yù)測(cè),迫使模型預(yù)測(cè)給定的較小上下文(例如,上下文窗口開(kāi)頭的前幾個(gè)tokens)。

  • 每個(gè)中間Transformer也用于進(jìn)行預(yù)測(cè)。隨著訓(xùn)練的進(jìn)行,較低層的權(quán)重對(duì)總損失的貢獻(xiàn)越來(lái)越小。

  • 序列中的每個(gè)位置可以預(yù)測(cè)多個(gè)目標(biāo),即,對(duì)未來(lái)token的兩個(gè)或多個(gè)預(yù)測(cè)。

05

ACT(Adaptive Computation Time)

Adaptive Computation Time是一種動(dòng)態(tài)決定遞歸神經(jīng)網(wǎng)絡(luò)需要多少計(jì)算步驟的機(jī)制。

我們有一個(gè)RNN模型,它由輸入的權(quán)重,一個(gè)參數(shù)話的狀態(tài)遷移函數(shù)一個(gè)輸出權(quán)重和一個(gè)輸出的bias 組成。給定一個(gè)輸入序列,輸出的序列是由:

ACT使上述RNN設(shè)置能夠在每個(gè)輸入元素上執(zhí)行數(shù)量可變的步驟。大量的計(jì)算步驟會(huì)導(dǎo)致中間狀態(tài)序列并且輸出, 它們都共享相同的遷移狀態(tài)函數(shù), 以及相同的輸出權(quán)重,:

其中是一個(gè)二元的flag,來(lái)表示是否輸入步是遞增的。

step的個(gè)數(shù)是由額外的sigmoidal halting單元決定的,帶有相關(guān)的權(quán)重矩陣 以及bias , 對(duì)于第輸入元素在中間步驟處輸出一個(gè)中止概率:

為了使計(jì)算在一個(gè)步驟后停止,ACT引入了一個(gè)小常數(shù)(例如0.01),因此每當(dāng)累積概率超過(guò)時(shí),計(jì)算就會(huì)停止。

< n(t),="" \\p_t^n="R(t)" =="" 1-="" \sum_{n="1}^{N(t)-1}" h_t^n,="" ~if~="" n="N(t)'" data-formula-type='block-equation'>

其中為中間步驟個(gè)數(shù)的上限。

最終狀態(tài)和輸出的mean-field的update:

避免對(duì)每個(gè)輸入進(jìn)行不必要的思考,ACT增加了ponder cost

用此來(lái)鼓勵(lì)中間計(jì)算步驟的小的次數(shù)。

06

Improved Attention Span

提高Attention Span的目的是使可用于self-attention的上下文更長(zhǎng)、更有效、更靈活。

1. Longer Attention Span(Transformer-XL)

vanilla Transformer有一個(gè)固定的和有限的注意廣度。在每個(gè)更新步驟中,該模型只能處理同一段中的其他元素,并且沒(méi)有任何信息可以在分離的固定長(zhǎng)度段之間流動(dòng)。也就是說(shuō)層數(shù)固定不夠靈活,同時(shí)對(duì)于算力需求非常大,導(dǎo)致其并不適合處理超長(zhǎng)序列。

這種context segmentation會(huì)導(dǎo)致幾個(gè)問(wèn)題:

  • 模型不能捕獲非常長(zhǎng)期的依賴關(guān)系;
  • 在沒(méi)有上下文或上下文很薄的情況下,很難預(yù)測(cè)每個(gè)片段中的前幾個(gè)tokens。
  • 評(píng)估是昂貴的。每當(dāng)segment右移一位時(shí),新的segment就會(huì)從頭開(kāi)始重新處理,盡管有很多重疊的tokens。

Transformer-XL解決來(lái)上下文的segmentation問(wèn)題:

  • 對(duì)于segments之間的隱藏狀態(tài)進(jìn)行重復(fù)使用;
  • 使用位置編碼使其適用于重新使用的states;

Hidden state Reuse:



我們對(duì)第層的segment的隱藏狀態(tài)打標(biāo)簽為,除了對(duì)相同segment 的最后一層的英藏狀態(tài),我們還依賴于之前的segment 的相同層的隱藏狀態(tài)。通過(guò)從前面隱藏狀態(tài)加入信息,模型可以將attention的廣度進(jìn)行擴(kuò)大,可以在多個(gè)segments之間發(fā)揮作用:

key和value依賴于擴(kuò)展的隱藏狀態(tài),同時(shí)query僅僅只依賴于當(dāng)前步的隱藏狀態(tài),是序列長(zhǎng)度的維度的concatenation操作。

2. Relative Positional Encoding

為了處理這種新的attention span的形式,Transformer-XL提出了一種新的位置編碼。如果使用相同的方法對(duì)絕對(duì)位置進(jìn)行編碼,則前一段和當(dāng)前段將分配相同的編碼,這是不需要的。

為了保持位置信息流在各段之間的一致性,Transformer XL對(duì)相對(duì)位置進(jìn)行編碼,因?yàn)樗阋灾牢恢玫膐ffset,從而做出更好的預(yù)測(cè),即:,在一個(gè)key向量以及它的query之間。

如果我們省略并且對(duì)它們以softmax的形式進(jìn)行normalize,我們可以重寫(xiě)在位置的query和位置的key之間的attention分?jǐn)?shù):

上面的幾項(xiàng)又可以被表示為:

  • 用相對(duì)位置編碼替換;
  • 用兩個(gè)可訓(xùn)練的參數(shù)(針對(duì)內(nèi)容)和(針對(duì)位置)替換;
  • 將劃分為兩個(gè)矩陣, 用于內(nèi)容信息, 用于位置信息;

3. Adaptive Attention Span

Transformer的一個(gè)關(guān)鍵優(yōu)勢(shì)是能夠捕獲長(zhǎng)期依賴關(guān)系。根據(jù)上下文的不同,模型可能更愿意在某個(gè)時(shí)候比其他人更進(jìn)一步地注意;或者一個(gè)attention head可能有不同于另一個(gè)attention head的注意模式。如果attention span能夠靈活地調(diào)整其長(zhǎng)度,并且只在需要時(shí)再往回看,這將有助于減少計(jì)算和內(nèi)存開(kāi)銷,從而在模型中支持更長(zhǎng)的最大上下文大小(這就是Adaptive Attention Span的動(dòng)機(jī))。

后來(lái)Sukhbaatar等人提出了一種self-attention機(jī)制以尋找最優(yōu)的attention span,他們假設(shè)不同的attention heads可以在相同的上下文窗口中賦予不同的分?jǐn)?shù),因此最優(yōu)的span可以被每個(gè)頭分開(kāi)訓(xùn)練。

給定第個(gè)token,我們需要計(jì)算該token和其它在位置的keys的attention權(quán)重,其中定義了第個(gè)token第上下文窗口:

增加了一個(gè)soft mask函數(shù)來(lái)控制有效的可調(diào)attention span,它將query和key之間的距離映射成一個(gè)值。參數(shù)化,要學(xué)習(xí):

其中是一個(gè)超參數(shù),它可以定義的softness:

soft mask函數(shù)應(yīng)用于注意權(quán)重中的softmax元素:

在上面的等式,是可微的,所以可以和模型的其它部分一起聯(lián)合訓(xùn)練,參數(shù)每個(gè)head可以分開(kāi)學(xué)習(xí),此外,損失函數(shù)有額外的懲罰.

利用Adaptive Computation Time,該方法可以進(jìn)一步增強(qiáng)attention span的長(zhǎng)度,動(dòng)態(tài)地適應(yīng)當(dāng)前輸入。attention head在時(shí)間t的跨度參數(shù)是一個(gè)sigmoid函數(shù),,其中向量和偏置標(biāo)量與其他參數(shù)一起學(xué)習(xí)。

在具有自適應(yīng)注意廣度的Transformer實(shí)驗(yàn)中,Sukhbatar等人發(fā)現(xiàn)了一個(gè)普遍趨勢(shì),即較低層不需要很長(zhǎng)的注意廣度,而較高層的一些attention heads可能會(huì)使用非常長(zhǎng)的注意廣度。適應(yīng)性attention span有助于大大減少失敗的次數(shù),特別是在一個(gè)有許多注意層和大上下文長(zhǎng)度的大模型中。

4. Localized Attention Span (Image Transformer)

Transformer最初用于語(yǔ)言建模。文本序列是一維的,具有明確的時(shí)間順序,因此attention span隨著上下文大小的增加而線性增長(zhǎng)。

然而,如果我們想在圖像上使用Transformer,我們還不清楚如何定義上下文的范圍或順序。Image Transformer采用了一種圖像生成公式,類似于Transformer框架內(nèi)的序列建模。此外,圖像Transformer將self-attention span限制在局部鄰域內(nèi),因此模型可以放大以并行處理更多的圖像,并保持可能性損失可控。

encoder-decoder架構(gòu)保留用于image-conditioned生成:

  • encoder生成源圖像的上下文化的每像素信道表示;
  • decoder自回歸地生成輸出圖像,每個(gè)時(shí)間步每像素一個(gè)通道。

讓我們將要生成的當(dāng)前像素的表示標(biāo)記為查詢。其表示將用于計(jì)算的其他位置是關(guān)鍵向量它們一起形成一個(gè)內(nèi)存矩陣。的范圍定義了像素查詢的上下文窗口。

Image Transformer引入了兩種類型的localized ,如下所示。

  • (1).1D Local Attention:輸入圖像按光柵掃描順序(即從左到右、從上到下)展平。然后將線性化后的圖像分割成不重疊的查詢塊。上下文窗口由與相同的查詢塊中的像素和在此查詢塊之前生成的固定數(shù)量的附加像素組成。

  • (2).2D Local Attention:圖像被分割成多個(gè)不重疊的矩形查詢塊。查詢像素可以處理相同內(nèi)存塊中的所有其他像素。為了確保左上角的像素也可以有一個(gè)有效的上下文窗口,內(nèi)存塊將分別向上、左和右擴(kuò)展一個(gè)固定的量。

07

Less Time and Memory Cost

如何減少計(jì)算和內(nèi)存的消耗。

1. Sparse Attention Matrix Factorization (Sparse Transformers)

  • 一般Transformer的計(jì)算和存儲(chǔ)開(kāi)銷隨序列長(zhǎng)度呈二次增長(zhǎng),因此很難應(yīng)用于很長(zhǎng)的序列。

Sparse Transformer

引入分解的self-attention,通過(guò)稀疏矩陣分解,我們可以將訓(xùn)練上百層的dense的attention網(wǎng)絡(luò),這樣序列長(zhǎng)度就可以到達(dá)16384.

給定attention鏈接的模式集合,其中記錄key位置的集合,第個(gè)query向量可以擴(kuò)展為:

盡管的size是不固定的,是size為的,因此,.

在自回歸的模型中,一個(gè)attention span被定義為, 它允許每個(gè)token可以處理過(guò)去的所有其它位置。

在分解的self-attention中,被分解為樹(shù)的依賴,例如對(duì)于沒(méi)對(duì),其中, 存在一條路徑鏈接和。

更加精確地說(shuō),集合被劃分為個(gè)non-overlapping的子集,第個(gè)子集被表示為,所以輸出位置和任意的的路徑有最大長(zhǎng)度,例如,如果是和的索引路徑,我們有

Sparse Factorized Attention

Sparse Transformer提出了兩類分解的attention,

  • Strided attention(stride ,在圖像中,每個(gè)像素可以鏈接到所有到之前個(gè)像素raster scanning順序,然后那些像素在相同列中相互鏈接。
  • Fixed attention,一個(gè)小的tokens集合總結(jié)之前的位置并且向未來(lái)的位置傳遞信息:

其中是一個(gè)超參數(shù).

Use Factorized Self-Attention in Transformer

存在三種方式使用sparse factorized attention模式的方法:

  1. 每個(gè)residual block的attention type,把它們交錯(cuò)起來(lái),,其中是當(dāng)前residual模塊的index;
  2. 設(shè)置一個(gè)單獨(dú)的head,它負(fù)責(zé)所有分解head負(fù)責(zé)的位置,;
  3. 食欲哦那個(gè)一個(gè)multi-head attention機(jī)制,但是和原始的transformer不同,每個(gè)head可以接受上面的一種模式,1或者2.

稀疏Transformer還提出了一套改進(jìn)方案,將Transformer訓(xùn)練到上百層,包括梯度檢查點(diǎn)、在backward pass的時(shí)候重新計(jì)算attention和FF層、混合精度訓(xùn)練、高效的塊稀疏實(shí)現(xiàn)等。

2. Locality-Sensitive Hashing (Reformer)

Reformer模型旨在解決Transformer中的下面幾個(gè)痛點(diǎn):

  • 具有N層的模型中的內(nèi)存比單層模型中的內(nèi)存大N倍,因?yàn)槲覀冃枰鎯?chǔ)反向傳播的activations。
  • 中間FF層通常相當(dāng)大。
  • 長(zhǎng)度為的序列上的注意矩陣通常在記憶和時(shí)間上都需要的內(nèi)存和時(shí)間;

Reformer進(jìn)行了兩種改變:

  • 將dot-product的attention替換為locality-sensitive hashing(LSH) attention,這將時(shí)間復(fù)雜度從降低為;
  • 將標(biāo)準(zhǔn)residual block替換為reversible residual layer,這樣在訓(xùn)練期間只允許存儲(chǔ)一次激活,而不是次(即與層數(shù)成比例)。

Locality-Sensitive Hashing Attention

在attention 中,我們更加關(guān)注大的只,對(duì)于每個(gè),我們?cè)趯ふ抑杏谧罱囊粋€(gè)行向量,為了尋找它,我們?cè)赼ttention機(jī)制中加入:Locality-Sensitive Hashing (LSH)

如果它保留了數(shù)據(jù)點(diǎn)之間的距離信息,我們稱hashing機(jī)制是locality-sensitive的,這么做相近的向量可以獲得相似的hash,Reformer中,給定一個(gè)固定的隨機(jī)矩陣,其中是超參數(shù),hash函數(shù)為

在LSH attention中,一個(gè)query只可以和在相同的hashing bucket中的位置進(jìn)行交互,,

  • attention矩陣通常是稀疏的;
  • 使用LSH, 我們基于hash buckets可以對(duì)keys和queries進(jìn)行排序
  • 設(shè)置,這樣,一個(gè)bucket中的keys和queries相等,更便于批處理。有趣的是,這種“共享QK”配置并不影響Transformer的性能。
  • 使用個(gè)連續(xù)的group在一起的query的batching,

Reversible Residual Network

Reversible Residual Network的動(dòng)機(jī)是設(shè)計(jì)一種結(jié)構(gòu),使任何給定層的激活都可以從下一層的激活中恢復(fù),只需使用模型參數(shù)。因此,我們可以通過(guò)在backprop期間重新計(jì)算激活來(lái)節(jié)省內(nèi)存,而不是存儲(chǔ)所有激活。

給定一層, 傳統(tǒng)的residual layer都是做的,但是reversible layer將輸入和輸出split為,然后執(zhí)行下面的操作:

reversing就是:

我們將相同的思想應(yīng)用到Transformer中得到:

內(nèi)存可以通過(guò)chunking 前向計(jì)算進(jìn)行操作:

08

Make it Recurrent (Universal Transformer)

Universal Transformer將Transformer中的自我注意與RNN中的循環(huán)機(jī)制結(jié)合起來(lái),旨在受益于Transformer的長(zhǎng)期全局receptive field和RNN的學(xué)習(xí)inductive偏差。

Universal Transformer使用自適應(yīng)計(jì)算時(shí)間動(dòng)態(tài)調(diào)整步長(zhǎng)。如果我們固定步數(shù),一個(gè)通用變換器就相當(dāng)于一個(gè)多層變換器,具有跨層共享的參數(shù)。

在較高的層次上,Universal Transformer可以看作是學(xué)習(xí)每個(gè)token的隱藏狀態(tài)表示的遞歸函數(shù)。遞歸函數(shù)在標(biāo)記位置之間并行演化,位置之間的信息通過(guò)self-attention進(jìn)行共享。


給定長(zhǎng)度為的序列,Universal Transformer在第步迭代更新表示,在第0步,被出事為輸入embedding矩陣,所以的位置編碼在multi-head self-attenion中被并行處理,然后在經(jīng)過(guò)一個(gè)recurrent transition function

Transition()可以是一個(gè) separable convolution或者fully-connected neural network。


在Universal Transformer的自適應(yīng)版本中,循環(huán)步數(shù)由ACT動(dòng)態(tài)確定。每個(gè)位置都配有一個(gè)動(dòng)態(tài)停止機(jī)制。一旦每令牌循環(huán)塊停止,它將停止進(jìn)行更多的循環(huán)更新,而只是將當(dāng)前值復(fù)制到下一步,直到所有塊停止或直到模型達(dá)到最大步長(zhǎng)限制。

09

Stabilization for RL (GTrXL)

Self-attention避免了將整個(gè)過(guò)去壓縮成一個(gè)固定大小的隱藏狀態(tài),并且不像RNN那樣受到梯度消失或爆炸的影響。強(qiáng)化學(xué)習(xí)任務(wù)肯定能從這些特質(zhì)中受益。然而,即使在有監(jiān)督學(xué)習(xí)中,也很難訓(xùn)練Transformer,更不用說(shuō)在RL環(huán)境中了。畢竟,穩(wěn)定和訓(xùn)練一個(gè)LSTM代理本身可能是相當(dāng)具有挑戰(zhàn)性的。

Gated Transformer-XL (GTrXL)是使用Transformer到RL中的一次嘗試,GTrXL可以在Transformer-XL上成功穩(wěn)定的訓(xùn)練。

  • layer normalization應(yīng)用于residual模塊中的輸入流,而不應(yīng)用于shortcut流。這種重新排序的一個(gè)關(guān)鍵好處是允許原始輸入從第一層流到最后一層。

  • Residual連接被GRU樣式選通機(jī)制取代。

參考文獻(xiàn)

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多