遍地開花的 Attention ,你真的懂嗎?

阿里妹導讀:曾被 paper 中各類各樣的 Attentioin 搞得暈暈乎乎,儘管零零散散地整理過一些關於Attention 的筆記,重點和線索依然比較凌亂。今天,阿里巴巴工程師楠易,將 Attentioin 的知識系統性地梳理、回顧、總結,不求深入,但求淺顯,但願能幫助對 Attention 有疑惑的同窗。網絡

前言

Attention 自2015年被提出後,在 NLP 領域,圖像領域遍地開花。Attention 賦予模型區分辨別能力,從紛繁的信息中找到應當 focus 的重點。2017年 self attention 的出現,使得 NLP 領域對詞句 representation 能力有了很大的提高,整個 NLP 領域開啓了全面擁抱 transformer 的年代。app

本文會主要從2個方面來介紹 Attention。框架

初識 Attention,主要扒一扒 Attention 的歷史,而後給出一個通用的框架來回答一個終極問題:what is Attention?機器學習

細數 Attention,以上文給出的通用框架視角來審視全部的 Attention,在這個章節,你會和各類各樣的 Attention 相遇、相識、相戀(global/local、soft/hard、Bagdanau attention、 Luong attention、 self-attention、 multi-head attention , 以及它們的別名),瞭解它們之間的聯繫與差別。學習

初識Attention

Historythis

Attention 的發展能夠粗暴地分爲兩個階段。編碼

2015-2017年,自從 attention 提出後,基本就成爲 NLP 模型的標配,各類各樣的花式 attention 鋪天蓋地。不只在 Machine Translation,在 Text summarization,Text Comprehend(Q&A), Text Classification 也普遍應用。奠基基礎的幾篇文章以下:spa

2015年 ICLR 《Neural machine translation by jointly learning to align and translate》首次提出 attention(基本上算是公認的首次提出),文章提出了最經典的 Attention 結構(additive attention 或者 又叫 bahdanau attention)用於機器翻譯,並形象直觀地展現了 attention 帶來源語目標語的對齊效果,解釋深度模型到底學到了什麼,人類表示服氣。翻譯

2015年 EMNLP 《Effective Approaches to Attention-based Neural Machine Translation》在基礎 attention 上開始研究一些變化操做,嘗試不一樣的 score-function,不一樣的 alignment-function。文章中使用的 Attention(multiplicative attention 或者 又叫 Luong attention)結構也被普遍應用。設計

2015年 ICML 《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》是 attention(提出hard/soft attention的概念)在 image caption 上的應用,故事圓滿,符合直覺,人類再次表示很服氣。

在上面幾篇奠定之做之上,2016和2017年 attention 開枝散葉,無往不利。Hiearchical Attention,Attention over Attention,multi-step Attention……這些或叫得上名的或叫不上名。

2017年-至今是屬於 transformer 的時代。基於 transformer 強大的表示學習能力,NLP 領域爆發了新一輪的活力,BERT、GPT 領跑各項 NLP 任務效果。奠定之做無疑是:

2017年 NIPS《Attention is all you need》提出 transformer 的結構(涉及 self-attention,multi-head attention)。基於 transformer 的網絡可所有替代sequence-aligned 的循環網絡,實現 RNN 不能實現的並行化,而且使得長距離的語義依賴與表達更加準確(聽說2019年的 transformer-xl《Transformer-XL:Attentive Lanuage Models Beyond a fixed-length context》經過片斷級循環機制結合相對位置編碼策略能夠捕獲更長的依賴關係)。

what is Attention ?

直奔主題,終極叩問 "what is attention?" 。這個章節,嘗試以統一的抽象框架來定義 attention。如同先編寫一個抽象類,後續章節涉及全部的 attention 都繼承於這個抽象類。這裏我寫了兩個抽象類,一個叫 alignment-based,一個叫 memroy-based。(兩名字我給起的,保留最終解釋權)。

alignment-based

以下圖所示的 model setting,輸入 c(context,有的論文寫s),y(input,有的地方也寫做 h),輸出 z。圖中,英文表達原汁原味,細品一下。

咱們細拆 Attention Model,以經典的 Bahdanau attention 爲例,看看抽象出來的三部曲:

  • score function :度量環境向量與當前輸入向量的類似性;找到當前環境下,應該 focus 哪些輸入信息;

  • alignment function :計算 attention weight,一般都使用 softmax 進行歸一化;

image

  • generate context vector function :根據 attention weight,獲得輸出向量;

image

下圖,更加直觀地展現這三個接口的位置:

自此以後,要認清一個 attention 的詳情,只須要搞清楚這三個部分,全部的變換都是在3個位置進行調整,固然變化最豐富的是 score function。在後一個章節會詳細對比不一樣種類的 attention 在這三個維度上的變換。

memory-based

另外一種視角是 QKV 模型,假設輸入爲 q,Memory 中以(k,v)形式存儲須要的上下文。感受在 Q&A 任務中,這種設置比較合理,transformer 是採用的這種建模方式。k 是 question,v 是 answer,q 是新來的 question,看看歷史 memory 中 q 和哪一個 k 更類似,而後依葫蘆畫瓢,根據類似 k 對應的 v,合成當前 question 的 answer。

在這種建模方式下,也分爲三步:

  • address memory (score function):image,在 memory 中找類似;
  • normalize(alignment function) : image
  • read content (gen context vector function) : image

其實仍是沒有逃出上文三部曲的框架。只是將 input 分裂成了 kvpair。

後文都會以統一的三部曲建模方式(score function,alignment function,generate context vector function)來分析全部 attention。

Attention in Detail

在上文,咱們 high-level 地瞭解了 attention 三部曲的建模方式,接下來要把全部Attention 拉出來排排坐。

Framework

以下圖,一般聽到的一些 attention,他們的差別其實主要體如今 score-function 層面,其次是體如今 generate context vector function 的層面。咱們分別來看看,這些 attention 之間的差別與聯繫。

generate context vector function

hard / soft attention 是在文章《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》提出的概念,最直觀的一種理解是,hard attention 是一個隨機採樣,採樣集合是輸入向量的集合,採樣的機率分佈是alignment function 產出的 attention weight。所以,hard attention 的輸出是某一個特定的輸入向量。soft attention 是一個帶權求和的過程,求和集合是輸入向量的集合,對應權重是 alignment function 產出的 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》)。

直觀理解就是帶權求和的集合不同,global attention 是全部輸入向量做爲加權集合,使用 softmax 做爲 alignment function,local 是部分輸入向量才能進入這個池子。爲何用 local,背後邏輯是要減少噪音,進一步縮小重點關注區域。接下來的問題就是,怎麼肯定這個 local 範圍?文中提了兩個方案 local-m 和 local-p。local-m 基於的假設生硬簡單,就直接 pass了。local-p 有一個預估操做,預計當前時刻應該關注輸入序列(總長度爲S)的什麼位置 pt(引入了兩個參數向量,vp,wp),而後在 alignment function 中作了一點兒調整,在 softmax 算出來的attention wieght 的基礎上,加了一個以 pt 爲中心的高斯分佈來調整 alignment 的結果。

做者最後闡述 local-p + general(score-function 參考上圖中multiplicative attention 中的 general 版本)的方式效果是最好的。但從global/local 視角的分類來看,更經常使用的依然仍是 global attention,由於複雜化的local attention 帶來的效果增益感受並不大。

score-function

如何生成輸出向量,有上面說起的那些變換。接下來是變化更加豐富的 score function。最爲經常使用的 score function 有上文圖中的那幾種(基本全乎了吧)。其實本質就是度量兩個向量的類似度。若是兩個向量在同一個空間,那麼可使用 dot 點乘方式(或者 scaled dot product,scaled 背後的緣由是爲了減少數值,softmax 的梯度大一些,學得更快一些),簡單好使。若是不在同一個空間,須要一些變換(在一個空間也能夠變換),additive 對輸入分別進行線性變換後而後相加,multiplicative 是直接經過矩陣乘法來變換(你是否是也曾迷惑過爲何attention 要叫作 additive 和 multiplicative attention?)。

後文咱們將介紹幾個具備表明性的 attention,經過具體的 attention example 來進一步理解。以及一些花樣 attention,看你們都怎樣變着法兒用 attention。

Bahdanau Attention & Luong Attention

在對比之中,認知更清晰,一圖表達全部。這兩個 Attention 就是整個 Attention 的奠定之做。Tensorflow 中實現了這兩種 Attention 的 API。

Self Attention & Multi-head Attention

why self attention ?

有不少文章寫 self-attention,可是寫 why self-attention 的並很少。因此打算多花點筆墨來寫 why。

RNN 的長距離依賴比較 tricky:RNN 很強大(能夠做爲 encoder 對長度任意的序列進行特徵抽取,基於特徵抽取的能力能夠勝任分類任務,另外一方面能夠做爲Generators 學習 Language Model),其實核心就是長距離依賴(gate architectures - 線性操做讓信息能夠保持並流動,並選擇性地讓信息經過),能夠對長度任意的序列進行表達,可是這種方式仍是比較 tricky。而且這種序列建模方式,沒法對具備層次結構的信息進行很好的表達。
RNN 因爲遞歸的本質,致使沒法並行。

CNN 在 NLP 中扮演了 n-gram 的 detector 角色,在層內能夠並行。CNN works well,基於的假設是局部信息相互依賴。CNN 具備 Hierarchical Receptive Field,使得任意任意兩個位置之間的長度距離是對數級別的。

因此有沒有一種方法,可以作到既能又能還能?

相對於 CNN,要 constant path length 不要 logarithmic path length , 要 variable-sized perceptive field,不要固定 size 的 perceptive field;
相對於 RNN,考慮長距離依賴,還要能夠並行!

這就是 self attention。下圖能夠看到 self-attention 和 convolution 有點兒神似,它摒棄了 CNN 的局部假設,想要尋找長距離的關聯依賴。看下圖就能夠理解 self-attention 的這幾個特色:

  • constant path length & variable-sized perceptive field :任意兩個位置(特指遠距離)的關聯再也不須要經過 Hierarchical perceptive field 的方式,它的 perceptive field 是整個句子,因此任意兩個位置創建關聯是常數時間內的。
  • parallelize : 沒有了遞歸的限制,就像 CNN 同樣能夠在每一層內實現並行。

self-attention 借鑑 CNN中 multi-kernel 的思想,進一步進化成爲 Multi-Head attention。每個不一樣的 head 使用不一樣的線性變換,學習不一樣的 relationship。

what is self-attention?

已經有不少很好的文章介紹 transformer 和 self-attention,以及內部細節。有興趣的同窗能夠看下參考資料【11】,介紹得比較詳細,下圖是完整版本的 multi-head attention 的示例圖(引用自上述連接中)。這是基於上文中說起了 QKV 的 memory-based 的建模方式。須要說明的幾個點:

  1. QKV 都是對輸入 x 的線性映射。
  2. score-function 使用 scaled-dot product。
  3. multihead 的方式將多個 head 的輸出 z,進行 concat 後,經過線性變換獲得最後的輸出 z。

transformer 框架中 self-attention 自己是一個很大的創新,另外一個有意思的是 three ways of attention 的設計。attention weight 一列以英譯中,encoder 輸入machine learning,decoder 輸入機器學習。

  1. Encoder self-attention:Encoder 階段捕獲當前 word 和其餘輸入詞的關聯;
  2. MaskedDecoder self-attention :Decoder 階段捕獲當前 word 與已經看到的解碼詞之間的關聯,從矩陣上直觀來看就是一個帶有 mask 的三角矩陣;
  3. Encoder-Decoder Attention:就是將 Decoder 和 Encoder 輸入創建聯繫,和以前那些普通 Attention 同樣;

在 transformer 中除了上訴說起的東西,還有 positional encoding,residuals 這些小而美的東西。在複雜度方面在原文中也與 RNN-CNN 進行了對比。

花樣 Attention

下面簡要介紹幾種花樣的 attention:

RNN 對序列建模,可是缺少層次信息。而語言自己是具備層次結構,短語組成句子,句子組成篇章。所以研究者十分但願把語言中的這些層次結構在模型中得以體現,Hierarchical 的方式就出現了。《Hierarchical Attention Networks for Document Classification》,從 word attention 到 sentence attention,以下圖一。

在匹配或者檢索任務中(如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 時已經說起了 RNN 和 CNN 的一些優勢和問題,幾乎和 transformer 同時,facebook 發表了《Convolutional Sequence to Sequence Learning》,一樣地想借用 CNN 的優勢來補足 RNN 不能並行的弱點,用 CNN 結合 attention 來對序列進行建模,以下圖三。

隨着 transformer 的爆紅,圍繞 transformer 的花邊,出現了 weighted-transformer 《Weighted Transformer Network For Machine Translation》。今年出現了 transformer-xl 《Transformer-xl :attentive language models beyond a fixed-length context》,以下圖四, 想達到對任意長度的輸入進行特徵抽取,而不是 transformer 切成 segment 的定長輸入。

總結

Why Attention Works?

從上面的建模,咱們能夠大體感覺到 Attention 的思路簡單,四個字「帶權求和」就能夠高度歸納,大道至簡。作個不太恰當的類比,人類學習一門新語言基本經歷四個階段:死記硬背(經過閱讀背誦學習語法練習語感)->提綱挈領(簡單對話靠聽懂句子中的關鍵詞彙準確理解核心意思)->融會貫通(複雜對話懂得上下文指代、語言背後的聯繫,具有了觸類旁通的學習能力)->登峯造極(沉浸地大量練習)。

這也如同attention的發展脈絡,RNN 時代是死記硬背的時期,attention 的模型學會了提綱挈領,進化到 transformer,融匯貫通,具有優秀的表達學習能力,再到 GPT、BERT,經過多任務大規模學習積累實戰經驗,戰鬥力爆棚。

要回答爲何 attention 這麼優秀?是由於它讓模型開竅了,懂得了提綱挈領,學會了融會貫通。

那又是如何開竅的?是由於它懂得了"context is everything"。

1.在語言模型中:語言模型(language model)是整個 NLP 領域的基礎,語言模型的精準程度基本上直接掌握全部 NLP 任務效果的命脈。而 context 又掌握着語言模型的命脈,語義不孤立,在特定 context 下展現特定的一面,模型若是能夠學習到這些知識,就能夠達到見人說人話,見鬼說鬼話的理想狀態。

在語義表達上能把 context 用好的都是成功的典範(參考:word2vec 靠學習 word 及其 context 發家,ELMo-deep contextualized word representations, BERT 從句子中摳掉一個詞用上下文去預測這個詞,transformer-xl 較 transformer 使用更全面的 context 信息,XLNet 一大重要貢獻也是研究如何使用上下文信息來訓練語言模型)。

2.在其餘領域中:Attention 是把 context 用好的典範之一。Attention 背後本質的思想就是:在不一樣的 context 下,focusing 不一樣的信息。這原本就是一個普適的準則。因此 Attention 能夠用到全部相似需求的地方,不只僅是 NLP,圖像,就看你對 context 如何定義。

在不少的應用場景,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 出發點相似。在推薦場景中,文章 Feature Aware Multi-Head Attention 在手淘猜你喜歡排序模型中的應用 。這些都是attention 在業務場景落地的參考。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索