Attention Is All You Need簡記(多頭注意力、自注意力、層歸一化、位置嵌入)

首先注意力模型可以宏觀上理解為一個查詢(query)到一系列(鍵key-值value)對的映射。

將Source(源)中的構(gòu)成元素想象成是由一系列的<Key,Value>數(shù)據(jù)對構(gòu)成,此時給定Target(目標)中的某個元素Query(查詢),通過計算Query和各個Key的相似性或者相關(guān)性,得到每個Key對應(yīng)Value的權(quán)重系數(shù),通過softmax歸一化后,對權(quán)重和相應(yīng)Value進行加權(quán)求和,即得到了最終的Attention數(shù)值。所以本質(zhì)上Attention機制是對Source中元素的Value值進行加權(quán)求和,而Query和Key用來計算對應(yīng)Value的權(quán)重系數(shù)。目前在NLP研究中,key和value常常都是同一個,即key=value。

注意力模型可以宏觀上理解為一個查詢(Query)到一系列(鍵key-值value)對的映射


Attention Is All You Need(2017.6)

放縮點積attention層圖示定義式
逐向量來看上圖結(jié)構(gòu)

其中 Z 是歸一化因子。K、V 是一一對應(yīng)的,它們就像是 key-value 的關(guān)系,那么上式的意思就是通過 q_t這個 query,通過與各個k_s內(nèi)積的并?softmax 的方式,來得到?q_t 與各個v_s 的相似度,然后加權(quán)求和,得到一個 d_v維的向量。此處在進行q_t、v_s相似度計算時,使用點積,除此之外還有拼接,感知機等方式。

其中因子\sqrt{d_k} 起到調(diào)節(jié)作用,使得上方內(nèi)積不至于太大(太大的話 softmax 后就非 0 即 1 了,不夠“soft”了),其中\sqrt{d_k} 指的是鍵向量維度的平方根。


1、多頭attention(Multi-head attention)

多頭attention允許模型同時注意來自不同位置的不同表示子空間的信息

多頭attention(Multi-head attention)結(jié)構(gòu)如上圖,Query,Key,Value首先進過一個線性變換,然后輸入到放縮點積attention,注意這里要做h次,也就是所謂的多頭,每一次算一個頭,頭之間參數(shù)不共享,每次Q,K,V進行線性變換的參數(shù)W是不一樣的。然后將h次的放縮點積attention結(jié)果進行拼接,再進行一次線性變換得到的值作為多頭attention的結(jié)果。

可以看到,google提出來的多頭attention的不同之處在于進行了h次計算而不僅僅算一次,論文中說到這樣的好處是可以允許模型在不同的表示子空間里學(xué)習(xí)到相關(guān)的信息。


2、自注意力(Self Attention)

所謂 Self Attention,其實就是 Attention(X,X,X),X 就是前面說的輸入序列。Self-attention即K=V=Q,例如輸入一個句子,那么里面的每個詞都要和該句子中的所有詞進行attention計算。目的是學(xué)習(xí)句子內(nèi)部的詞依賴關(guān)系,捕獲句子的內(nèi)部結(jié)構(gòu)。更準確來說,Google 所用的是 Self Multi-Head Attention。

自注意力可以提取句子自身詞間依賴,比如常用短語、代詞指代的事物等。或者說, 這層幫助編碼器在對每個單詞編碼時關(guān)注輸入句子的其他單詞。

對于使用自注意力機制的原因,論文中提到主要從三個方面考慮(每一層的復(fù)雜度,是否可以并行,長距離依賴學(xué)習(xí)),并給出了和RNN,CNN計算復(fù)雜度的比較。

1、可以看到,如果輸入序列n小于表示維度d的話,每一層的時間復(fù)雜度self-attention是比較有優(yōu)勢的。當(dāng)n比較大時,作者也給出了一種解決方案self-attention(restricted)即每個詞不是和所有詞計算attention,而是只與限制的r個詞去計算attention。

2、在并行方面,多頭attention和CNN一樣不依賴于前一時刻的計算,可以很好的并行,優(yōu)于RNN。

3、在長距離依賴上,由于self-attention是每個詞和所有詞都要計算attention,所以不管他們中間有多長距離,最大的路徑長度也都只是1。能夠無視詞之間的距離直接計算依賴關(guān)系,能夠?qū)W習(xí)一個句子的內(nèi)部結(jié)構(gòu)。

????????先來看一個翻譯的例子“I arrived at the bank after crossing the river” 這里面的bank指的是銀行還是河岸呢,這就需要我們聯(lián)系上下文,當(dāng)我們看到river之后就應(yīng)該知道這里bank很大概率指的是河岸。在RNN中我們就需要一步步的順序處理從bank到river的所有詞語,而當(dāng)它們相距較遠時RNN的效果常常較差,且由于其順序性處理效率也較低。

????????Self-Attention則利用了Attention機制,計算每個單詞與其他所有單詞之間的關(guān)聯(lián),在這句話里,當(dāng)翻譯bank一詞時,river一詞就有較高的Attention score。利用這些Attention score就可以得到一個加權(quán)的表示,然后再放到一個前饋神經(jīng)網(wǎng)絡(luò)中得到新的表示,這一表示很好的考慮到上下文的信息。總之Self-Attention機制對每一個詞得到新的考慮了上下文信息的表征。


3、位置嵌入(Position Embedding)

上述模型并不能學(xué)習(xí)序列的順序。換句話說,如果將 K,V 按行打亂順序(相當(dāng)于句子中的詞序打亂),那么 Attention 的結(jié)果還是一樣的。學(xué)習(xí)不到順序信息,那么效果將會大打折扣(比如機器翻譯中,有可能只把每個詞都翻譯出來了,但是不能組織成合理的句子)。這就引出了位置向量(Position Embedding)。

將每個位置編號,然后每個編號對應(yīng)一個向量,通過結(jié)合位置向量和詞向量,就給每個詞都引入了一定的位置信息,這樣 Attention 就可以分辨出不同位置的詞了,進而學(xué)習(xí)位置信息了。

在Attention Is All You Need一文中,Google直接給出了位置向量構(gòu)造公式:

這里的意思是將 id 為 p的位置映射為一個?d_{pos}維的位置向量,這個向量的第i個元素的數(shù)值就是 PE_i(p)

位置向量是絕對位置信息,相對位置信息也很重要。Google 選擇前述的位置向量公式的一個重要原因如下:由于我們有 sin(α+β)=sinα·cosβ+cosα·sinβ 以及 cos(α+β)=cosα·cosβ?sinα·sinβ,這表明位置 p+k 的向量可以表示成位置 p、k 的向量的線性變換,這提供了表達相對位置信息的可能性。

結(jié)合位置向量和詞向量有幾個可選方案,可以把它們拼接起來作為一個新向量,也可以把位置向量定義為跟詞向量一樣大小,然后兩者加起來,Attention Is All You Need使用的是后者。


4、Layer Normalization

LN(左)和BN(右)對比示意圖??

我們指出BN并不適用于RNN等動態(tài)網(wǎng)絡(luò)和batchsize較小的時候效果不好。Layer Normalization(LN)的提出有效的解決BN的這兩個問題。LN和BN不同點是歸一化的維度是互相垂直的,如圖1所示。在圖1中N表示樣本軸,C表示通道軸,F是每個通道的特征數(shù)量。BN如右側(cè)所示,它是取不同樣本的同一個通道的特征做歸一化;LN則是如左側(cè)所示,它取的是同一個樣本的不同通道做歸一化。

LN是和BN非常近似的一種歸一化方法,不同的是BN取的是不同樣本的同一個特征,而LN取的是同一個樣本的不同特征。在BN和LN都能使用的場景中,BN的效果一般優(yōu)于LN,原因是基于不同數(shù)據(jù),同一特征得到的歸一化特征更不容易損失信息。但是有些場景是不能使用BN的,例如batchsize較小或者在RNN中,這時候可以選擇使用LN,LN得到的模型更穩(wěn)定且起到正則化的作用。RNN能應(yīng)用到小批量和RNN中是因為LN的歸一化統(tǒng)計量的計算是和batchsize沒有關(guān)系的。


5、transformer

綜合上述部分組成整體結(jié)構(gòu)transformer

transformer模型分為編碼器解碼器兩個部分。

編碼器由6個相同的層堆疊在一起,每一層又有兩個支層。第一個支層是一個多頭的自注意機制,第二個支層是一個簡單的全連接前饋網(wǎng)絡(luò)。在兩個支層外面都添加了一個殘差連接(residual),然后進行了layer nomalization的操作。模型所有的支層以及embedding層的輸出維度都是d_{model}。

解碼器也是堆疊了6個相同的層。不過每層除了編碼器中那兩個支層,解碼器還加入了第三個支層,如圖中所示同樣也用了殘差連接以及l(fā)ayer normalization。


另一篇關(guān)于transformer:transformer再記(編碼器)

酷文章:BERT大火卻不懂Transformer?讀這一篇就夠了

有用的文章:? ? ? ? ? ? ? ?關(guān)于transformer各組件的說明

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?transformer代碼注解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容