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