首先注意力模型可以宏觀上理解為一個(gè)查詢(query)到一系列(鍵key-值value)對(duì)的映射腕巡。
將Source(源)中的構(gòu)成元素想象成是由一系列的<Key,Value>數(shù)據(jù)對(duì)構(gòu)成玄坦,此時(shí)給定Target(目標(biāo))中的某個(gè)元素Query(查詢),通過(guò)計(jì)算Query和各個(gè)Key的相似性或者相關(guān)性绘沉,得到每個(gè)Key對(duì)應(yīng)Value的權(quán)重系數(shù)煎楣,通過(guò)softmax歸一化后,對(duì)權(quán)重和相應(yīng)Value進(jìn)行加權(quán)求和车伞,即得到了最終的Attention數(shù)值择懂。所以本質(zhì)上Attention機(jī)制是對(duì)Source中元素的Value值進(jìn)行加權(quán)求和,而Query和Key用來(lái)計(jì)算對(duì)應(yīng)Value的權(quán)重系數(shù)另玖。目前在NLP研究中困曙,key和value常常都是同一個(gè)表伦,即key=value。
Attention Is All You Need(2017.6)
其中 是歸一化因子赂弓。 是一一對(duì)應(yīng)的,它們就像是 key-value 的關(guān)系盈魁,那么上式的意思就是通過(guò) 這個(gè) query翔怎,通過(guò)與各個(gè)內(nèi)積的并? 的方式,來(lái)得到? 與各個(gè) 的相似度杨耙,然后加權(quán)求和赤套,得到一個(gè) 維的向量。此處在進(jìn)行珊膜、相似度計(jì)算時(shí)容握,使用點(diǎn)積,除此之外還有拼接车柠,感知機(jī)等方式剔氏。
其中因子起到調(diào)節(jié)作用,使得上方內(nèi)積不至于太大(太大的話 softmax 后就非 0 即 1 了竹祷,不夠“soft”了)谈跛,其中指的是鍵向量維度的平方根。
1塑陵、多頭attention(Multi-head attention)
多頭attention(Multi-head attention)結(jié)構(gòu)如上圖感憾,Query,Key令花,Value首先進(jìn)過(guò)一個(gè)線性變換阻桅,然后輸入到放縮點(diǎn)積attention,注意這里要做h次兼都,也就是所謂的多頭嫂沉,每一次算一個(gè)頭,頭之間參數(shù)不共享扮碧,每次Q趟章,K,V進(jìn)行線性變換的參數(shù)是不一樣的芬萍。然后將h次的放縮點(diǎn)積attention結(jié)果進(jìn)行拼接,再進(jìn)行一次線性變換得到的值作為多頭attention的結(jié)果搔啊。
可以看到柬祠,google提出來(lái)的多頭attention的不同之處在于進(jìn)行了h次計(jì)算而不僅僅算一次,論文中說(shuō)到這樣的好處是可以允許模型在不同的表示子空間里學(xué)習(xí)到相關(guān)的信息负芋。
2漫蛔、自注意力(Self Attention)
所謂 Self Attention嗜愈,其實(shí)就是 Attention(X,X,X),X 就是前面說(shuō)的輸入序列莽龟。Self-attention即K=V=Q蠕嫁,例如輸入一個(gè)句子,那么里面的每個(gè)詞都要和該句子中的所有詞進(jìn)行attention計(jì)算毯盈。目的是學(xué)習(xí)句子內(nèi)部的詞依賴關(guān)系剃毒,捕獲句子的內(nèi)部結(jié)構(gòu)。更準(zhǔn)確來(lái)說(shuō)搂赋,Google 所用的是 Self Multi-Head Attention赘阀。
自注意力可以提取句子自身詞間依賴,比如常用短語(yǔ)脑奠、代詞指代的事物等基公。或者說(shuō)宋欺, 這層幫助編碼器在對(duì)每個(gè)單詞編碼時(shí)關(guān)注輸入句子的其他單詞轰豆。
對(duì)于使用自注意力機(jī)制的原因,論文中提到主要從三個(gè)方面考慮(每一層的復(fù)雜度齿诞,是否可以并行酸休,長(zhǎng)距離依賴學(xué)習(xí)),并給出了和RNN掌挚,CNN計(jì)算復(fù)雜度的比較雨席。
1、可以看到吠式,如果輸入序列n小于表示維度d的話陡厘,每一層的時(shí)間復(fù)雜度self-attention是比較有優(yōu)勢(shì)的。當(dāng)n比較大時(shí)特占,作者也給出了一種解決方案self-attention(restricted)即每個(gè)詞不是和所有詞計(jì)算attention糙置,而是只與限制的r個(gè)詞去計(jì)算attention。
2是目、在并行方面谤饭,多頭attention和CNN一樣不依賴于前一時(shí)刻的計(jì)算,可以很好的并行懊纳,優(yōu)于RNN揉抵。
3、在長(zhǎng)距離依賴上嗤疯,由于self-attention是每個(gè)詞和所有詞都要計(jì)算attention冤今,所以不管他們中間有多長(zhǎng)距離,最大的路徑長(zhǎng)度也都只是1茂缚。能夠無(wú)視詞之間的距離直接計(jì)算依賴關(guān)系戏罢,能夠?qū)W習(xí)一個(gè)句子的內(nèi)部結(jié)構(gòu)屋谭。
????????先來(lái)看一個(gè)翻譯的例子“I arrived at the bank after crossing the river” 這里面的bank指的是銀行還是河岸呢,這就需要我們聯(lián)系上下文龟糕,當(dāng)我們看到river之后就應(yīng)該知道這里bank很大概率指的是河岸桐磁。在RNN中我們就需要一步步的順序處理從bank到river的所有詞語(yǔ),而當(dāng)它們相距較遠(yuǎn)時(shí)RNN的效果常常較差讲岁,且由于其順序性處理效率也較低我擂。
????????Self-Attention則利用了Attention機(jī)制,計(jì)算每個(gè)單詞與其他所有單詞之間的關(guān)聯(lián)催首,在這句話里扶踊,當(dāng)翻譯bank一詞時(shí),river一詞就有較高的Attention score郎任。利用這些Attention score就可以得到一個(gè)加權(quán)的表示秧耗,然后再放到一個(gè)前饋神經(jīng)網(wǎng)絡(luò)中得到新的表示,這一表示很好的考慮到上下文的信息舶治》志總之Self-Attention機(jī)制對(duì)每一個(gè)詞得到新的考慮了上下文信息的表征。
3霉猛、位置嵌入(Position Embedding)
上述模型并不能學(xué)習(xí)序列的順序尺锚。換句話說(shuō),如果將 K,V 按行打亂順序(相當(dāng)于句子中的詞序打亂)惜浅,那么 Attention 的結(jié)果還是一樣的瘫辩。學(xué)習(xí)不到順序信息,那么效果將會(huì)大打折扣(比如機(jī)器翻譯中坛悉,有可能只把每個(gè)詞都翻譯出來(lái)了伐厌,但是不能組織成合理的句子)。這就引出了位置向量(Position Embedding)裸影。
將每個(gè)位置編號(hào)挣轨,然后每個(gè)編號(hào)對(duì)應(yīng)一個(gè)向量,通過(guò)結(jié)合位置向量和詞向量轩猩,就給每個(gè)詞都引入了一定的位置信息卷扮,這樣 Attention 就可以分辨出不同位置的詞了,進(jìn)而學(xué)習(xí)位置信息了均践。
在Attention Is All You Need一文中晤锹,Google直接給出了位置向量構(gòu)造公式:
這里的意思是將 id 為 的位置映射為一個(gè)?維的位置向量,這個(gè)向量的第個(gè)元素的數(shù)值就是 彤委。
位置向量是絕對(duì)位置信息鞭铆,相對(duì)位置信息也很重要。Google 選擇前述的位置向量公式的一個(gè)重要原因如下:由于我們有 sin(α+β)=sinα·cosβ+cosα·sinβ 以及 cos(α+β)=cosα·cosβ?sinα·sinβ葫慎,這表明位置 p+k 的向量可以表示成位置 p衔彻、k 的向量的線性變換,這提供了表達(dá)相對(duì)位置信息的可能性偷办。
結(jié)合位置向量和詞向量有幾個(gè)可選方案艰额,可以把它們拼接起來(lái)作為一個(gè)新向量,也可以把位置向量定義為跟詞向量一樣大小椒涯,然后兩者加起來(lái)柄沮,Attention Is All You Need使用的是后者。
4废岂、Layer Normalization
我們指出BN并不適用于RNN等動(dòng)態(tài)網(wǎng)絡(luò)和batchsize較小的時(shí)候效果不好祖搓。Layer Normalization(LN)的提出有效的解決BN的這兩個(gè)問(wèn)題。LN和BN不同點(diǎn)是歸一化的維度是互相垂直的湖苞,如圖1所示拯欧。在圖1中表示樣本軸,表示通道軸财骨,是每個(gè)通道的特征數(shù)量镐作。BN如右側(cè)所示,它是取不同樣本的同一個(gè)通道的特征做歸一化隆箩;LN則是如左側(cè)所示该贾,它取的是同一個(gè)樣本的不同通道做歸一化。
LN是和BN非常近似的一種歸一化方法捌臊,不同的是BN取的是不同樣本的同一個(gè)特征杨蛋,而LN取的是同一個(gè)樣本的不同特征。在BN和LN都能使用的場(chǎng)景中理澎,BN的效果一般優(yōu)于LN逞力,原因是基于不同數(shù)據(jù),同一特征得到的歸一化特征更不容易損失信息矾端。但是有些場(chǎng)景是不能使用BN的掏击,例如batchsize較小或者在RNN中,這時(shí)候可以選擇使用LN秩铆,LN得到的模型更穩(wěn)定且起到正則化的作用砚亭。RNN能應(yīng)用到小批量和RNN中是因?yàn)長(zhǎng)N的歸一化統(tǒng)計(jì)量的計(jì)算是和batchsize沒(méi)有關(guān)系的。
5殴玛、transformer
綜合上述部分組成整體結(jié)構(gòu)
transformer模型分為編碼器和解碼器兩個(gè)部分捅膘。
編碼器由6個(gè)相同的層堆疊在一起,每一層又有兩個(gè)支層滚粟。第一個(gè)支層是一個(gè)多頭的自注意機(jī)制寻仗,第二個(gè)支層是一個(gè)簡(jiǎn)單的全連接前饋網(wǎng)絡(luò)。在兩個(gè)支層外面都添加了一個(gè)殘差連接(residual)凡壤,然后進(jìn)行了layer nomalization的操作署尤。模型所有的支層以及embedding層的輸出維度都是耙替。
解碼器也是堆疊了6個(gè)相同的層。不過(guò)每層除了編碼器中那兩個(gè)支層曹体,解碼器還加入了第三個(gè)支層俗扇,如圖中所示同樣也用了殘差連接以及l(fā)ayer normalization。
另一篇關(guān)于transformer:transformer再記(編碼器)
酷文章:BERT大火卻不懂Transformer箕别?讀這一篇就夠了
有用的文章:? ? ? ? ? ? ? ?關(guān)于transformer各組件的說(shuō)明