從Seq2seq到Attention模型到Self Attention(二)

系列一介紹了Seq2seq和 Attention model。這篇文章將重點(diǎn)擺在Google於2017年發(fā)表論文“Attention is all you need”中提出的 “”The transformer模型。”The transformer”模型中主要的概念有2項(xiàng):1. Self attention 2. Multi-head,此外,模型更解決了傳統(tǒng)attention model中無(wú)法平行化的缺點(diǎn),并帶來(lái)優(yōu)異的成效。

前言

系列一中,我們學(xué)到attention model是如何運(yùn)作的,缺點(diǎn)就是不能平行化,且忽略了輸入句中文字間和目標(biāo)句中文字間的關(guān)係。

為了解決此問(wèn)題,2017年,Self attention誕生了。

Self Attention

Self attention是Google在 “Attention is all you need”論文中提出的”The transformer”模型中主要的概念之一,我們可以把”The transformer”想成是個(gè)黑盒子,將輸入句輸入這個(gè)黑盒子,就會(huì)產(chǎn)生目標(biāo)句。

最特別的地方是,”The transformer”完全捨棄了RNN、CNN的架構(gòu)。

The transformer

“The transformer”和Seq2seq模型皆包含兩部分:Encoder和Decoder。比較特別的是,”The transformer”中的Encoder是由6個(gè)Encoder堆積而成(paper當(dāng)中N=6),Deocder亦然,這和過(guò)去的attention model只使用一個(gè)encoder/decoder是不同的。

Query, Key, Value

進(jìn)入”The transformer”前,我們重新復(fù)習(xí)attention model,attention model是從輸入句<X1,X2,X3…Xm>產(chǎn)生h1,h2,h….hm的hidden state,透過(guò)attention score α 乘上input 的序列加權(quán)求和得到Context vector c_{i},有了context vector和hidden state vector,便可計(jì)算目標(biāo)句<y1…yn>。換言之,就是將輸入句作為input而目標(biāo)句作為output。

如果用另一種說(shuō)法重新詮釋:

輸入句中的每個(gè)文字是由一系列成對(duì)的 <地址Key, 元素Value>所構(gòu)成,而目標(biāo)中的每個(gè)文字是Query,那麼就可以用Key, Value, Query去重新解釋如何計(jì)算context vector,透過(guò)計(jì)算Query和各個(gè)Key的相似性,得到每個(gè)Key對(duì)應(yīng)Value的權(quán)重係數(shù),權(quán)重係數(shù)代表訊息的重要性,亦即attention score;Value則是對(duì)應(yīng)的訊息,再對(duì)Value進(jìn)行加權(quán)求和,得到最終的Attention/context vector。

筆者認(rèn)為這概念非常創(chuàng)新,特別是從attention model到”The transformer”間,鮮少有論文解釋這種想法是如何連結(jié)的,間接導(dǎo)致”attention is all you need”這篇論文難以入門(mén),有興趣可以參考key、value的起源論文 Key-Value Memory Networks for Directly Reading Documents。

在NLP的領(lǐng)域中,Key, Value通常就是指向同一個(gè)文字隱向量(word embedding vector)。

有了Key, Value, Query的概念,我們可以將attention model中的Decoder公式重新改寫(xiě)。1. score e_{ij}= Similarity(Query, Key_{i}),上一篇有提到3種計(jì)算權(quán)重的方式,而我們選擇用內(nèi)積。2. 有了Similarity(Query, Key_{i}),便可以透過(guò)softmax算出Softmax(sim_{i})=a_{i},接著就可以透過(guò)attention score a_{i}乘上Value_{i}的序列和加總所得 = Attention(Query, Source),也就是context/attention vector。

在了解Key, Value, Query的概念后,我們可以進(jìn)入”the transformer”的世界了。

Scaled Dot-Product Attention

如果仔細(xì)觀察,其實(shí)“The transformer”計(jì)算 attention score的方法和attention model如出一轍,但”The transformer”還要除上分母=根號(hào)d_{k},目的是避免內(nèi)積過(guò)大時(shí),softmax產(chǎn)出的結(jié)果非0即1。

Three kinds of Attention

“The transformer”在計(jì)算attention的方式有三種,1. encoder self attention,存在於encoder間. 2. decoder self attention,存在於decoder間,3. encoder-decoder attention, 這種attention算法和過(guò)去的attention model相似。

接下來(lái)我們透過(guò)encoder和decoder兩部份,來(lái)分別介紹encoder/decoder self attention。

Encoder

我們將”The transformer”模型分為左右兩部分,左邊是Encoder,如前述,”Attention is all you need”當(dāng)中N=6,代表Encoder部分是由6個(gè)encoder堆積而成的。其中在計(jì)算encoder self attention時(shí),更透過(guò)multi-head的方式去學(xué)習(xí)不同空間的特徵,在后續(xù)內(nèi)容會(huì)探討multi-head的部分。

如何計(jì)算encoder self attention?

我們先用微觀的角度來(lái)觀察Attention(q_{t}, K, V),也就是輸入句中的某個(gè)文字,再將所有輸入句中的文字一次用矩陣Attention(Q,K,V)來(lái)解決。

第一步是創(chuàng)造三個(gè)encoder的輸入向量Q,K,V,舉例來(lái)說(shuō),“Are you very big?”中的每一個(gè)字的隱向量都有各自的Q,K,V,接著我們會(huì)乘上一個(gè)初始化矩陣,論文中輸出維度d_{model}=512。

第二步是透過(guò)內(nèi)積來(lái)計(jì)算score <q_{t}, k_{s}>,類似attention model 中的score e_{ij}。假設(shè)我們?cè)谟?jì)算第一個(gè)字”Are”的self-attention,我們可能會(huì)將輸入句中的每個(gè)文字”Are”, ”you”, ‘very’, ‘big’分別和”Are”去做比較,這個(gè)分?jǐn)?shù)決定了我們?cè)趀ncode某個(gè)特定位置的文字時(shí),應(yīng)該給予多少注意力(attention)。所以當(dāng)我們?cè)谟?jì)算#位置1的self-attention,第一個(gè)分?jǐn)?shù)是q1、k1的內(nèi)積 (“Are vs Are”),第二個(gè)分?jǐn)?shù)則是q1、k2 (“Are vs you”),以此類推。

第三步是將算出的分?jǐn)?shù)除以根號(hào)d_{k},論文當(dāng)中假定d_{k}=64,接著傳遞至exponential函數(shù)中并乘上1/Z,其實(shí)這結(jié)果就是attention/softmax score,我們可以把1/Z看成是softmax時(shí),所除上的exponential總和,最終的總分?jǐn)?shù)就是attention score,代表我們應(yīng)該放多少注意力在這個(gè)位置上,也就是attention model的概念,有趣的是,怎麼算一定都會(huì)發(fā)現(xiàn)自己位置上的分?jǐn)?shù)永遠(yuǎn)最高,但有時(shí)候可以發(fā)現(xiàn)和其他位置的文字是有關(guān)聯(lián)的。

最后一步就是把a(bǔ)ttention score再乘上value,然后加總得到attention vector(z_{I}),這就是#位置1的attention vector z1,概念都和以往的attention model類似。

以上就是self-attention的計(jì)算,算出來(lái)的向量我們可以往前傳遞至feed-forward neural network,實(shí)際的運(yùn)作上,是直接將每個(gè)文字同時(shí)處理,因此會(huì)變成一個(gè)矩陣,而非單一詞向量,計(jì)算后的結(jié)果attention vector也會(huì)變成attention matrix Z。

Multi-head attention

有趣的是,如果我們只計(jì)算一個(gè)attention,很難捕捉輸入句中所有空間的訊息,為了優(yōu)化模型,論文當(dāng)中提出了一個(gè)新穎的做法:Multi-head attention,概念是不要只用d_{model}維度的key, value, query們做單一個(gè)attention,而是把key, value, query們線性投射到不同空間h次,分別變成維度d_{q}, d_{k} and d_{v},再各自做attention,其中,d_{k}=d_{v}=d_{model}/h=64,概念就是投射到h個(gè)head上。

此外,”The transformer”用了8個(gè)attention head,所以我們會(huì)產(chǎn)生8組encoder/decoder,每一組都代表將輸入文字的隱向量投射到不同空間,如果我們重復(fù)計(jì)算剛剛所講的self-attention,我們就會(huì)得到8個(gè)不同的矩陣Z,可是呢,feed-forward layer期望的是一個(gè)矩陣而非8個(gè),所以我們要把這8個(gè)矩陣併在一起,透過(guò)乘上一個(gè)權(quán)重矩陣,還原成一個(gè)矩陣Z。

Residual Connections

Encoder還有一個(gè)特別的架構(gòu),Multihead-attention完再接到feed-forward layer中間,還有一個(gè)sub-layer,會(huì)需要經(jīng)過(guò)residual connection和layer normalization。

Residual connection 就是構(gòu)建一種新的殘差結(jié)構(gòu),將輸出改寫(xiě)成和輸入的殘差,使得模型在訓(xùn)練時(shí),微小的變化可以被注意到,這種架構(gòu)很常用在電腦視覺(jué)(computer vision),有興趣可以參考神人Kaiming He的Deep Residual Learning for Image Recognition。

Layer normalization則是在深度學(xué)習(xí)領(lǐng)域中,其中一種正規(guī)化方法,最常和batch normalization進(jìn)行比較,layer normalization的優(yōu)點(diǎn)在於它是獨(dú)立計(jì)算的,也就是針對(duì)單一樣本進(jìn)行正規(guī)化,batch normalization則是針對(duì)各維度,因此和batch size有所關(guān)聯(lián),可以參考layer normalization。

Position-wise Feed-Forward Networks

Encoder/Decoder中的attention sublayers都會(huì)接到一層feed-forward networks(FFN):兩層線性轉(zhuǎn)換和一個(gè)RELU,論文中是根據(jù)各個(gè)位置(輸入句中的每個(gè)文字)分別做FFN,舉例來(lái)說(shuō),如果輸入文字是<x1,x2…xm>,代表文字共有m個(gè)。

其中,每個(gè)位置進(jìn)行相同的線性轉(zhuǎn)換,這邊使用的是convolution1D,也就是kernel size=1,原因是convolution1D才能保持位置的完整性,可參考CNN,模型的輸入/輸出維度d_{model}=512,但中間層的維度是2048,目的是為了減少計(jì)算量,這部分一樣參考神人Kaiming He的Deep Residual Learning for Image Recognition。

Positional Encoding

和RNN不同的是,multi-head attention不能學(xué)到輸入句中每個(gè)文字的位置,舉例來(lái)說(shuō),“Are you very big?” and “Are big very you?”,對(duì)multi-head而言,是一樣的語(yǔ)句,因此,”The transformer”透過(guò)positional encoding,來(lái)學(xué)習(xí)每個(gè)文字的相對(duì)/絕對(duì)位置,最后再和輸入句中文字的隱向量相加。

論文使用了方程式PE(pos, 2i)=sin(pos/10000^{2i/d_{model}})、PE(pos, 2i+1)=cos(pos/10000^{2i/d_{model}})來(lái)計(jì)算positional encoding,pos代表的是位置,i代表的是維度,偶數(shù)位置的文字會(huì)透過(guò)sin函數(shù)進(jìn)行轉(zhuǎn)換,奇數(shù)位置的文字則透過(guò)cos函數(shù)進(jìn)行轉(zhuǎn)換,藉由三角函數(shù),可以發(fā)現(xiàn)positional encoding 是個(gè)有週期性的波長(zhǎng);舉例來(lái)說(shuō),[pos+k]可以寫(xiě)成PE[pos]的線性轉(zhuǎn)換,使得模型可以學(xué)到不同位置文字間的相對(duì)位置。

如下圖,假設(shè)embedding 的維度為4:

每列對(duì)應(yīng)的是經(jīng)過(guò)positional encoding后的向量,以第一列而言,就是輸入句中第一個(gè)文字隱向量和positioncal encoding后的向量和,所以每列維度都是d_{model},總共有pos列,也就是代表輸入句中有幾個(gè)文字。

下圖為含有20字的輸入句,文字向量維度為512,可以發(fā)現(xiàn)圖層隨著位置產(chǎn)生變化。

Encoder內(nèi)容告一段落,接下來(lái)讓我們看Decoder的運(yùn)作模式。

Decoder

Masked multi-head attention

Decoder的運(yùn)作模式和Encoder大同小異,也都是經(jīng)過(guò)residual connections再到layer normalization。Encoder中的self attention在計(jì)算時(shí),key, value, query都是來(lái)自encoder前一層的輸出,Decoder亦然。

不同的地方是,為了避免在解碼的時(shí)后,還在翻譯前半段時(shí),就突然翻譯到后半段的句子,會(huì)在計(jì)算self-attention時(shí)的softmax前先mask掉未來(lái)的位置(設(shè)定成-∞)。這個(gè)步驟確保在預(yù)測(cè)位置i的時(shí)候只能根據(jù)i之前位置的輸出,其實(shí)這個(gè)是因應(yīng)Encoder-Decoder attention 的特性而做的配套措施,因?yàn)镋ncoder-Decoder attention可以看到encoder的整個(gè)句子,

Encoder-Decoder Attention

“Encoder-Decoder Attention”和Encoder/Decoder self attention不一樣,它的Query來(lái)自於decoder self-attention,而Key、Value則是encoder的output。

至此,我們講完了三種attention,接著看整體運(yùn)作模式。

從輸入文字的序列給Encoder開(kāi)始,Encoder的output會(huì)變成attention vectors的Key、Value,接著傳送至encoder-decoder attention layer,幫助Decoder該將注意力擺在輸入文字序列的哪個(gè)位置進(jìn)行解碼。

The Final Linear and Softmax Layer

Decoder最后會(huì)產(chǎn)出一個(gè)向量,傳到最后一層linear layer后做softmax。Linear layer只是單純的全連接層網(wǎng)絡(luò),并產(chǎn)生每個(gè)文字對(duì)應(yīng)的分?jǐn)?shù),softmax layer會(huì)將分?jǐn)?shù)轉(zhuǎn)成機(jī)率值,最高機(jī)率的值就是在這個(gè)時(shí)間順序時(shí)所要產(chǎn)生的文字。

Why self attention?

過(guò)去,Encoder和Decoder的核心架構(gòu)都是RNN,RNN把輸入句的文字序列 (x1…, xn)一個(gè)個(gè)有序地轉(zhuǎn)成hidden encodings (h1…h(huán)n),接著在產(chǎn)出目標(biāo)句的文字序列(y1…yn)。然而,RNN的序列性導(dǎo)致模型不可能平行計(jì)算,此外,也導(dǎo)致計(jì)算復(fù)雜度很高,而且,很難捕捉長(zhǎng)序列中詞語(yǔ)的依賴關(guān)係(long-range dependencies)。

透過(guò) “the transformer”,我們可以用multi-head attention來(lái)解決平行化和計(jì)算復(fù)雜度過(guò)高的問(wèn)題,依賴關(guān)係也能透過(guò)self-attention中詞語(yǔ)與詞語(yǔ)比較時(shí),長(zhǎng)度只有1的方式來(lái)克服。

Future

在金融業(yè),企業(yè)可以透過(guò)客戶歷程,深入了解客戶行為企業(yè),進(jìn)而提供更好的商品與服務(wù)、提升客戶滿意度,藉此創(chuàng)造價(jià)值。然而,和以往的基本特徵不同,從序列化的客戶歷程資料去萃取資訊是非常困難的,在有了self-attention的知識(shí)后,我們可以將這種處理序列資料的概念應(yīng)用在復(fù)雜的客戶歷程上,探索客戶潛在行為背后無(wú)限的商機(jī)。

筆者也推薦有興趣鉆研self-attention概念的讀者,可以參考阿里巴巴所提出的論文ATrank,此篇論文將self-attention應(yīng)用在產(chǎn)品推薦上,并帶來(lái)更好的成效。

參考

[1] Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translationr. arXiv:1406.1078v3 (2014).

[2] Sequence to Sequence Learning with Neural Networks. arXiv:1409.3215v3 (2014).

[3] Neural machine translation by joint learning to align and translate. arXiv:1409.0473v7 (2016).

[4] Effective Approaches to Attention-based Neural Machine Translation. arXiv:1508.0402v5 (2015).

[5] Convolutional Sequence to Sequence learning. arXiv:1705.03122v3(2017).

[6] Attention Is All You Need. arXiv:1706.03762v5 (2017).

[7] ATRank: An Attention-Based User Behavior Modeling Framework for Recommendation. arXiv:1711.06632v2 (2017).

[8] Key-Value Memory Networks for Directly Reading Documents. arXiv:1606.03126v2 (2016).

[9] Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. arXiv:1502.03044v3 (2016).

[10] Deep Residual Learning for Image Recognition. arXiv:1512.03385v1 (2015).

[11] Layer Normalization. arXiv:1607.06450v1 (2016).

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

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

  • 近一兩年,注意力模型(Attention Model)是深度學(xué)習(xí)領(lǐng)域最受矚目的新星,用來(lái)處理與序列相關(guān)的數(shù)據(jù),特別...
    高斯純牛奶閱讀 6,580評(píng)論 2 21
  • 本文將通過(guò)細(xì)節(jié)剖析以及代碼相結(jié)合的方式,來(lái)一步步解析Attention is all you need這篇文章。 ...
    文哥的學(xué)習(xí)日記閱讀 90,717評(píng)論 22 114
  • 今天做完深度學(xué)習(xí)的論文分享,將這篇論文記錄下來(lái),以便日后回顧查看。PS:簡(jiǎn)書(shū)不支持 MathJax 編輯公式,簡(jiǎn)直...
    是neinei啊閱讀 98,530評(píng)論 15 66
  • 最近學(xué)習(xí)狀態(tài)不好,演講班的作業(yè)欠了一個(gè)星期了,閱讀的內(nèi)容很少,運(yùn)動(dòng)也沒(méi)有跟上,甚至連007文章也敷衍了一篇,點(diǎn)評(píng)也...
    劉美三閱讀 720評(píng)論 1 2
  • -2016.11.09- 餅干,告罄! 薯片,告罄! 酸奶,告罄! 大米和瘦肉,也都告罄?! 唉,早上起來(lái)就還沒(méi)吃...
    蘇昀閱讀 164評(píng)論 0 0

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