Attention-based Model


一、Attention與其他模型

1、LSTM、RNN的缺點:輸入的Memory長度不能太長,否則參數會很多。

采用attention可以輸入長Memory,參數不會變多。

2、Sequence to Sequence Learning : 輸入和輸出的句子長度可以不一樣,常用來做句子翻譯。

比如:將中文的4個字”機器學習“翻譯成英文的2個單詞”machine learning“。

二、Attention的研究發展

1、在RNN模型上使用了attention機制來進行圖像分類【google mind團隊的這篇論文《Recurrent Models of Visual Attention》】

2、將attention應用到機器翻譯中,第一次用在NLP中【Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》】

  

  1、Recurrent Models of Visual Attention

注意力集中到圖像的特定部分。而且人類會根據之前觀察的圖像學習到未來要觀察圖像注意力應該集中的位置。下圖是這篇論文的核心模型示意圖。

  

該模型是在傳統的RNN上加入了attention機制(即紅圈圈出來的部分),通過attention去學習一幅圖像要處理的部分,每次當前狀態,都會根據前一個狀態學習得到的要關注的位置l當前輸入的圖像,去處理注意力部分像素,而不是圖像的全部像素。這樣的好處就是更少的像素需要處理,減少了任務的復雜度。可以看到圖像中應用attention和人類的注意力機制是很類似的,接下來我們看看在NLP中使用的attention。

  2、Attention-based RNN in NLP

2.1 Neural Machine Translation by Jointly Learning to Align and Translate

最大的特點還在於它可以可視化對齊,並且在長句的處理上更有優勢。

  這篇論文算是在NLP中第一個使用attention機制的工作。他們把attention機制用到了神經網絡機器翻譯(NMT)上,NMT其實就是一個典型的sequence to sequence模型,也就是一個encoder to decoder模型,傳統的NMT使用兩個RNN,一個RNN對源語言進行編碼,將源語言編碼到一個固定維度的中間向量,然后在使用一個RNN進行解碼翻譯到目標語言,傳統的模型如下圖:

這篇論文提出了基於attention機制的NMT,模型大致如下圖:

圖中我並沒有把解碼器中的所有連線畫玩,只畫了前兩個詞,后面的詞其實都一樣。可以看到基於attention的NMT在傳統的基礎上,它把源語言端的每個詞學到的表達(傳統的只有最后一個詞后學到的表達)和當前要預測翻譯的詞聯系了起來,這樣的聯系就是通過他們設計的attention進行的,在模型訓練好后,根據attention矩陣,我們就可以得到源語言和目標語言的對齊矩陣了。具體論文的attention設計部分如下:

2.2 Effective Approaches to Attention-based Neural Machine Translation [2]

    這篇論文是繼上一篇論文后,一篇很具代表性的論文,他們的工作告訴了大家attention在RNN中可以如何進行擴展,這篇論文對后續各種基於attention的模型在NLP應用起到了很大的促進作用。在論文中他們提出了兩種attention機制,一種是全局(global)機制,一種是局部(local)機制。

    首先我們來看看global機制的attention,其實這和上一篇論文提出的attention的思路是一樣的,它都是對源語言對所有詞進行處理,不同的是在計算attention矩陣值的時候,他提出了幾種簡單的擴展版本。

在他們最后的實驗中general的計算方法效果是最好的。

    我們再來看一下他們提出的local版本。主要思路是為了減少attention計算時的耗費,作者在計算attention時並不是去考慮源語言端的所有詞,而是根據一個預測函數,先預測當前解碼時要對齊的源語言端的位置Pt,然后通過上下文窗口,僅考慮窗口內的詞。

里面給出了兩種預測方法,local-m和local-p,再計算最后的attention矩陣時,在原來的基礎上去乘了一個pt位置相關的高斯分布。作者的實驗結果是局部的比全局的attention效果好。

這篇論文最大的貢獻我覺得是首先告訴了我們可以如何擴展attention的計算方式,還有就是局部的attention方法。

   3、Attention-based CNN in NLP

    隨后基於Attention的RNN模型開始在NLP中廣泛應用,不僅僅是序列到序列模型,各種分類問題都可以使用這樣的模型。那么在深度學習中與RNN同樣流行的卷積神經網絡CNN是否也可以使用attention機制呢?《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》 [13]這篇論文就提出了3中在CNN中使用attention的方法,是attention在CNN中較早的探索性工作。

傳統的CNN在構建句對模型時如上圖,通過每個單通道處理一個句子,然后學習句子表達,最后一起輸入到分類器中。這樣的模型在輸入分類器前句對間是沒有相互聯系的,作者們就想通過設計attention機制將不同cnn通道的句對聯系起來。

    第一種方法ABCNN0-1是在卷積前進行attention,通過attention矩陣計算出相應句對的attention feature map,然后連同原來的feature map一起輸入到卷積層。具體的計算方法如下。

    第二種方法ABCNN-2是在池化時進行attention,通過attention對卷積后的表達重新加權,然后再進行池化,原理如下圖。

    第三種就是把前兩種方法一起用到CNN中,如下圖

這篇論文提供了我們在CNN中使用attention的思路。現在也有不少使用基於attention的CNN工作,並取得了不錯的效果。

三、Attention的本質

1、解釋

     Google給出注意力機制的定義為,給定一個Query和一系列的key-value對一起映射出一個輸出。

  • 將Query與key進行相似性度量(類似於上述的權重wij)
  • 將求得的相似性度量進行縮放標准化
  • 將權重與value進行加權

Attention函數的本質可以被描述為一個查詢(query)到一系列(鍵key-值value)對的映射,如下圖。

在計算attention時主要分為三步,

第一步是將query和每個key進行相似度計算得到權重,常用的相似度函數有點積,拼接,感知機等;

第二步一般是使用一個softmax函數對這些權重進行歸一化;

最后將權重和相應的鍵值value進行加權求和得到最后的attention。目前在NLP研究中,key和value常常都是同一個,即key=value。

 

 

1、在NLP中:

  理解成自動加權,它可以把兩個你想要聯系起來的不同模塊,通過加權的形式進行聯系。目前主流的計算公式有以下幾種:

  

 

通過設計一個函數將目標模塊mt和源模塊ms聯系起來,然后通過一個soft函數將其歸一化得到概率分布。

目前Attention在NLP中已經有廣泛的應用。它有一個很大的優點就是可以可視化attention矩陣來告訴大家神經網絡在進行任務時關注了哪些部分。

2、在query推薦中,

  可以理解成相似度。

2 論文

2.1Attention is all you need[1]

接下來我將介紹《Attention is all you need》這篇論文。這篇論文是google機器翻譯團隊在2017年6月放在arXiv上,最后發表在2017年nips上,到目前為止google學術顯示引用量為119,可見也是受到了大家廣泛關注和應用。這篇論文主要亮點在於1)不同於以往主流機器翻譯使用基於RNN的seq2seq模型框架,該論文用attention機制代替了RNN搭建了整個模型框架。2)提出了多頭注意力(Multi-headed attention)機制方法,在編碼器和解碼器中大量的使用了多頭自注意力機制(Multi-headed self-attention)。3)在WMT2014語料中的英德和英法任務上取得了先進結果,並且訓練速度比主流模型更快。

該論文模型的整體結構如下圖,還是由編碼器和解碼器組成,在編碼器的一個網絡塊中,由一個多頭attention子層和一個前饋神經網絡子層組成,整個編碼器棧式搭建了N個塊。類似於編碼器,只是解碼器的一個網絡塊中多了一個多頭attention層。為了更好的優化深度網絡,整個網絡使用了殘差連接和對層進行了規范化(Add&Norm)。

下面我們重點關注一下這篇論文中的attention。在介紹多頭attention之前,我們先看一下論文中提到的放縮點積attention(scaled dot-Product attention)。對比我在前面背景知識里提到的attention的一般形式,其實scaled dot-Product attention就是我們常用的使用點積進行相似度計算的attention,只是多除了一個(為K的維度)起到調節作用,使得內積不至於太大。

多頭attention(Multi-head attention)結構如下圖,Query,Key,Value首先進過一個線性變換,然后輸入到放縮點積attention,注意這里要做h次,其實也就是所謂的多頭,每一次算一個頭。而且每次Q,K,V進行線性變換的參數W是不一樣的。然后將h次的放縮點積attention結果進行拼接,再進行一次線性變換得到的值作為多頭attention的結果。可以看到,google提出來的多頭attention的不同之處在於進行了h次計算而不僅僅算一次,論文中說到這樣的好處是可以允許模型在不同的表示子空間里學習到相關的信息,后面還會根據attention可視化來驗證。

那么在整個模型中,是如何使用attention的呢?如下圖,首先在編碼器到解碼器的地方使用了多頭attention進行連接,K,V,Q分別是編碼器的層輸出(這里K=V)和解碼器中都頭attention的輸入。其實就和主流的機器翻譯模型中的attention一樣,利用解碼器和編碼器attention來進行翻譯對齊。然后在編碼器和解碼器中都使用了多頭自注意力self-attention來學習文本的表示。Self-attention即K=V=Q,例如輸入一個句子,那么里面的每個詞都要和該句子中的所有詞進行attention計算。目的是學習句子內部的詞依賴關系,捕獲句子的內部結構。

   【對自己畫重點:】為什么要用self-attention?

對於使用自注意力機制的原因,論文中提到主要從三個方面考慮

(每一層的復雜度,是否可以並行,長距離依賴學習),並給出了和RNN,CNN計算復雜度的比較。可以看到,如果輸入序列n小於表示維度d的話,每一層的時間復雜度self-attention是比較有優勢的。

當n比較大時,作者也給出了一種解決方案self-attention(restricted)即每個詞不是和所有詞計算attention,而是只與限制的r個詞去計算attention。在並行方面,多頭attention和CNN一樣不依賴於前一時刻的計算,可以很好的並行,優於RNN。

在長距離依賴上,由於self-attention是每個詞和所有詞都要計算attention,所以不管他們中間有多長距離,最大的路徑長度也都只是1。可以捕獲長距離依賴關系。

2.2、self-attention in NLP

2.2.1 Deep Semantic Role Labeling with Self-Attention[8]

這篇論文來自AAAI2018,廈門大學Tan等人的工作。他們將self-attention應用到了語義角色標注任務(SRL)上,並取得了先進的結果。這篇論文中,作者將SRL作為一個序列標注問題,使用BIO標簽進行標注。然后提出使用深度注意力網絡(Deep Attentional Neural Network)進行標注,網絡結構如下。在每一個網絡塊中,有一個RNN/CNN/FNN子層和一個self-attention子層組成。最后直接利用softmax當成標簽分類進行序列標注。

該模型在CoNLL-2005和CoNll-2012的SRL數據集上都取得了先進結果。我們知道序列標注問題中,標簽之間是有依賴關系的,比如標簽I,應該是出現在標簽B之后,而不應該出現在O之后。目前主流的序列標注模型是BiLSTM-CRF模型,利用CRF進行全局標簽優化。在對比實驗中,He et al和Zhou and Xu的模型分別使用了CRF和constrained decoding來處理這個問題。可以看到本論文僅使用self-attention,作者認為在模型的頂層的attention層能夠學習到標簽潛在的依賴信息。

3.2 Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction[7]

這篇論文是Andrew McCallum團隊應用self-attention在生物醫學關系抽取任務上的一個工作,應該是已經被NAACL2018接收。這篇論文作者提出了一個文檔級別的生物關系抽取模型,里面做了不少工作,感興趣的讀者可以更深入閱讀原文。我們這里只簡單提一下他們self-attention的應用部分。論文模型的整體結構如下圖,他們也是使用google提出包含self-attention的transformer來對輸入文本進行表示學習,和原始的transformer略有不同在於他們使用了窗口大小為5的CNN代替了原始FNN。

我們關注一下attention這部分的實驗結果。他們在生物醫學葯物致病數據集上(Chemical Disease Relations,CDR)取得了先進結果。去掉self-attention這層以后可以看到結果大幅度下降,而且使用窗口大小為5的CNN比原始的FNN在這個數據集上有更突出的表現。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM