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

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

前言

系列一中嵌莉,我們學到attention model是如何運作的进萄,缺點就是不能平行化,且忽略了輸入句中文字間和目標句中文字間的關(guān)係锐峭。

為了解決此問題中鼠,2017年,Self attention誕生了沿癞。

Self Attention

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

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

The transformer

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

Query, Key, Value

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

如果用另一種說法重新詮釋:

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

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

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

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

在了解Key, Value, Query的概念后,我們可以進入”the transformer”的世界了窍箍。

Scaled Dot-Product Attention

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

Three kinds of Attention

“The transformer”在計算attention的方式有三種晰搀,1. encoder self attention,存在於encoder間. 2. decoder self attention办斑,存在於decoder間外恕,3. encoder-decoder attention, 這種attention算法和過去的attention model相似杆逗。

接下來我們透過encoder和decoder兩部份,來分別介紹encoder/decoder self attention鳞疲。

Encoder

我們將”The transformer”模型分為左右兩部分罪郊,左邊是Encoder,如前述尚洽,”Attention is all you need”當中N=6悔橄,代表Encoder部分是由6個encoder堆積而成的腺毫。其中在計算encoder self attention時睛挚,更透過multi-head的方式去學習不同空間的特徵勃教,在后續(xù)內(nèi)容會探討multi-head的部分。

如何計算encoder self attention?

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

第一步是創(chuàng)造三個encoder的輸入向量Q,K,V豁生,舉例來說迅脐,“Are you very big?”中的每一個字的隱向量都有各自的Q,K,V树碱,接著我們會乘上一個初始化矩陣赎婚,論文中輸出維度d_{model}=512福贞。

第二步是透過內(nèi)積來計算score <q_{t}, k_{s}>拇舀,類似attention model 中的score e_{ij}要拂。假設(shè)我們在計算第一個字”Are”的self-attention彻况,我們可能會將輸入句中的每個文字”Are”, ”you”, ‘very’, ‘big’分別和”Are”去做比較纽甘,這個分數(shù)決定了我們在encode某個特定位置的文字時,應(yīng)該給予多少注意力(attention)抽碌。所以當我們在計算#位置1的self-attention悍赢,第一個分數(shù)是q1、k1的內(nèi)積 (“Are vs Are”)货徙,第二個分數(shù)則是q1左权、k2 (“Are vs you”),以此類推痴颊。

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

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

以上就是self-attention的計算,算出來的向量我們可以往前傳遞至feed-forward neural network怠李,實際的運作上圾叼,是直接將每個文字同時處理,因此會變成一個矩陣捺癞,而非單一詞向量夷蚊,計算后的結(jié)果attention vector也會變成attention matrix Z。

Multi-head attention

有趣的是髓介,如果我們只計算一個attention惕鼓,很難捕捉輸入句中所有空間的訊息,為了優(yōu)化模型唐础,論文當中提出了一個新穎的做法:Multi-head attention箱歧,概念是不要只用d_{model}維度的key, value, query們做單一個attention矾飞,而是把key, value, query們線性投射到不同空間h次,分別變成維度d_{q}, d_{k} and d_{v}呀邢,再各自做attention洒沦,其中,d_{k}=d_{v}=d_{model}/h=64价淌,概念就是投射到h個head上申眼。

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

Residual Connections

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

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

Layer normalization則是在深度學習領(lǐng)域中鲸沮,其中一種正規(guī)化方法间坐,最常和batch normalization進行比較,layer normalization的優(yōu)點在於它是獨立計算的您朽,也就是針對單一樣本進行正規(guī)化绑洛,batch normalization則是針對各維度救斑,因此和batch size有所關(guān)聯(lián),可以參考layer normalization真屯。

Position-wise Feed-Forward Networks

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

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

Positional Encoding

和RNN不同的是母谎,multi-head attention不能學到輸入句中每個文字的位置,舉例來說京革,“Are you very big?” and “Are big very you?”奇唤,對multi-head而言,是一樣的語句匹摇,因此咬扇,”The transformer”透過positional encoding,來學習每個文字的相對/絕對位置廊勃,最后再和輸入句中文字的隱向量相加懈贺。

論文使用了方程式PE(pos, 2i)=sin(pos/10000^{2i/d_{model}})、PE(pos, 2i+1)=cos(pos/10000^{2i/d_{model}})來計算positional encoding坡垫,pos代表的是位置梭灿,i代表的是維度,偶數(shù)位置的文字會透過sin函數(shù)進行轉(zhuǎn)換冰悠,奇數(shù)位置的文字則透過cos函數(shù)進行轉(zhuǎn)換堡妒,藉由三角函數(shù),可以發(fā)現(xiàn)positional encoding 是個有週期性的波長溉卓;舉例來說皮迟,[pos+k]可以寫成PE[pos]的線性轉(zhuǎn)換,使得模型可以學到不同位置文字間的相對位置的诵。

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

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

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

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

Decoder

Masked multi-head attention

Decoder的運作模式和Encoder大同小異忧勿,也都是經(jīng)過residual connections再到layer normalization杉女。Encoder中的self attention在計算時,key, value, query都是來自encoder前一層的輸出鸳吸,Decoder亦然熏挎。

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

Encoder-Decoder Attention

“Encoder-Decoder Attention”和Encoder/Decoder self attention不一樣积担,它的Query來自於decoder self-attention,而Key猬仁、Value則是encoder的output磅轻。

至此,我們講完了三種attention逐虚,接著看整體運作模式聋溜。

從輸入文字的序列給Encoder開始,Encoder的output會變成attention vectors的Key叭爱、Value撮躁,接著傳送至encoder-decoder attention layer,幫助Decoder該將注意力擺在輸入文字序列的哪個位置進行解碼买雾。

The Final Linear and Softmax Layer

Decoder最后會產(chǎn)出一個向量把曼,傳到最后一層linear layer后做softmax。Linear layer只是單純的全連接層網(wǎng)絡(luò)漓穿,并產(chǎn)生每個文字對應(yīng)的分數(shù)嗤军,softmax layer會將分數(shù)轉(zhuǎn)成機率值,最高機率的值就是在這個時間順序時所要產(chǎn)生的文字晃危。

Why self attention?

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

透過 “the transformer”哲嘲,我們可以用multi-head attention來解決平行化和計算復(fù)雜度過高的問題,依賴關(guān)係也能透過self-attention中詞語與詞語比較時媳禁,長度只有1的方式來克服撤蚊。

Future

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

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

參考

[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)容合作請聯(lián)系作者
  • 序言:七十年代末疫衩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荣德,更是在濱河造成了極大的恐慌闷煤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涮瞻,死亡現(xiàn)場離奇詭異鲤拿,居然都是意外死亡,警方通過查閱死者的電腦和手機署咽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門近顷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事幕庐【米叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵异剥,是天一觀的道長瑟由。 經(jīng)常有香客問我,道長冤寿,這世上最難降的妖魔是什么歹苦? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮督怜,結(jié)果婚禮上殴瘦,老公的妹妹穿的比我還像新娘。我一直安慰自己号杠,他們只是感情好蚪腋,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姨蟋,像睡著了一般屉凯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眼溶,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天悠砚,我揣著相機與錄音,去河邊找鬼堂飞。 笑死灌旧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绰筛。 我是一名探鬼主播枢泰,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铝噩!你這毒婦竟也來了宗苍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薄榛,失蹤者是張志新(化名)和其女友劉穎讳窟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敞恋,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡丽啡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硬猫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片补箍。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡改执,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坑雅,到底是詐尸還是另有隱情辈挂,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布裹粤,位于F島的核電站终蒂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏遥诉。R本人自食惡果不足惜拇泣,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矮锈。 院中可真熱鬧霉翔,春花似錦、人聲如沸苞笨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瀑凝。三九已至序芦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猜丹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工硅卢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留射窒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓将塑,卻偏偏與公主長得像脉顿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子点寥,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 近一兩年艾疟,注意力模型(Attention Model)是深度學習領(lǐng)域最受矚目的新星,用來處理與序列相關(guān)的數(shù)據(jù)敢辩,特別...
    高斯純牛奶閱讀 6,340評論 2 21
  • 本文將通過細節(jié)剖析以及代碼相結(jié)合的方式戚长,來一步步解析Attention is all you need這篇文章盗冷。 ...
    文哥的學習日記閱讀 89,636評論 22 114
  • 今天做完深度學習的論文分享,將這篇論文記錄下來同廉,以便日后回顧查看仪糖。PS:簡書不支持 MathJax 編輯公式柑司,簡直...
    是neinei啊閱讀 93,707評論 15 66
  • 最近學習狀態(tài)不好,演講班的作業(yè)欠了一個星期了锅劝,閱讀的內(nèi)容很少攒驰,運動也沒有跟上,甚至連007文章也敷衍了一篇故爵,點評也...
    劉美三閱讀 636評論 1 2
  • -2016.11.09- 餅干玻粪,告罄! 薯片稠集,告罄奶段! 酸奶,告罄剥纷! 大米和瘦肉痹籍,也都告罄?晦鞋! 唉蹲缠,早上起來就還沒吃...
    蘇昀閱讀 122評論 0 0