深度學習之Attention模型詳解

深度學習之Attention模型詳解

轉載自:Datawhale(ID:Datawhale)

本文8434字41圖,建議閱讀22分鐘

本文介紹深度學習中的Attention模型。

Attention的產生

起因:《Sequence to Sequence Learning with Neural Networks》

Attention模型的引入原因:

  1. seq2seq將輸入序列都壓縮成一個固定大小的隱變量,就像我們的壓縮文件一樣,這個過程是有損壓縮的,會迫使丟失許多輸入序列中的信息;
  2. 存在著難以對齊的問題。比如中譯音“我愛你”“I love you”,輸入序列中的“我”應該與“I”對齊(貢獻最大),然而在seq2seq模型中,“我”對"I","love","you"的貢獻都是一致的。
深度學習之Attention模型詳解

Attention的發展

Show, attend and tell: Neural image caption generation with visual attention

本文可以算是第一篇Attention論文。

深度學習之Attention模型詳解

該任務是實現圖文轉換。與前面講述的seq2seq的問題一樣,在之前的圖文轉換任務中也是存在著難以對齊的問題。所謂難以對齊就是毫無重點。

本文提出了兩種attention:

  1. sort Attention
  2. hard Attention

本文的模型結構:

深度學習之Attention模型詳解

將圖片通過一個CNN轉換成的LD.這裡稱L個向量為L個註釋向量(annotation vector),D為特徵維度,可以認為提取了圖片中L個區域的特徵。對這L個區域向量加權相加來表示這張圖片。由於不同時刻的關注點是不同的,annotation vector還要與decoder中的隱狀態進行交互,以便知道下一時刻的關注區域。

深度學習之Attention模型詳解

這裡編碼器是VGG,解碼器是LSTM。LTSM輸入是不同時刻的圖片的關注點信息,然後生成當前時刻的單詞。

Attention的計算

如上所屬,attention的值不僅與annotation vector 有關,還與上一時刻解碼器的隱狀態有關。因此有:

深度學習之Attention模型詳解

其中t表示時刻t,i表示第i個區域,a是我們得到的attention weight分佈。

f實際上是對齊函數,用於計算對齊的分數,常見的對齊函數有:dot product,general,multilayer perceptron。

1,Soft attention:直接使用attention的權重對L個向量加權相加,這麼做的好處是整個問題是可微的,可以利用BP end to end。

深度學習之Attention模型詳解

2,Hard attention:Hard attention很粗暴,挑出最大權重的向量,剔除其餘向量(置0)。顯然這種形式的模型是不可微的,為了實現BP,這裡採用蒙特卡洛採樣的方法來估計模塊的梯度。

深度學習之Attention模型詳解

幫助我們在t時刻選出了第i個向量是我們最後選中的的向量,引入一個變量,當區域i被選中時取值為1,否則為0.則有:

問題如何生成,在本文中,將視為隱變量,為參數是的多元伯努利分佈(伯努利是兩點分佈)

$$P(s_{t,i}=1|s_{t

深度學習之Attention模型詳解

這個可以認為是我們的帶隱變量的目標函數。

對目標函數求梯度:

深度學習之Attention模型詳解


用N次蒙特卡洛採用(拋銀幣)來近似:

深度學習之Attention模型詳解

在用蒙特卡洛方法估計梯度時可以用滑動平均來減小梯度的方差。在第k個mini-batch時,滑動平均被估計為先前對數似然伴隨指數衰減的累加和:

深度學習之Attention模型詳解

總結

總的來說,這裡率先引入了soft attention與hard attention,通過在每一時刻給圖片各個區域分配attention權重,來提升語句與特定圖塊的相關性。

結果:

深度學習之Attention模型詳解

Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation

本文可以算是第一篇在seq2seq中引入的Attention的論文(2015.07)

深度學習之Attention模型詳解

本文同樣涉及了soft attention,hard attention。求解形式與上一篇並無差異。

並且文中考慮了四種應用場景:1. Neural Machine Translation ;2. Image Caption Generation ;3. Video Description Generation ;4. End-to-End Neural Speech Recognition。

Effective Approaches to Attention-based Neural Machine Translation

本文比上一篇晚發表了2個月。。。

文章提出了兩種attention的改進版本,即global attention和local attention。

  1. global attention

global attention 在計算context vector 的時候會考慮encoder所產生的全部hidden state。其實就是第一篇文章的attetion方法。

深度學習之Attention模型詳解

2.local attention

本文認為local attention為hard attention和soft attention的混合體(優勢上的混合),因為他的計算複雜度要低於global attention,soft attention,而且與hard attention 不同的是,local attention 幾乎處處可微,易於訓練。

local attention克服了每個source hidden state都要掃描的缺點,計算開銷大,而且對於長句不利,為了提升效率,提出了 local attention。每次只focus 一部分的source position。

這裡 context vector 的計算只focus窗口內的2D+1個source hidden state。設是一個source position index,可以理解為 attention的“焦點”,作為模型的參數,D根據經驗來選擇。

關於的計算,文章給出了兩種計算方案:

1) Monotonic alignment(local-m)

2)predictive alignment(local-p)

深度學習之Attention模型詳解

其中和是模型的參數,S是source sentence的長度,易知.

權重的計算為:

深度學習之Attention模型詳解

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

這裡的,

深度學習之Attention模型詳解

其中score函數其實就是第一篇裡介紹的對齊函數,存在三種dot product,general,concat。

實驗對比:

深度學習之Attention模型詳解

Attention-Based Multi-Perspective Convolutional Neural Networks for Textual Similarity Measurement

本文的任務是STS(semantic textual similarity)指給定一個檢索句子和比較的句子,計算他們的相似度得分。

深度學習之Attention模型詳解

過去的模型,把輸入的句子獨立對待,忽略了句子的上下文交互。attention也就是因此而引入的。

本文的基礎模型結構是:MPCNN(multi-perspective con- volutional neural network model),主要包括兩個部分:1,multi-perspective sentence model;2, structured similarity measurement layer。

  1. multi-perspective sentence model

multi-perspective sentence model 使用的是卷積神經網絡,通過使用不同類型的卷積核,不同類型的池化方式,不同大小的卷積窗口,來得到每個句子的不同粒度的表達。

a. 卷積層有兩種卷積的方式:(1)粒度為word的卷積;(2)粒度為embedding 維度上的卷積。前者相當於n-gram特徵抽取,後者抽取的是向量每一維度上的信息。作者認為後面這種方式由於粒度更小有助於充分地提取出輸入的特徵信息。作者使用了這兩種方式以獲得更豐富的表達。

b. 卷積窗口大小:不同卷積窗口的大小捕捉不同n-gram的長度下的信息,這裡窗口大小是{1, 2, 3,∞}, 表示輸入句子中unigrams, bigrams, trigrams和不使用卷積層。

c. 池化方式:池化層可以保留一個卷積模型中最顯著和最通用的特性,這裡使用max,min,mean三種方式。

  1. Structured Similarity Measurement layer

Structured Similarity Measurement Layer的目標是計算句子表達的相似度。

Structured Similarity Measurement Layer的目標是計算句子表達的相似度。作者認為最後生成的句子向量中的每一個部分的意義各不相同,直接應用傳統的相似度計算方法如餘弦相似度在兩個句子向量上並不是最優的,應該對句子向量中的各個部分進行相應的比較和計算(Structured Comparision)。為了使得句子向量中的局部間的比較和計算更加有效,我們需要考慮如下方面:

(1) 是否來自相同的building block;(2) 是否來自相同卷積窗口大小下的卷積結果;(3) 是否來自相同的pooling層;(4) 是否來自相同的Feature Map;

至少滿足以上兩個條件時,才比較句子中的相應部分時,作者採用了兩種算法比較相似性。一種只針對粒度為詞的卷積,另一種則同時針對粒度為詞的卷積和粒度為embedding 維度上的卷積。

在句子局部的相似度計算之後,作者疊加了兩層的線性層,並在中間使用了tanh激活函數,最後使用log-softmax輸出。更多的細節參考He et al. 2015。

Attention-Based Input Interaction Layer

本文作者在上述模型的基礎上,增加了一層基於attention的交互層。其目的就是在剛做完embedding以後,給兩個句子更相關的部分賦予更多的權值。

輸入序列,其中,銅鼓計算對應向量的餘弦相似度得到attention。

深度學習之Attention模型詳解

得到了attention權值矩陣後,可以計算每個句子對應的attention向量,並歸一化:

最後拼接起來得到attention 的re-weighted向量:

深度學習之Attention模型詳解

作者沒有添加額外的參數,只是簡單的餘弦距離去作為attention權值然後做歸一化,並在實驗中取得了不錯的結果。

ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs

本文的任務是(sentence pair)句子配對。這包括了Answer Selection(AS),Paraphrase identification(PI),Textual entailment(TE)。

基礎模型:BCNN(Basic Bi-CNN)。BCNN有四個部分:1. 輸入層,2. 卷積層,3. 池化層,4. 輸出層。特別要指出卷積層。這裡卷積層採用的是寬卷積(Wide convolution)。即對句子的邊緣部分進行,使得輸出的序列長度大於輸入的序列長度。(寬卷積常用於卷積核大小相對於輸入向量長度較大時)

深度學習之Attention模型詳解

這裡提出了三種ABCNN

  1. ABCNN-1
深度學習之Attention模型詳解

ttention 矩陣的計算:

深度學習之Attention模型詳解

可以從上圖看出矩陣中的一列代表一個詞,行代表特徵。

這裡的match-score可以用多種方式進行計算,本文采用的是來計算。

句子中attention特徵的計算:

這裡的輸出被送入到了卷積層。

  1. ABCNN-2
深度學習之Attention模型詳解

這裡Attention矩陣的計算方式與ABCNN-1類似,不同的是在ABCNN-1的基礎上對兩個句子的unit進行求和作為unit的attention 值,即

然後利用這個attention值對卷積層的輸出進行加權,具體公式如下:

深度學習之Attention模型詳解

這裡的輸出輸入到了pooling層中。

  1. ABCNN-3

將上述兩個結構進行疊加。在輸入和池化都引入注意力。

深度學習之Attention模型詳解

本文實際上提出了兩種引入attention 的位置,一種是在Conv前(ABCNN-1),一種是Conv後(ABCNN-2)。從結果來看,Attention放在Conv後的效果比前面的效果更好。可能的原因是Word embedding經過Conv相當於提取了n-gram,能表示上下文。conv 之後再結合 Attention 能比單純 input 之後的 Attention 包含更多的信息。

Graph Attention Network(GAT)

小結1

之後的一系列論文如《Multi-Attention CNN for FGVC:MA-CNN》,《Coupled Multi-Layer Attentions for Co-Extraction of Aspect and Opinion Terms》等儘管實現的任務都花裡胡哨的,並引入了Attention,但是attention的使用方式還是千篇一律。

Attention is all you need

提出的動機:

  1. 跳出原來千篇一律的attention形式,不使用CNN,不使用RNN,光靠attention,實現高並行化;
  2. 抓取更強的長距離依賴關係。

創新點:

  1. 總結了attention的通用形式;
  2. 提出了self attention,multi-head attention;
  3. Transform結構。

總結Attention的通用格式

作者將Attention理解為q,k,v的形式,

深度學習之Attention模型詳解

其實前面介紹的attention都可以套用該框架。

深度學習之Attention模型詳解

提出self attention, multi-head attention

這裡的self attention 指的是用到自身的信息來計算attention。傳統的attention都是考慮用外部信息來計算attention。

深度學習之Attention模型詳解

這裡採用的attention計算方式也與之前的不同,採用 Scaled Dot-Product 的形式。

深度學習之Attention模型詳解

注意:分母是為了歸一化,避免造成進入softmax函數的飽和區,其梯度較小。

採用multi-head attention為的就是讓不同head學習到不同的子空間語義。顯然實驗也證實這種形式的結果較好。

深度學習之Attention模型詳解

在self attention中其實在做的當前文本句中單詞依賴關係分數的計算。

比如“Think Machines”兩個單詞:

深度學習之Attention模型詳解

優點:

  1. 由於self attention 是對整個文本句求attention的,所以他能抓取到當前單詞和該文本句中所有單詞的依賴關係強度。這方面的能力顯然比RNN的獲取長依賴的能力強大的多;
  2. 此時不在用RNN的這種串行模式,即每一步計算依賴於上一步的計算結果。因此可以像CNN一樣並行處理,而CNN只能捕獲局部信息,通過層疊獲取全局聯繫增強視野。

缺點:很顯然,既是並行又能全局,但他不能捕捉語序順序。這是很糟糕的,有點像詞袋模型。因為相同單詞不同詞序的含義會有很大差別。為了克服這個問題,作者引入了Position embedding。這是後話了。

Transform

Transform是一大法寶,影響深遠。

深度學習之Attention模型詳解

從上圖粗看,Transform仍延續著一個Encoder一個Decoder的形式。

重要部件:

  1. Positional embedding。正如上面所說,self attention缺乏位置信息,這是不合理的。為了引入位置信息,這裡用了一個部件position embedding。

這裡考慮每個token的position embedding的向量維度也是d維的,與input embedding的輸出一樣,然後將input embedding和position embedding 加起來組成最終的embedding輸入到上面的encoder/decoder中去。這裡的position embedding計算公式如下:

深度學習之Attention模型詳解

其中pos表示位置的index,i表示dimension index。

Position Embedding本身是一個絕對位置的信息,但在語言中,相對位置也很重要,Google選擇前述的位置向量公式的一個重要原因是:由於我們有

深度學習之Attention模型詳解

這表明位置p+k的向量可以表示成位置p的向量的線性變換,這提供了表達相對位置信息的可能性。

  1. residual connection 。無論是encoder還是decoder,我們都能看到存在residual connection這種跳躍連接。

隨著深度的增加會導致梯度出現彌散或者爆炸,更為嚴重的是會導致模型退化 (也就是在訓練集上性能飽和甚至下降,與過擬合不同)。深度殘差網絡就是為了解決退化的問題。其實引入殘差連接,也是為了儘可能保留原始輸入x的信息。

  1. Layer Normalization

與 BN 不同,LN 是一種橫向的規範化。

深度學習之Attention模型詳解

LN針對單個訓練樣本進行,不依賴於其他數據。避免了受mini batch中其他數據的影響。

BN適用於不同mini batch數據分佈差異不大的情況,而且BN需要開闢變量存每個節點的均值和方差,空間消耗略大;而且 BN適用於有mini_batch的場景。

  1. Masked Multi-Head Attention

這裡用mask來遮蔽當前位置後面的單詞。實現也很簡單,採用一個上三角都為1,下三角為0的矩陣。

深度學習之Attention模型詳解

小結一下:本文對attention的概念進行了本質上的轉變。傳統的attention是在端尾計算源文本各個token對該時刻單詞的貢獻。而self attention將這個過程提到了端口,計算當前句子中token的相關性來充分各個token的表達其語義。簡單的講就是傳統的attention是為了使輸出端表達充分,而self attention 是為了使輸入端表達充分。儘管他們的形式都可以用Q,K,V框架來解釋。

An Attentive Survey of Attention Models

《An Attentive Survey of Attention Models》 是香農科技提出的一篇關於attention的綜述論文。

深度學習之Attention模型詳解

本文給attention作出了分類,分為四種分類方法:

1,number of sequences

a)distinctive。只考慮了涉及單個輸入和相應輸出序列的情況(例如seq2seq中的attention);

b)co-attention。同時對多個輸入序列進行操作,並共同學習它們的注意權重,以捕獲這些輸入之間的交互(例如前面介紹的ABCNN);

c)inner attention。使用注意力來學習輸入序列中對應於相同輸入序列中的每個標記的相關標記.(例如self attention)。

2,Number of abstraction levels

按照輸入特徵的抽象層次來分,這裡的抽象層次可以是詞粒度、短語粒度、句子粒度、文檔粒度。

a)single-level。只為原始輸入序列計算注意權重;

b)multi-level。注意力可以按順序應用於輸入序列的多個抽象層次[例如在兩個不同的抽象層次(即單詞級別和句子級別)上使用了注意力模型來完成文檔分類任務]。

3,Number of positions

a)soft attention。它使用輸入序列所有隱藏狀態的加權平均值來構建上下文向量;

b)hard attention。其中上下文向量是從輸入序列中隨機採樣的隱藏狀態計算出來的;

c)global attention。與soft attention一樣;

d)local attention。是hard attention和soft attention的一種折中。

4,Number of representations

a)multi-Representational Attention model。通過多個特徵表示捕捉輸入的不同方面,注意可以用來為這些不同的表示分配重要權重,這些表示可以確定最相關的方面,而忽略輸入中的噪聲和冗餘;

b)multi-dimensional。這種attention 作用在維度上,attention的權重表示各個維度上的重要性。

深度學習之Attention模型詳解

然後作者又對帶有attention的網絡結構進行餓了分類。

1,Encoder-Decoder

2,Memory Networks

像問答和聊天機器人這樣的應用程序需要能夠從事實數據庫中的信息中學習。網絡的輸入是一個知識數據庫和一個查詢,其中一些事實比其他事實更與查詢相關。端到端memory networks通過使用一組內存塊存儲事實數據庫來實現這一點,並使用attention在回答查詢時在內存中為每個事實建立關聯模型。

使用attention還提供了計算優勢,使目標連續,並通過反向傳播支持端到端訓練。端到端內存網絡可以看作是AM的一種泛化,它不是隻在單個序列上建模注意力,而是在一個包含大量序列(事實)的數據庫上建模注意力。

3,Networks without RNNs 最具代表性的就是Transformer。

未完待續

其實還有很多要補充的,比如Memory Network中的attention(外部記憶作為V)以及Graph neural network裡的attention,儘管理論上都是一個道理,但是還要對的起標題的all。待補充。

— 完 —

關注清華-青島數據科學研究院官方微信公眾平臺“THU數據派”及姊妹號“數據派THU”獲取更多講座福利及優質內容。

"


分享到:


相關文章: