| 前言 Attention 自2015年被提出后,在 NLP 領(lǐng)域,圖像領(lǐng)域遍地開(kāi)花。Attention 賦予模型區(qū)分辨別能力,從紛繁的信息中找到應(yīng)當(dāng) focus 的重點(diǎn)。2017年 self attention 的出現(xiàn),使得 NLP 領(lǐng)域?qū)υ~句 representation 能力有了很大的提升,整個(gè) NLP 領(lǐng)域開(kāi)啟了全面擁抱 transformer 的年代。 本文會(huì)主要從2個(gè)方面來(lái)介紹 Attention。 初識(shí) Attention,主要扒一扒 Attention 的歷史,然后給出一個(gè)通用的框架來(lái)回答一個(gè)終極問(wèn)題:what is Attention? 細(xì)數(shù) Attention,以上文給出的通用框架視角來(lái)審視所有的 Attention,在這個(gè)章節(jié),你會(huì)和各種各樣的 Attention 相遇、相識(shí)、相戀(global/local、soft/hard、Bagdanau attention、 Luong attention、 self-attention、 multi-head attention , 以及它們的別名),了解它們之間的聯(lián)系與差異。 
 History Attention 的發(fā)展可以粗暴地分為兩個(gè)階段。 2015-2017年,自從 attention 提出后,基本就成為 NLP 模型的標(biāo)配,各種各樣的花式 attention 鋪天蓋地。不僅在 Machine Translation,在 Text summarization,Text Comprehend(Q&A), Text Classification 也廣泛應(yīng)用。奠定基礎(chǔ)的幾篇文章如下: 2015年 ICLR 《Neural machine translation by jointly learning to align and translate》首次提出 attention(基本上算是公認(rèn)的首次提出),文章提出了最經(jīng)典的 Attention 結(jié)構(gòu)(additive attention 或者 又叫 bahdanau attention)用于機(jī)器翻譯,并形象直觀地展示了 attention 帶來(lái)源語(yǔ)目標(biāo)語(yǔ)的對(duì)齊效果,解釋深度模型到底學(xué)到了什么,人類表示服氣。 2015年 EMNLP 《Effective Approaches to Attention-based Neural Machine Translation》在基礎(chǔ) attention 上開(kāi)始研究一些變化操作,嘗試不同的 score-function,不同的 alignment-function。文章中使用的 Attention(multiplicative attention 或者 又叫 Luong attention)結(jié)構(gòu)也被廣泛應(yīng)用。 2015年 ICML 《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》是 attention(提出hard/soft attention的概念)在 image caption 上的應(yīng)用,故事圓滿,符合直覺(jué),人類再次表示很服氣。 在上面幾篇奠基之作之上,2016和2017年 attention 開(kāi)枝散葉,無(wú)往不利。Hiearchical Attention,Attention over Attention,multi-step Attention……這些或叫得上名的或叫不上名。 2017年-至今是屬于 transformer 的時(shí)代?;?transformer 強(qiáng)大的表示學(xué)習(xí)能力,NLP 領(lǐng)域爆發(fā)了新一輪的活力,BERT、GPT 領(lǐng)跑各項(xiàng) NLP 任務(wù)效果。奠基之作無(wú)疑是: 2017年 NIPS《Attention is all you need》提出 transformer 的結(jié)構(gòu)(涉及 self-attention,multi-head attention)?;?transformer 的網(wǎng)絡(luò)可全部替代sequence-aligned 的循環(huán)網(wǎng)絡(luò),實(shí)現(xiàn) RNN 不能實(shí)現(xiàn)的并行化,并且使得長(zhǎng)距離的語(yǔ)義依賴與表達(dá)更加準(zhǔn)確(據(jù)說(shuō)2019年的 transformer-xl《Transformer-XL:Attentive Lanuage Models Beyond a fixed-length context》通過(guò)片段級(jí)循環(huán)機(jī)制結(jié)合相對(duì)位置編碼策略可以捕獲更長(zhǎng)的依賴關(guān)系)。 what is Attention ? 直奔主題,終極叩問(wèn) 'what is attention?' 。這個(gè)章節(jié),嘗試以統(tǒng)一的抽象框架來(lái)定義 attention。如同先編寫一個(gè)抽象類,后續(xù)章節(jié)涉及所有的 attention 都繼承于這個(gè)抽象類。這里我寫了兩個(gè)抽象類,一個(gè)叫 alignment-based,一個(gè)叫 memroy-based。(兩名字我給起的,保留最終解釋權(quán))。 ★ alignment-based 如下圖所示的 model setting,輸入 c(context,有的論文寫s),y(input,有的地方也寫作 h),輸出 z。圖中,英文表達(dá)原汁原味,細(xì)品一下。 我們細(xì)拆 Attention Model,以經(jīng)典的 Bahdanau attention 為例,看看抽象出來(lái)的三部曲: 
 
 
 下圖,更加直觀地展示這三個(gè)接口的位置: 自此之后,要認(rèn)清一個(gè) attention 的詳情,只需要搞清楚這三個(gè)部分,所有的變換都是在3個(gè)位置進(jìn)行調(diào)整,當(dāng)然變化最豐富的是 score function。在后一個(gè)章節(jié)會(huì)詳細(xì)對(duì)比不同種類的 attention 在這三個(gè)維度上的變換。 ★ memory-based 另一種視角是 QKV 模型,假設(shè)輸入為 q,Memory 中以(k,v)形式存儲(chǔ)需要的上下文。感覺(jué)在 Q&A 任務(wù)中,這種設(shè)置比較合理,transformer 是采用的這種建模方式。k 是 question,v 是 answer,q 是新來(lái)的 question,看看歷史 memory 中 q 和哪個(gè) k 更相似,然后依葫蘆畫瓢,根據(jù)相似 k 對(duì)應(yīng)的 v,合成當(dāng)前 question 的 answer。 圖片來(lái)源: https://zhuanlan.zhihu.com/p/35571412 在這種建模方式下,也分為三步: 
 
 
 其實(shí)還是沒(méi)有逃出上文三部曲的框架。只是將 input 分裂成了 kvpair。 后文都會(huì)以統(tǒng)一的三部曲建模方式(score function,alignment function,generate context vector function)來(lái)分析所有 attention。 Attention in Detail 在上文,我們 high-level 地了解了 attention 三部曲的建模方式,接下來(lái)要把所有Attention 拉出來(lái)排排坐。 Framework 如下圖,通常聽(tīng)到的一些 attention,他們的差異其實(shí)主要體現(xiàn)在 score-function 層面,其次是體現(xiàn)在 generate context vector function 的層面。我們分別來(lái)看看,這些 attention 之間的差異與聯(lián)系。 ★ generate context vector function hard / soft attention 是在文章《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》提出的概念,最直觀的一種理解是,hard attention 是一個(gè)隨機(jī)采樣,采樣集合是輸入向量的集合,采樣的概率分布是alignment function 產(chǎn)出的 attention weight。因此,hard attention 的輸出是某一個(gè)特定的輸入向量。soft attention 是一個(gè)帶權(quán)求和的過(guò)程,求和集合是輸入向量的集合,對(duì)應(yīng)權(quán)重是 alignment function 產(chǎn)出的 attention weight。hard / soft attention 中,soft attention 是更常用的(后文提及的所有 attention 都在這個(gè)范疇),因?yàn)樗蓪?dǎo),可直接嵌入到模型中進(jìn)行訓(xùn)練,hard attention 文中 suggests a Monte Carlo based sampling approximation of gradient。 ★ alignment function 在 soft attention 中,又劃分了 global/local attention(In this paper :《Effective Approaches to Attention-based Neural Machine Translation》)。 直觀理解就是帶權(quán)求和的集合不一樣,global attention 是所有輸入向量作為加權(quán)集合,使用 softmax 作為 alignment function,local 是部分輸入向量才能進(jìn)入這個(gè)池子。為什么用 local,背后邏輯是要減小噪音,進(jìn)一步縮小重點(diǎn)關(guān)注區(qū)域。接下來(lái)的問(wèn)題就是,怎么確定這個(gè) local 范圍?文中提了兩個(gè)方案 local-m 和 local-p。local-m 基于的假設(shè)生硬簡(jiǎn)單,就直接 pass了。local-p 有一個(gè)預(yù)估操作,預(yù)計(jì)當(dāng)前時(shí)刻應(yīng)該關(guān)注輸入序列(總長(zhǎng)度為S)的什么位置 pt(引入了兩個(gè)參數(shù)向量,vp,wp),然后在 alignment function 中做了一點(diǎn)兒調(diào)整,在 softmax 算出來(lái)的attention wieght 的基礎(chǔ)上,加了一個(gè)以 pt 為中心的高斯分布來(lái)調(diào)整 alignment 的結(jié)果。 作者最后闡述 local-p + general(score-function 參考上圖中multiplicative attention 中的 general 版本)的方式效果是最好的。但從global/local 視角的分類來(lái)看,更常用的依然還是 global attention,因?yàn)閺?fù)雜化的local attention 帶來(lái)的效果增益感覺(jué)并不大。 ★ score-function 如何生成輸出向量,有上面提及的那些變換。接下來(lái)是變化更加豐富的 score function。最為常用的 score function 有上文圖中的那幾種(基本全乎了吧)。其實(shí)本質(zhì)就是度量?jī)蓚€(gè)向量的相似度。如果兩個(gè)向量在同一個(gè)空間,那么可以使用 dot 點(diǎn)乘方式(或者 scaled dot product,scaled 背后的原因是為了減小數(shù)值,softmax 的梯度大一些,學(xué)得更快一些),簡(jiǎn)單好使。如果不在同一個(gè)空間,需要一些變換(在一個(gè)空間也可以變換),additive 對(duì)輸入分別進(jìn)行線性變換后然后相加,multiplicative 是直接通過(guò)矩陣乘法來(lái)變換(你是不是也曾迷惑過(guò)為什么attention 要叫做 additive 和 multiplicative attention?)。 后文我們將介紹幾個(gè)具有代表性的 attention,通過(guò)具體的 attention example 來(lái)進(jìn)一步理解。以及一些花樣 attention,看大家都怎樣變著法兒用 attention。 Bahdanau Attention & Luong Attention 在對(duì)比之中,認(rèn)知更清晰,一圖表達(dá)所有。這兩個(gè) Attention 就是整個(gè) Attention 的奠基之作。Tensorflow 中實(shí)現(xiàn)了這兩種 Attention 的 API。 Self Attention & Multi-head Attention ★ why self attention ? 有很多文章寫 self-attention,但是寫 why self-attention 的并不多。所以打算多花點(diǎn)筆墨來(lái)寫 why。 RNN 的長(zhǎng)距離依賴比較 tricky:RNN 很強(qiáng)大(可以作為 encoder 對(duì)長(zhǎng)度任意的序列進(jìn)行特征抽取,基于特征抽取的能力可以勝任分類任務(wù),另一方面可以作為Generators 學(xué)習(xí) Language Model),其實(shí)核心就是長(zhǎng)距離依賴(gate architectures - 線性操作讓信息可以保持并流動(dòng),并選擇性地讓信息通過(guò)),可以對(duì)長(zhǎng)度任意的序列進(jìn)行表達(dá),但是這種方式還是比較 tricky。并且這種序列建模方式,無(wú)法對(duì)具有層次結(jié)構(gòu)的信息進(jìn)行很好的表達(dá)。 RNN 由于遞歸的本質(zhì),導(dǎo)致無(wú)法并行。 
 CNN 在 NLP 中扮演了 n-gram 的 detector 角色,在層內(nèi)可以并行。CNN works well,基于的假設(shè)是局部信息相互依賴。CNN 具有 Hierarchical Receptive Field,使得任意任意兩個(gè)位置之間的長(zhǎng)度距離是對(duì)數(shù)級(jí)別的。 
 所以有沒(méi)有一種方法,能夠做到既能又能還能? 相對(duì)于 CNN,要 constant path length 不要 logarithmic path length , 要 variable-sized perceptive field,不要固定 size 的 perceptive field; 這就是 self attention。下圖可以看到 self-attention 和 convolution 有點(diǎn)兒神似,它摒棄了 CNN 的局部假設(shè),想要尋找長(zhǎng)距離的關(guān)聯(lián)依賴??聪聢D就可以理解 self-attention 的這幾個(gè)特點(diǎn): 
 
 圖片來(lái)源: https://nlp./seminar/details/lkaiser.pdf self-attention 借鑒 CNN中 multi-kernel 的思想,進(jìn)一步進(jìn)化成為 Multi-Head attention。每一個(gè)不同的 head 使用不同的線性變換,學(xué)習(xí)不同的 relationship。 ★ what is self-attention? 已經(jīng)有很多很好的文章介紹 transformer 和 self-attention,以及內(nèi)部細(xì)節(jié)。有興趣的同學(xué)可以看下參考資料【11】,介紹得比較詳細(xì),下圖是完整版本的 multi-head attention 的示例圖(引用自上述鏈接中)。這是基于上文中提及了 QKV 的 memory-based 的建模方式。需要說(shuō)明的幾個(gè)點(diǎn): 1. QKV 都是對(duì)輸入 x 的線性映射。 
 transformer 框架中 self-attention 本身是一個(gè)很大的創(chuàng)新,另一個(gè)有意思的是 three ways of attention 的設(shè)計(jì)。attention weight 一列以英譯中,encoder 輸入machine learning,decoder 輸入機(jī)器學(xué)習(xí)。 
 
 在 transformer 中除了上訴提及的東西,還有 positional encoding,residuals 這些小而美的東西。在復(fù)雜度方面在原文中也與 RNN-CNN 進(jìn)行了對(duì)比。 花樣 Attention 下面簡(jiǎn)要介紹幾種花樣的 attention: RNN 對(duì)序列建模,但是缺乏層次信息。而語(yǔ)言本身是具有層次結(jié)構(gòu),短語(yǔ)組成句子,句子組成篇章。因此研究者十分希望把語(yǔ)言中的這些層次結(jié)構(gòu)在模型中得以體現(xiàn),Hierarchical 的方式就出現(xiàn)了?!禜ierarchical Attention Networks for Document Classification》,從 word attention 到 sentence attention,如下圖一。 在匹配或者檢索任務(wù)中(如Q&A,IR),要衡量 query,doc 相似度,這時(shí)候attention 的方法中,query 和 doc 就互為對(duì)方的 cotext,query 對(duì) doc 算一次attention,doc對(duì)query 算一次 attention,《Attention-over-Attention Neural Networks for Reading Comprehension 》,如下圖二。 上文介紹 why self-attention 時(shí)已經(jīng)提及了 RNN 和 CNN 的一些優(yōu)點(diǎn)和問(wèn)題,幾乎和 transformer 同時(shí),facebook 發(fā)表了《Convolutional Sequence to Sequence Learning》,同樣地想借用 CNN 的優(yōu)點(diǎn)來(lái)補(bǔ)足 RNN 不能并行的弱點(diǎn),用 CNN 結(jié)合 attention 來(lái)對(duì)序列進(jìn)行建模,如下圖三。 隨著 transformer 的爆紅,圍繞 transformer 的花邊,出現(xiàn)了 weighted-transformer 《Weighted Transformer Network For Machine Translation》。今年出現(xiàn)了 transformer-xl 《Transformer-xl :attentive language models beyond a fixed-length context》,如下圖四, 想達(dá)到對(duì)任意長(zhǎng)度的輸入進(jìn)行特征抽取,而不是 transformer 切成 segment 的定長(zhǎng)輸入。 
 總結(jié) Why Attention Works? 從上面的建模,我們可以大致感受到 Attention 的思路簡(jiǎn)單,四個(gè)字“帶權(quán)求和”就可以高度概括,大道至簡(jiǎn)。做個(gè)不太恰當(dāng)?shù)念惐?,人類學(xué)習(xí)一門新語(yǔ)言基本經(jīng)歷四個(gè)階段:死記硬背(通過(guò)閱讀背誦學(xué)習(xí)語(yǔ)法練習(xí)語(yǔ)感)->提綱挈領(lǐng)(簡(jiǎn)單對(duì)話靠聽(tīng)懂句子中的關(guān)鍵詞匯準(zhǔn)確理解核心意思)->融會(huì)貫通(復(fù)雜對(duì)話懂得上下文指代、語(yǔ)言背后的聯(lián)系,具備了舉一反三的學(xué)習(xí)能力)->登峰造極(沉浸地大量練習(xí))。 這也如同attention的發(fā)展脈絡(luò),RNN 時(shí)代是死記硬背的時(shí)期,attention 的模型學(xué)會(huì)了提綱挈領(lǐng),進(jìn)化到 transformer,融匯貫通,具備優(yōu)秀的表達(dá)學(xué)習(xí)能力,再到 GPT、BERT,通過(guò)多任務(wù)大規(guī)模學(xué)習(xí)積累實(shí)戰(zhàn)經(jīng)驗(yàn),戰(zhàn)斗力爆棚。 要回答為什么 attention 這么優(yōu)秀?是因?yàn)樗屇P烷_(kāi)竅了,懂得了提綱挈領(lǐng),學(xué)會(huì)了融會(huì)貫通。 那又是如何開(kāi)竅的?是因?yàn)樗昧?#39;context is everything'。 1.在語(yǔ)言模型中:語(yǔ)言模型(language model)是整個(gè) NLP 領(lǐng)域的基礎(chǔ),語(yǔ)言模型的精準(zhǔn)程度基本上直接掌握所有 NLP 任務(wù)效果的命脈。而 context 又掌握著語(yǔ)言模型的命脈,語(yǔ)義不孤立,在特定 context 下展示特定的一面,模型如果可以學(xué)習(xí)到這些知識(shí),就可以達(dá)到見(jiàn)人說(shuō)人話,見(jiàn)鬼說(shuō)鬼話的理想狀態(tài)。 在語(yǔ)義表達(dá)上能把 context 用好的都是成功的典范(參考:word2vec 靠學(xué)習(xí) word 及其 context 發(fā)家,ELMo-deep contextualized word representations, BERT 從句子中摳掉一個(gè)詞用上下文去預(yù)測(cè)這個(gè)詞,transformer-xl 較 transformer 使用更全面的 context 信息,XLNet 一大重要貢獻(xiàn)也是研究如何使用上下文信息來(lái)訓(xùn)練語(yǔ)言模型)。 2.在其他領(lǐng)域中:Attention 是把 context 用好的典范之一。Attention 背后本質(zhì)的思想就是:在不同的 context 下,focusing 不同的信息。這本來(lái)就是一個(gè)普適的準(zhǔn)則。所以 Attention 可以用到所有類似需求的地方,不僅僅是 NLP,圖像,就看你對(duì) context 如何定義。 在很多的應(yīng)用場(chǎng)景,attention-layer 肩負(fù)起了部分 feature-selection,featue-representation 的責(zé)任。舉個(gè)例子,transfer learning with Domain-aware attention network for item recommemdation in e-commerce 中提及:不同場(chǎng)景的用戶的行為有不同的偏好(場(chǎng)景是 context,價(jià)格,品牌是不同的信息),天貓用戶對(duì)品牌看重,親淘用戶 focus 價(jià)格,可以通過(guò) attention-layer 學(xué)習(xí)到不同 context 下,用戶的 Attention 在哪里。在 ctr 預(yù)估中,Deep Interest Network for Click-Through Rate Prediction 出發(fā)點(diǎn)類似。在推薦場(chǎng)景中,文章 Feature Aware Multi-Head Attention 在手淘猜你喜歡排序模型中的應(yīng)用 。這些都是attention 在業(yè)務(wù)場(chǎng)景落地的參考。 Reference 1.Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014. 
 | 
|  | 
來(lái)自: 漢無(wú)為 > 《注意力機(jī)制》