Attention模型方法綜述 | 多篇經典論文解讀

2021-03-06 PaperWeekly

本文基於幾篇經典的論文,對 Attention 模型的不同結構進行分析、拆解。

先簡單談一談 attention 模型的引入。以基於 seq2seq 模型的機器翻譯為例,如果 decoder 只用 encoder 最後一個時刻輸出的 hidden state,可能會有兩個問題(我個人的理解)。

1. encoder 最後一個 hidden state,與句子末端詞彙的關聯較大,難以保留句子起始部分的信息;

2. encoder 按順序依次接受輸入,可以認為 encoder 產出的 hidden state 包含有詞序信息。所以一定程度上 decoder 的翻譯也基本上沿著原始句子的順序依次進行,但實際中翻譯卻未必如此,以下是一個翻譯的例子:

英文原句:space and oceans are the new world which scientists are trying to explore.

翻譯結果:空間和海洋是科學家試圖探索的新世界。 

詞彙對照如下:

可以看到,翻譯的過程並不總是沿著原句從左至右依次進行翻譯,例如上面例子的定語從句。 

為了一定程度上解決以上的問題,14 年的一篇文章 Sequence to Sequence Learning with Neural Networks 提出了一個有意思的 trick,即在模型訓練的過程中將原始句子進行反轉,取得了一定的效果。 

為了更好地解決問題,attention 模型開始得到廣泛重視和應用。 

下面進入正題,進行對 attention 的介紹。

Show, Attend and Tell

■ 論文 | Show, Attend and Tell: Neural Image Caption Generation with Visual Attention

■ 連結 | https://www.paperweekly.site/papers/812

■ 源碼 | https://github.com/kelvinxu/arctic-captions

文章討論的場景是圖像描述生成(Image Caption Generation),對於這種場景,先放一張圖,感受一下 attention 的框架。

文章提出了兩種 attention 模式,即 hard attention 和 soft attention,來感受一下這兩種 attention。

可以看到,hard attention 會專注於很小的區域,而 soft attention 的注意力相對發散。模型的 encoder 利用 CNN (VGG net),提取出圖像的 L 個 D 維的向量,每個向量表示圖像的一部分信息。

decoder 是一個 LSTM,每個 timestep t 的輸入包含三個部分,即 context vector Zt 、前一個 timestep 的 hidden state、前一個 timestep 的 output。 Zt 由 {ai} 和權重 {αti} 通過加權得到。這裡的權重 αti 通過attention模型 fatt 來計算得到,而本文中的 fatt 是一個多層感知機(multilayer perceptron)。

從而可以計算。接下來文章重點討論 hard(也叫 stochastic attention)和 soft(也叫 deterministic)兩種 attention 模式。

1. Stochastic 「Hard」 Attention 

記 St 為 decoder 第 t 個時刻的 attention 所關注的位置編號, Sti 表示第 t 時刻 attention 是否關注位置 i , Sti 服從多元伯努利分布(multinoulli distribution), 對於任意的 t ,Sti,i=1,2,...,L 中有且只有取 1,其餘全部為 0,所以 [St1,St2,...,stL] 是 one-hot 形式。這種 attention 每次只 focus 一個位置的做法,就是「hard」稱謂的來源。 Zt 也就被視為一個變量,計算如下:

問題是 αti 怎麼算呢?把 αti 視為隱變量,研究模型的目標函數,進而研究目標函數對參數的梯度。直觀理解,模型要根據 a=(a1,...,aL) 來生成序列 y=(y1,...,yC) ,所以目標可以是最大化 log p(y|a) ,但這裡沒有顯式的包含 s ,所以作者利用著名的 Jensen 不等式(Jensen's inequality)對目標函數做了轉化,得到了目標函數的一個 lower bound,如下:

這裡的 s ={ s1,...,sC },是時間軸上的重點 focus 的序列,理論上這種序列共有個。 然後就用 log p(y|a) 代替原始的目標函數,對模型的參數 W 算 gradient。

然後利用蒙特卡洛方法對 s 進行抽樣,我們做 N 次這樣的抽樣實驗,記每次取到的序列是,易知的概率為,所以上面的求 gradient 的結果即為:

接下來的一些細節涉及reinforcement learning,感興趣的同學可以去看這篇 paper。

2. Deterministic 「Soft」 Attention 

說完「硬」的 attention,再來說說「軟」的 attention。 相對來說 soft attention 很好理解,在 hard attention 裡面,每個時刻 t 模型的序列 [ St1,...,StL ] 只有一個取 1,其餘全部為 0,也就是說每次只 focus 一個位置,而 soft attention 每次會照顧到全部的位置,只是不同位置的權重不同罷了。這時 Zt 即為 ai 的加權求和:

這樣 soft attention 是光滑的且可微的(即目標函數,也就是 LSTM 的目標函數對權重 αti 是可微的,原因很簡單,因為目標函數對 Zt 可微,而 Zt 對 αti 可微,根據 chain rule 可得目標函數對 αti 可微)。

文章還對這種 soft attention 做了微調:

其中,用來調節 context vector 在 LSTM 中的比重(相對於的比重)。

btw,模型的 loss function 加入了 αti 的正則項。

Attention-based NMT

■ 論文 | Effective Approaches to Attention-based Neural Machine Translation

■ 連結 | https://www.paperweekly.site/papers/806

■ 源碼 | https://github.com/lmthang/nmt.matlab

文章提出了兩種 attention 的改進版本,即 global attention 和 local attention。先感受一下 global attention 和 local attention 長什麼樣子。

 Global Attention

 Local Attention

文章指出,local attention 可以視為 hard attention 和 soft attention 的混合體(優勢上的混合),因為它的計算複雜度要低於 global attention、soft attention,而且與 hard attention 不同的是,local attention 幾乎處處可微,易與訓練。 文章以機器翻譯為場景, x1,...,xn 為 source sentence, y1,...,ym 為 target sentence, c1,...,cm 為 encoder 產生的 context vector,objective function 為:

Ct 來源於 encoder 中多個 source position 所產生的 hidden states,global attention 和 local attention 的主要區別在於 attention 所 forcus 的 source positions 數目的不同:如果 attention forcus 全部的 position,則是 global attention,反之,若只 focus 一部分 position,則為 local attention。 

由此可見,這裡的 global attention、local attention 和 soft attention 並無本質上的區別,兩篇 paper 模型的差別只是在 LSTM 結構上有微小的差別。 

在 decoder 的時刻 t ,在利用 global attention 或 local attention 得到 context vector Ct 之後,結合 ht ,對二者做 concatenate 操作,得到 attention hidden state。

最後利用 softmax 產出該時刻的輸出:

下面重點介紹 global attention、local attention。

1. global attention 

global attention 在計算 context vector ct 的時候會考慮 encoder 所產生的全部hidden state。記 decoder 時刻 t 的 target hidden為 ht,encoder 的全部 hidden state 為,對於其中任意,其權重 αts 為:

而其中的,文章給出了四種種計算方法(文章稱為 alignment function):

四種方法都比較直觀、簡單。在得到這些權重後, ct 的計算是很自然的,即為的 weighted summation。


2. local attention 

global attention 可能的缺點在於每次都要掃描全部的 source hidden state,計算開銷較大,對於長句翻譯不利,為了提升效率,提出 local attention,每次只 focus 一小部分的 source position。 

這裡,context vector ct 的計算只 focus 窗口 [pt-D,pt+D] 內的 2D+1 個source hidden states(若發生越界,則忽略界外的 source hidden states)。

其中 pt 是一個 source position index,可以理解為 attention 的「焦點」,作為模型的參數, D 根據經驗來選擇(文章選用 10)。 關於 pt 的計算,文章給出了兩種計算方案:


其中 Wp 和 vp 是模型的參數, S 是 source sentence 的長度,易知 pt∈[0,S] 。 權重 αt(s) 的計算如下:

可以看出,距離中心 pt 越遠的位置,其位置上的 source hidden state 對應的權重就會被壓縮地越厲害。

Jointly Learning

■ 論文 | Neural Machine Translation by Jointly Learning to Align and Translate

■ 連結 | https://www.paperweekly.site/papers/434

■ 源碼 | https://github.com/spro/torch-seq2seq-attention

這篇文章沒有使用新的 attention 結構,其 attention 就是 soft attention 的形式。文章給出了一些 attention 的可視化效果圖。

上面 4 幅圖中,x 軸代表原始英文句子,y 軸代表翻譯為法文的結果。每個像素代表的是縱軸的相應位置的 target hidden state 與橫軸相應位置的 source hidden state 計算得到的權重 αij,權重越大,對應的像素點越亮。可以看到,亮斑基本處在對角線上,符合預期,畢竟翻譯的過程基本是沿著原始句子從左至右依次進行翻譯。

Attention Is All You Need

■ 論文 | Attention Is All You Need

■ 連結 | https://www.paperweekly.site/papers/224

■ 源碼 | https://github.com/Kyubyong/transformer

■ 論文 | Weighted Transformer Network for Machine Translation

■ 連結 | https://www.paperweekly.site/papers/2013

■ 源碼 | https://github.com/JayParks/transformer

作者首先指出,結合了 RNN(及其變體)和注意力機制的模型在序列建模領域取得了不錯的成績,但由於 RNN 的循環特性導致其不利於並行計算,所以模型的訓練時間往往較長,在 GPU 上一個大一點的 seq2seq 模型通常要跑上幾天,所以作者對 RNN 深惡痛絕,遂決定捨棄 RNN,只用注意力模型來進行序列的建模。 

作者提出一種新型的網絡結構,並起了個名字 Transformer,裡面所包含的注意力機制稱之為 self-attention。作者驕傲地宣稱他這套 Transformer 是能夠計算 input 和 output 的 representation 而不藉助 RNN 的唯一的 model,所以作者說有 attention 就夠了。

模型同樣包含 encoder 和 decoder 兩個 stage,encoder 和 decoder 都是拋棄 RNN,而是用堆疊起來的 self-attention,和 fully-connected layer 來完成,模型的架構如下:

從圖中可以看出,模型共包含三個 attention 成分,分別是 encoder 的 self-attention,decoder 的 self-attention,以及連接 encoder 和 decoder 的 attention。  

這三個 attention block 都是 multi-head attention 的形式,輸入都是 query Q 、key K 、value V 三個元素,只是 Q 、 K 、 V 的取值不同罷了。接下來重點討論最核心的模塊 multi-head attention(多頭注意力)。 

multi-head attention 由多個 scaled dot-product attention 這樣的基礎單元經過 stack 而成。

那重點就變成 scaled dot-product attention 是什麼鬼了。按字面意思理解,scaled dot-product attention 即縮放了的點乘注意力,我們來對它進行研究。 

在這之前,我們先回顧一下上文提到的傳統的 attention 方法(例如 global attention,score 採用 dot 形式)。

記 decoder 時刻 t 的 target hidden state 為 ht,encoder 得到的全部 source hidden state為,則 decoder 的 context vector ct 的計算過程如下:

作者先拋出三個名詞 query Q、key K、value V,然後計算這三個元素的 attention。

我的寫法與論文有細微差別,但為了接下來說明的簡便,我姑且簡化成這樣。這個 Attention 的計算跟上面的 (*) 式有幾分相似。

那麼 Q、K、V 到底是什麼?論文裡講的比較晦澀,說說我的理解。encoder 裡的 attention 叫 self-attention,顧名思義,就是自己和自己做 attention。

拋開這篇論文的做法,讓我們激活自己的創造力,在傳統的 seq2seq 中的 encoder 階段,我們得到 n 個時刻的 hidden states 之後,可以用每一時刻的 hidden state hi,去分別和任意的 hidden state hj,j=1,2,...,n 計算 attention,這就有點 self-attention 的意思。

回到當前的模型,由於拋棄了 RNN,encoder 過程就沒了 hidden states,那拿什麼做 self-attention 來自嗨呢?

可以想到,假如作為 input 的 sequence 共有 n 個 word,那麼我可以先對每一個 word 做 embedding 吧?就得到 n 個 embedding,然後我就可以用 embedding 代替 hidden state 來做 self-attention 了。所以 Q 這個矩陣裡面裝的就是全部的 word embedding,K、V 也是一樣。

所以為什麼管 Q 叫query?就是你每次拿一個 word embedding,去「查詢」其和任意的 word embedding 的 match 程度(也就是 attention 的大小),你一共要做 n 輪這樣的操作。 

我們記 word embedding 的 dimension 為 dmodel ,所以 Q 的 shape 就是 n*dmodel, K、V 也是一樣,第 i 個 word 的 embedding 為 vi,所以該 word 的 attention 應為:

那同時做全部 word 的 attention,則是:

scaled dot-product attention 基本就是這樣了。基於 RNN 的傳統 encoder 在每個時刻會有輸入和輸出,而現在 encoder 由於拋棄了 RNN 序列模型,所以可以一下子把序列的全部內容輸進去,來一次 self-attention 的自嗨。

理解了 scaled dot-product attention 之後,multi-head attention 就好理解了,因為就是 scaled dot-product attention 的 stacking。

先把 Q、K、V 做 linear transformation,然後對新生成的 Q'、K'、V' 算 attention,重複這樣的操作 h 次,然後把 h 次的結果做 concat,最後再做一次 linear transformation,就是 multi-head attention 這個小 block 的輸出了。 

以上介紹了 encoder 的 self-attention。decoder 中的 encoder-decoder attention 道理類似,可以理解為用 decoder 中的每個 vi 對 encoder 中的 vj 做一種交叉 attention。

decoder 中的 self-attention 也一樣的道理,只是要注意一點,decoder 中你在用 vi 對 vj 做 attention 時,有一些 pair 是不合法的。原因在於,雖然 encoder 階段你可以把序列的全部 word 一次全輸入進去,但是 decoder 階段卻並不總是可以,想像一下你在做 inference,decoder 的產出還是按從左至右的順序,所以你的 vi 是沒機會和 vj ( j>i ) 做 attention 的。

那怎麼將這一點體現在 attention 的計算中呢?文中說只需要令 score(vi,vj)=-∞ 即可。為何?因為這樣的話:

所以在計算 vi 的 self-attention 的時候,就能夠把 vj 屏蔽掉。所以這個問題也就解決了。

模型的其他模塊,諸如 position-wise feed-forward networks、position encoding、layer normalization、residual connection 等,相對容易理解,感興趣的同學可以去看 paper,此處不再贅述。

總結

本文對 attention 的五種結構,即 hard attention、soft attention、global attention、local attention、self-attention 進行了具體分析。五種 attention 在計算複雜度、部署難度、模型效果上會有一定差異,實際中還需根據業務實際合理選擇模型。

關於PaperWeekly


PaperWeekly 是一個推薦、解讀、討論、報導人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。

▽ 點擊 | 閱讀原文 | 加入社區刷論文

相關焦點

  • 多任務學習——共享模式/權重選擇/attention融合論文剖析
    0、引言踩著農曆2020的尾巴,整理和推薦一部分多目標論文。文中提及的論文,我都精讀過n次(  哈哈)。某些論文我已經在真實的工業場景實踐過,有的有收益,有的暫無收益。選出的這八篇論文,是我認為的較有價值且值得一試的文章。
  • 百篇最值得一讀的「認知圖譜」經典論文
    那麼,想深入學習和研究認知圖譜,研讀該領域的經典論文,對於研究者和從業者都必不可缺。經過我們對人工智慧領域國際頂會/期刊中「認知圖譜」相關關鍵詞論文的計算,以及熱心讀者徐菁博士的整理,AMiner 推出了 100 篇認知圖譜經典必讀論文。這些論文可以說基本都是經典中的經典,他們多是領域大佬+頂級會議的組合,讀完它們,相信你對認知圖譜的認認識肯定會有質的飛越。
  • 深度學習之Attention模型詳解
    本文提出了兩種attention:本文的模型結構:2,Hard attention:Hard attention很粗暴,挑出最大權重的向量,剔除其餘向量(置0)。顯然這種形式的模型是不可微的,為了實現BP,這裡採用蒙特卡洛採樣的方法來估計模塊的梯度。
  • 從Seq2seq到Attention模型到Self Attention(二)
    這篇文章將重點擺在Google於2017年發表論文「Attention is all you need」中提出的 「」The transformer模型。」The transformer」模型中主要的概念有2項:1. Self attention 2. Multi-head,此外,模型更解決了傳統attention model中無法平行化的缺點,並帶來優異的成效。
  • 文獻綜述類論文寫作秘籍
    在文獻綜述時不僅要綜述觀點,還要綜述研究方法(即別人是怎麼說的)。方法的發展和進步會在很多方面改變已有的觀點。例如,產業組織理論中博弈論研究分析方法的引入就改變了SCP框架下產生的很多觀點。隨著數據獲取途徑的增多和獲取技術的改進,總的來說,針對某一研究對象所使用的研究方法會越來越多。
  • 深度圖生成模型綜述:5類模型及前景(附PDF下載)
    得益於基於圖的深度學習技術的進步,圖生成模型有了發現新穎的分子結構、建模社交網絡等在圖上的新應用。近日arXiv的一篇綜述文章對基於深度學習的圖生成模型進行了全面的調查,將現有模型劃分為五大類,並分別進行了詳盡的描述,本文是對該文章內容的整體介紹。
  • 鄧力、何曉冬深度解讀:多模態智能未來的研究熱點
    此次解讀的這篇綜述論文將於近期發表在信號處理和模式識別領域內的頂級刊物IEEE Journal of Selected Topics in SignalProcessing的最新特刊:跨語音、語言、視覺和異構信號的多模態智能深度學習 (Deep Learning for Multimodal Intelligenceacross Speech, Language, Vision, and
  • 我整理了三百多篇論文,得出了寫文獻綜述的這些經驗
    文獻綜述的目的最終的碩士畢業論文裡,文獻綜述的部分是不可或缺的,而讓我們這些「研究者」寫文獻綜述的目的在於總結和整理前人的關於某一個問題的研究成果,然後說明自己的這篇論文的研究在這個基礎上有什麼創新或者意義,又或者說是另外的一種研究方法的更新。
  • 大神們最近都在讀這些論文 | 本周值得讀 #44
    此外,我們還能從對偶學習的角度進行解讀,生成器對 p(x|y) 進行建模,而分類器則對 p(y|x) 建模。兩者在判別器的統籌下達成 p(x,y) 的一致性。這是很漂亮的對偶思想!可以說這篇文章對三方的設計非常巧妙。
  • 7 papers|3篇綜述論文,全面了解機器閱讀理解、圖表徵學習等
    機器之心整理機器之心編輯部本周 7 Papers 重點推薦三篇綜述論文,包括機器學習測試綜述、圖數據表徵學習方法最新進展綜述以及機器閱讀理解綜述。這些 survey 論文能夠很好的幫助我們全面了解特定技術主題。
  • 長文解讀綜述NLP中的預訓練模型(純乾貨)
    自Attention機制提出後,加入attention的Seq2seq模型在各個任務上都有了提升,所以現在的seq2seq模型指的都是結合RNN或者LSTM和attention的模型。之後谷歌又提出了Transformer模型,用self-attention的結構代替了lstm+attention的結構。對於transformer總體的理解可以查看資料[1,3,6]。
  • 論文大燜鍋:NBER論文速遞 充分統計量方法(Sufficient Statistics):文獻綜述
    在應用經濟學領域有兩種基本分析範式:結構模型方法(Structual Approach)與簡化方法(Reduced Form Approach)。前者通過建立理論模型並校準模型中的參數來模擬政策和環境變化對於經濟人行為和社會福利的影響;後者則更關心利用自然實驗設計進行因果識別。
  • 【復旦大學】最新《預訓練語言模型》2020綜述論文大全,50+PTMs分類體系,25頁pdf205篇參考文獻
    近日,復旦大學邱錫鵬等學者發布了自然語言處理處理中預訓練模型PTMs的綜述大全,共25頁pdf205篇參考文獻,從背景知識到當前代表性PTM模型和應用研究挑戰等,是絕好的預訓練語言模型的文獻。這些神經模型的優點之一是能夠緩解特徵工程問題。非神經NLP方法通常嚴重依賴於離散的手工特徵,而神經方法通常使用低維和稠密的向量(又稱分布式表示)隱式地表示語言的語法或語義特徵。這些表示是在特定的NLP任務中學習的。因此,神經方法使人們可以很容易地開發各種NLP系統。
  • 阿里達摩院自動駕駛新成果;邱錫鵬預訓練模型論文綜述
    機器之心&ArXiv Weekly Radiostation 參與:杜偉,楚航,羅若天 本周的重要論文有阿里達摩院在自動駕駛領域的新成果,以及復旦大學邱錫鵬教授發表的預訓練模型綜述論文
  • 【AAAI 2018】騰訊 AI Lab 11篇論文解讀:圖像描述、NMT 模型、圖卷積神經網絡、DNN優化等
    在AAAI 2018,騰訊 AI Lab 有 11 篇論文被錄用,涉及圖像描述、更低計算成本的預測表現、NMT 模型中的特定翻譯問題、自適應圖卷積神經網絡、DNN面對對抗樣本的優化問題等,本文帶來全部11篇論文的摘要解讀。1.
  • 從經典結構到改進方法,神經網絡語言模型綜述
    神經網絡語言模型(NNLM)克服了維數的限制,提升了傳統語言模型的性能。本文對 NNLM 進行了綜述,首先描述了經典的 NNLM 的結構,然後介紹並分析了一些主要的改進方法。研究者總結並對比了 NNLM 的一些語料庫和工具包。此外,本文還討論了 NNLM 的一些研究方向。
  • 文獻綜述怎麼寫?這篇文章說的透徹!
    例如,戰略管理研究定位學派的「五力模型」是波特於1979年提出的,當我們知道波特是哈佛商學院和哈佛經濟系聯合培養的博士之後,就能更好地理解這一模型與哈佛老一代經濟學家提出的SCP框架之間的傳承關係。實際上,如果我們能夠在文獻綜述的過程中回答好以上四個方面的問題,那麼就可以基本確定我們要做的研究或要寫的論文的創新點、主要思路和擬採用的方法。
  • ACL 2017 傑出論文公布,國內四篇論文入選(附解讀)
    4 月 22 日,中國中文信息學會青年工作委員會在北京舉辦了一場「ACL 2017 論文報告會」,邀請了國內部分被錄用論文的作者針對其論文進行主題報告(參閱:ACL 2017 中國研究論文解讀:讀懂中國自然語言處理前沿進展)。從近日 ACL 2017 官網釋放的消息來看,中國有四篇論文入選 ACL 2017 Outstanding Papers。
  • 清華大學張長水等最新《少樣本學習FSL》2020綜述論文,30頁pdf414篇參考文獻
    在此背景下,我們廣泛回顧了2000年至2019年FSL的200多篇論文,為FSL提供了及時而全面的調研。在本綜述中,我們回顧了FSL的發展歷史和目前的進展,原則上將FSL方法分為基於生成模型和基於判別模型的兩大類,並特別強調了基於元學習的FSL方法。我們還總結了FSL中最近出現的幾個擴展主題,並回顧了這些主題的最新進展。
  • 文獻綜述論文寫作
    學會提出科學問題,熟悉複習文獻的方法,養成批判性思維的習慣,具有文獻綜述的能力和精湛論文寫作技巧。經過研究生期間的培養訓練。能夠寫出一篇內容豐滿、結構合理、邏輯清晰、文筆優美、體例規範的文獻綜述論文。文獻追溯 (literature retrieving)根據關鍵詞,在公開的論文資料庫中,如英文的PubMed、Google scholar、Researchgate,中文的知網、百度學術、全球資訊網等,搜集所有相關研究論文,貯存於文獻處理軟體中,如Endnote等。因此,研究生必須掌握使用科研論文資料庫的方法,具備使用文獻管理軟體的能力。4.