NewBeeNLP原創出品 node
公衆號專欄做者@蘑菇先生 web
知乎 | 蘑菇先生學習記算法
前情提要:四萬字全面詳解 | 深度學習中的注意力機制
微信
目前深度學習中熱點之一就是注意力機制(Attention Mechanisms)。Attention源於人類視覺系統,當人類觀察外界事物的時候,通常不會把事物當成一個總體去看,每每傾向於根據須要選擇性的去獲取被觀察事物的某些重要部分,好比咱們看到一我的時,每每先Attend到這我的的臉,而後再把不一樣區域的信息組合起來,造成一個對被觀察事物的總體印象。
網絡
「同理,Attention Mechanisms能夠幫助模型對輸入的每一個部分賦予不一樣的權重,抽取出更加關鍵及重要的信息,使模型作出更加準確的判斷,同時不會對模型的計算和存儲帶來更大的開銷,這也是Attention Mechanism應用如此普遍的緣由」架構
在上一篇文章中,咱們分享了seq2seq以及普通attention網絡,今天來看看Attention機制的各類變體。app
另外,咱們創建了天然語言處理、深度學習大方向的討論組,歡迎你們加入討論(人數達到上限,添加下方好友手動邀請)編輯器
Attention Variants
本部分介紹Attention機制的各類變體。包括但不限於:ide
-
「基於強化學習的注意力機制」:選擇性的Attend輸入的某個部分 -
「全局&局部注意力機制」:其中,局部注意力機制能夠選擇性的Attend輸入的某些部分 -
「多維度注意力機制」:捕獲不一樣特徵空間中的Attention特徵。 -
「多源注意力機制」:Attend到多種源語言語句 -
「層次化注意力機制」:word->sentence->document -
「注意力之上嵌一個注意力」:和層次化Attention有點像。 -
「多跳注意力機制」:和前面兩種有點像,可是作法不太同樣。且藉助殘差鏈接等機制,可使用更深的網絡構造多跳Attention。使得模型在獲得下一個注意力時,可以考慮到以前的已經注意過的詞。 -
「使用拷貝機制的注意力機制」:在生成式Attention基礎上,添加具有拷貝輸入源語句某部分子序列的能力。 -
「基於記憶的注意力機制」:把Attention抽象成Query,Key,Value三者之間的交互;引入先驗構造記憶庫。 -
「自注意力機制」:本身和本身作attention,使得每一個位置的詞都有全局的語義信息,有利於創建長依賴關係。
Reinforcement-learning based Attention
-
NIPS2014: Recurrent Models of Visual Attention [1] -
ICLR2015: Multiple Object Recognition with Visual Attention [2]
NIPS2014論文應該是最先的Attention雛形,雖然和咱們一般所說的、普遍應用於Seq2Seq的Attention機制不太同樣,可是仍是值得提一下。這是Google DeepMind2014年提出的一篇計算機視覺領域的文章,適用於處理圖像序列或幀序列來進行場景感知或處理(例如Video Caption)。svg
其動機在於隨着分辨率提升,計算量不斷增加,神經網絡難以在實時應用場景中,快速處理這麼大的計算量。借鑑人類視覺系統的特色,即,爲了理解某個場景,並非一會兒處理整個場景,而是Focus到某些關鍵的位置上,而後聯合起來構建出整個場景信息。故本篇論文利用RNN處理圖像序列,並使用「強化學習」來訓練模型,使得模型可以學習attention決策。即,針對實時的場景,基於過去的信息和任務的須要選擇下一個要focus的感知區域。這個和人類的感知方式比較類似,也是咱們最先理解的Attention機制。
可是,上文所述的普遍應用於Seq2Seq中的Attention不大同樣。人類的注意力機制其實是能夠節省計算資源的,注意只須要集中到某些區域,能夠忽略大部分區域。Recurrent Models of Visual Attention中的作法和這個是同樣的。
然而,下文即將要介紹的應用於Seq2Seq模型模型的Attention就不是這樣的了。實際上,下文所述Attention模型,須要把每個部分都觀察的仔仔細細(每部分權重都要算一下),才能進一步決策到底須要focus到哪些部分,這和人類的視覺系統不相符,更像是memory,而不是attention(實際上attention能夠理解爲一種「短時間記憶」,即根據短時間記憶在輸入特徵上分配attention;memory也是另一種很是重要的機制),然而,這並不妨礙注意力機制的有效性。
Global & Local Attention
-
EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation [3]
以往的文章,主要將attention應用於不一樣場景中,而這篇文章提出了新的attention架構,引入了Global Attention和Local Attention的概念。
Global Attention和上文的Soft Attention幾乎同樣,即計算上下文向量時,和全部的encoder隱狀態向量求alignment;而Local Attention是Soft Attention和Hard Attention的權衡,既擁有Soft Attention可微分,容易使用反向傳播來優化的優勢,又擁有Hard Attention複雜度低的優勢,除此以外,還不須要強化學習方法進行訓練。
首先定義,
-
Encoder獲得的源語句單詞 的隱狀態爲: ; -
Decoder中目標語句單詞 的隱狀態爲: ; -
對每個目標單詞 ,使用Attention機制計算的上下文向量爲 ; -
Attention機制中的對齊模型爲 (前面文章中都是使用 , 即 「前一個時間步」的Decoder隱狀態和Encoder隱狀態來計算對齊權重)。
首先是Global Attention,以下圖所示:
Global Attention中上下文向量 的計算路徑爲: 。
-
對齊模型計算:
是源語句單詞的位置。
具體能夠採用:
-
上下文向量計算:
注意圖中,框起來的部分做者稱爲Attention Layer。
接着是Local Attention,以下圖所示:
Local Attention的引入是爲了解決Global Attention中Attend到源語句中全部的詞,一方面複雜度高,另外一方面很難翻譯長序列語句。Local Attention首先根據目標詞的隱狀態 計算源語句中的「對齊位置」(中心) ,而後使用以該位置爲中心的窗口 內的源語句單詞 ,來計算Attention的權重,計算時使用以 爲中心的高斯核函數進行衰減。具體以下:
-
「對齊位置模型」: , , 是源語句長度。只與t時刻Decoder狀態 有關。 -
對齊權重模型: , 也就是在global Attention對齊模型基礎上加了高斯函數指數衰減。 。
計算上下文向量時,同上文,即對窗口內的encoder隱向量進行加權,即 。
計算獲得上下文向量後,本文直接將 和 concat在一塊兒,並計算通過attention後的隱狀態 :
再將上述attention後的隱狀態輸入到一個softmax全鏈接層,獲得預測目標值:
按照上述方式來看,每一個目標輸出單詞的預測值,沒有利用已經預測的輸出單詞(embedding)做爲輸入,也沒有利用目標詞位置前一時刻的decoder隱狀態 ;只利用了當前時刻Decoder隱狀態 (上下文向量計算中的權重也主要依據這個計算的)。也就是說,每一個目標詞位置的attention決策是獨立的(只和 自己相關)。
然而在機器翻譯當中,一般要維護一個覆蓋集,即源語句中哪些單詞被翻譯過了;同理,在神經機器翻譯中,咱們在翻譯一個目標詞時,一樣須要關注哪些源語句單詞已經被翻譯了。所以,做者提出了一個Input-feeding approach,把Decoder端前一時刻attention「後」的隱狀態和前一時刻預測的輸出單詞的embedding鏈接起來,做爲下一時刻的輸入。(這個和傳統Attention的幾乎沒差異)
本文的貢獻主要是Local Attention以及提出的各類各樣的Alignment函數,其他都和前面的工做大同小異。現總結下Alignment函數以下圖所示:
Multi-dimensional Attention
-
AAAI2018:DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding [4]
在Baisc Attention中,對於每一個查詢,每一個key對應的value都有一個權重值,即每一個查詢會對應一個1-D的Attention weight向量。而Multi-dimensional Attention會產生更高維度的Attention矩陣,旨在捕獲不一樣特徵空間中的Attention特徵。
實際上主要區別在於,以前每一個value向量對應一個權重Alignment Score,加權的時候其實是利用了廣播機制,value每一個元素feature都乘上該權重;如今修改成在feature-level,每一個元素特徵都乘上不一樣的權重係數,所以Alignment Score是和Value同維度數的向量,即右圖中的 。作法很簡單,使用MLP對齊的時候,MLP輸出層神經元數量等於Value維度數便可,例如這篇文章中使用
其餘方式以下:(
)
Multi-Source Attention
-
NAACL-HLT2016:Multi-Source Neural Translation [5]
這是2016發表在NAACL-HLT的一篇文章。文章使用英語,德語,法語三種語言創建了一種多源(三語言)機器翻譯模型。Intuition在於,若是一篇文章被翻譯成了另外一種語言,那麼就更加傾向於被翻譯成其餘語言。這樣的觀點對機器翻譯任務有必定的啓發,將本來的單一源語言替換爲多種源語言,應該能夠取得更好的效果。
如英語中的「bank」一詞本來能夠翻譯爲河岸或是銀行,若是源語言中有德語詞彙「Flussufer」(河岸)做爲幫助,則天然能夠精確獲得法語中「Berge」(河岸)這樣的翻譯結果。基於這樣的思想,做者在原有的seq2seq+attention模型的基礎上作了修改,引入更多源語句,創建一種多源的翻譯模型。模型結構以下:
左側是兩種不一樣語言的源語句,每種語言的源語句都有一個本身的encoder,且結構同樣。問題的關鍵在於如何將兩種語言encoder的東西combine在一塊兒,並和decoder的表示進行對齊求attention。
因爲做者採用了LSTM,所以同時考慮了hidden state和cell state的combination。核心工做就是圖中黑色部分的combiners。combiners的輸入是兩個源語句最後時刻encoder獲得的hidden state 和cell state ,輸出是單個hidden state 和單個cell state 。(以往的工做彷佛沒有把encoder的cell state給decoder,從圖中還能夠看出,兩個encoder中,每一層獲得的兩個源語句的hidden state和cell state都須要通過combiners)
-
最基本的combiner:對於hideen state,就是把兩個encoder的隱狀態concat起來,再作一個線性變換+tanh激活: 。對於cell state,直接相加: 。
-
LSTM variant combiner:
惟一要提的就是, 做爲輸入,每一個encoder獲得的cell state各自對應一個本身的遺忘門。
到目前爲止,都不涉及到attention。上文獲得的 和 只是做爲decoder的初始輸入(前一時刻的輸入,之前的Seq2Seq模型,彷佛cell state沒有傳給decoder)。
至於attention,做者作了很小的改動。採用的是EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation[6]中的Local Attention。
在這個基礎上,讓decoder的隱狀態同時和兩個encoder獲得的隱狀態進行對齊,並各自計算獲得一個上下文向量, ,注意這個c是上下文向量,跟上文所述cell state無關。最後計算Decoder的Attentional Hidden State時,使用 。也就是以前只使用1個上下文向量,這裏面使用兩個上下文向量。
下面是實驗的一個case:
Hierarchical Attention
-
NAACL-HLT2016:Hierarchical Attention Networks for Document Classification [7]
文本分類是一項基礎的NLP任務,在主題分類,情感分析,垃圾郵件檢測等應用上有普遍地應用。其目標是給「每篇」文本分配一個類別標籤。本文中模型的直覺是,不一樣的詞和句子對文本信息的表達有不一樣的影響,詞和句子的重要性是嚴重依賴於上下文的,即便是相同的詞和句子,在不一樣的上下文中重要性也不同。就像人在閱讀一篇文本時,對文本不一樣的內容是有着不一樣的注意度的。而本文在attention機制的基礎上,聯想到文本是一個層次化的結構,提出用詞向量來表示句子向量,再由句子向量表示文檔向量,而且在詞層次和句子層次分別引入attention操做的模型。
模型結構如上圖所示,
-
詞先通過Bidirectional RNN(GRU)提取到word annotation,而後通過1個MLP獲得word annotation對應的隱表示(這一步在Basic Attention中沒有), -
而後使用該隱表示和全局的 「word-level上下文隱向量」 進行對齊,計算類似性,獲得softmax後的attention權重, -
最後對句子內的詞的word annotation根據attention權重加權,獲得每一個句子的向量表示。 -
接着,將獲得的句子表示一樣通過Bidirectional RNN(GRU)提取sentence annotation,再通過MLP獲得對應的隱表示,接着將其和全局的 「sentence-level上下文隱向量」 進行對齊計算,獲得句子的attention權重,最後加權sentence annotation獲得文檔級別的向量表示。獲得文檔表示後再接一個softmax全鏈接層用於分類。
這裏最有趣的一點是,全局的「word-level上下文隱向量」 和全局的的「sentence-level上下文隱向量」 ,是隨機初始化的,且也是經過模型進行學習的。這兩者就像專家同樣,是高級諮詢顧問。爲了獲得句子的向量表示,咱們詢問 哪些詞含有比較重要的信息?爲了獲得文檔的向量表示,咱們詢問 哪些句子含有比較重要的信息?
Attention over Attention
-
ACL2017:Attention-over-Attention Neural Networks for Reading Comprehension [8]
比較巧妙,但很容易理解,直接上圖:
兩個輸入,一個Document和一個Query,分別用一個雙向的RNN進行特徵抽取,獲得各自的隱狀態 和 。(Embedding Layer+Bi-GRU Layer)。接着要計算document和query之間「每一個詞」的類似性得分,
而後基於query和doc的隱狀態進行dot product,獲得doc和query的attention關聯矩陣 (Document全部詞和Query全部詞和之間的關聯矩陣,行是Document,列是Query)。而後按列(column)方向進行softmax操做,獲得query-to-document的attention值 ,表示t時刻的query 「word」的document-level attention。按照行(row)方向進行softmax操做,獲得document-to-query的attention值 ,表示t時刻的document 「word」的query-level attention,再對 按照列方向進行累加求平均獲得averaged query-level attention值 ,(能夠證實,按列對 平均後仍然是機率分佈),這個求平均的操做能夠理解爲求query-level每一個詞和document全部詞的平均關聯性。
最後再基於上一步attention操做獲得 和 ,再進行attention操做,即attention over attention獲得最終的attended attention ,即Document每一個詞都有一個attended attention score。
預測的時候,預測詞典中每一個詞的機率,將詞w在document中出現的位置上對應的attention值進行求和。例如圖中Mary出如今Document首尾,故把這兩個attention score相加,做爲預測的機率。
文章的亮點在於,引入document和query全部詞pair-wise的關聯矩陣,分別計算query每一個詞document-level attention(傳統的方法都只利用了這個attention),和document每一個詞的query-level attention,對後者按列取平均獲得的averaged query-level attention。進一步,兩者點乘獲得attended document-level attention,也即attention-over-attention。
這個和上文層次化Attention有點像。
ok,今天就到這兒啦,敬請期待下一篇~我是蘑菇先生,歡迎你們到個人公衆號『蘑菇先生學習記』一塊兒交流!
一個小通知
因爲微信平臺算法改版,公號內容將再也不以時間排序展現,若是你們想第一時間看到咱們的文章,強烈建議星標咱們和給咱們多點點【在看】。星標具體步驟爲:
1. 點擊頁面最上方"NewBeeNLP",進入公衆號主頁。
2. 點擊右上角的小點點,在彈出頁面點擊「設爲星標」,就能夠啦。
感謝每一份支持,比心
本文參考資料
NIPS2014: Recurrent Models of Visual Attention: https://papers.nips.cc/paper/5542-recurrent-models-of-visual-attention.pdf
[2]ICLR2015: Multiple Object Recognition with Visual Attention : https://arxiv.org/abs/1412.7755
[3]EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation: http://aclweb.org/anthology/D15-1166
[4]AAAI2018:DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding: https://arxiv.org/pdf/1709.04696.pdf
[5]NAACL-HLT2016:Multi-Source Neural Translation: http://www.aclweb.org/anthology/N16-1004
[6]EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation: http://aclweb.org/anthology/D15-1166
[7]NAACL-HLT2016:Hierarchical Attention Networks for Document Classification: http://www.aclweb.org/anthology/N16-1174
[8]ACL2017:Attention-over-Attention Neural Networks for Reading Comprehension: https://arxiv.org/pdf/1607.04423.pdf
- END -
![](http://static.javashuo.com/static/loading.gif)
2020-11-03
![](http://static.javashuo.com/static/loading.gif)
2020-10-29
![](http://static.javashuo.com/static/loading.gif)
2020-10-26
![](http://static.javashuo.com/static/loading.gif)
2020-10-20
![](http://static.javashuo.com/static/loading.gif)
2020-10-16
![](http://static.javashuo.com/static/loading.gif)
記得把NewBeeNLP設爲星標哦
等你在看
本文分享自微信公衆號 - NewBeeNLP(NewBeeNLP)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。