歡迎光臨
每天分享高質量文章

深度學習中Attention Mechanism詳細介紹:原理、分類及應用

    基於以前總結得文章《模型彙總24 – 深度學習中Attention Mechanism詳細介紹:原理、分類及應用》,增加Multi-dimensional Attention和Memory-Based Attention。

 

    Attention是一種用於提升基於RNN(LSTM或GRU)的Encoder + Decoder模型的效果的的機制(Mechanism),一般稱為Attention Mechanism。Attention Mechanism目前非常流行,廣泛應用於機器翻譯、語音識別、影象標註(Image Caption)等很多領域,之所以它這麼受歡迎,是因為Attention給模型賦予了區分辨別的能力,例如,在機器翻譯、語音識別應用中,為句子中的每個詞賦予不同的權重,使神經網路模型的學習變得更加靈活(soft),同時Attention本身可以做為一種對齊關係,解釋翻譯輸入/輸出句子之間的對齊關係,解釋模型到底學到了什麼知識,為我們開啟深度學習的黑箱,提供了一個視窗,如圖1所示。

圖1 NLP中的attention視覺化

    又比如在影象標註應用中,可以解釋圖片不同的區域對於輸出Text序列的影響程度。

圖2 影象標註中的attention視覺化

    透過上述Attention Mechanism在影象標註應用的case可以發現,Attention Mechanism與人類對外界事物的觀察機制很類似,當人類觀察外界事物的時候,一般不會把事物當成一個整體去看,往往傾向於根據需要選擇性的去獲取被觀察事物的某些重要部分,比如我們看到一個人時,往往先Attention到這個人的臉,然後再把不同區域的資訊組合起來,形成一個對被觀察事物的整體印象。因此,Attention Mechanism可以幫助模型對輸入的X每個部分賦予不同的權重,抽取出更加關鍵及重要的資訊,使模型做出更加準確的判斷,同時不會對模型的計算和儲存帶來更大的開銷,這也是Attention Mechanism應用如此廣泛的原因。

    有了這些背景知識的鋪墊,接下來就一一介紹下Attention Mechanism其他細節,在接寫來的內容裡,我會主要介紹以下一些知識:

 

1. Attention Mechanism原理

    1.1 Attention Mechanism主要需要解決的問題

    1.2 Attention Mechanism原理

 

2. Attention Mechanism分類

基本attention結構

    2.1 soft Attention 與Hard Attention

    2.2 Global Attention 和 Local Attention

    2.3 Self Attention

組合的attention結構

    2.4 Hierarchical Attention

    2.5 Attention in Attention

    2.6 Multi-Step Attention

    2.7 Multi-Dimensional Attention

    2.8 Memory-Based Attention

 

3. Attention的應用場景

    3.1 機器翻譯(Machine Translation)

    3.2 影象標註(Image Captain)

    3.3 關係抽取(EntailMent Extraction)

    3.4 語音識別(Speech Recognition)

    3.5 自動摘要生成(Text Summarization)

1. Attention Mechanism原理

1.1 Attention Mechanism主要需要解決的問題

    《Sequence to Sequence Learning with Neural Networks》介紹了一種基於RNN的Seq2Seq模型,基於一個Encoder和一個Decoder來構建基於神經網路的End-to-End的機器翻譯模型,其中,Encoder把輸入X編碼成一個固定長度的隱向量Z,Decoder基於隱向量Z解碼出標的輸出Y。這是一個非常經典的序列到序列的模型,但是卻存在兩個明顯的問題:

    1、把輸入X的所有資訊有壓縮到一個固定長度的隱向量Z,忽略了輸入輸入X的長度,當輸入句子長度很長,特別是比訓練集中最初的句子長度還長時,模型的效能急劇下降。

    2、把輸入X編碼成一個固定的長度,對於句子中每個詞都賦予相同的權重,這樣做是不合理的,比如,在機器翻譯裡,輸入的句子與輸出句子之間,往往是輸入一個或幾個詞對應於輸出的一個或幾個詞。因此,對輸入的每個詞賦予相同權重,這樣做沒有區分度,往往是模型效能下降。

    同樣的問題也存在於影象識別領域,摺積神經網路CNN對輸入的影象每個區域做相同的處理,這樣做沒有區分度,特別是當處理的影象尺寸非常大時,問題更明顯。因此,2015年,Dzmitry Bahdanau等人在《Neural machine translation by jointly learning to align and translate》提出了Attention Mechanism,用於對輸入X的不同部分賦予不同的權重,進而實現軟區分的目的。

1.2 Attention Mechanism原理

    要介紹Attention Mechanism結構和原理,首先需要介紹下Seq2Seq模型的結構。基於RNN的Seq2Seq模型主要由兩篇論文介紹,只是採用了不同的RNN模型。Ilya Sutskever等人與2014年在論文《Sequence to Sequence Learning with Neural Networks》中使用LSTM來搭建Seq2Seq模型。隨後,2015年,Kyunghyun Cho等人在論文《Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation》提出了基於GRU的Seq2Seq模型。兩篇文章所提出的Seq2Seq模型,想要解決的主要問題是,如何把機器翻譯中,變長的輸入X對映到一個變長輸出Y的問題,其主要結構如圖3所示。

圖3 傳統的Seq2Seq結構

    其中,Encoder把一個變成的輸入序列x1,x2,x3….xt編碼成一個固定長度隱向量(背景向量,或背景關係向量context)c,c有兩個作用:1、做為初始向量初始化Decoder的模型,做為decoder模型預測y1的初始向量。2、做為背景向量,指導y序列中每一個step的y的產出。Decoder主要基於背景向量c和上一步的輸出yt-1解碼得到該時刻t的輸出yt,直到碰到結束標誌()為止。

    如上文所述,傳統的Seq2Seq模型對輸入序列X缺乏區分度,因此,2015年,Kyunghyun Cho等人在論文《Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation》中,引入了Attention Mechanism來解決這個問題,他們提出的模型結構如圖4所示。

圖4 Attention Mechanism模組圖解

    在該模型中,定義了一個條件機率:

    其中,si是decoder中RNN在在i時刻的隱狀態,如圖4中所示,其計算公式為:

    這裡的背景向量ci的計算方式,與傳統的Seq2Seq模型直接累加的計算方式不一樣,這裡的ci是一個權重化(Weighted)之後的值,其運算式如公式5所示:

    其中,i表示encoder端的第i個詞,hj表示encoder端的第j和詞的隱向量,aij表示encoder端的第j個詞與decoder端的第i個詞之間的權值,表示源端第j個詞對標的端第i個詞的影響程度,aij的計算公式如公式6所示:

    在公式6中,aij是一個softmax模型輸出,機率值的和為1。eij表示一個對齊模型,用於衡量encoder端的位置j個詞,對於decoder端的位置i個詞的對齊程度(影響程度),換句話說:decoder端生成位置i的詞時,有多少程度受encoder端的位置j的詞影響。對齊模型eij的計算方式有很多種,不同的計算方式,代表不同的Attention模型,最簡單且最常用的的對齊模型是dot product乘積矩陣,即把target端的輸出隱狀態ht與source端的輸出隱狀態進行矩陣乘。常見的對齊計算方式如下:

    其中,Score(ht,hs) = aij表示源端與標的單單詞對齊程度。可見,常見的對齊關係計算方式有,點乘(Dot product),權值網路對映(General)和concat對映幾種方式。

2. Attention Mechanism分類

2.1 soft Attention 和Hard Attention

    Kelvin Xu等人與2015年發表論文《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》,在Image Caption中引入了Attention,當生成第i個關於圖片內容描述的詞時,用Attention來關聯與i個詞相關的圖片的區域。Kelvin Xu等人在論文中使用了兩種Attention Mechanism,即Soft Attention和Hard Attention。我們之前所描述的傳統的Attention Mechanism就是Soft Attention。Soft Attention是引數化的(Parameterization),因此可導,可以被嵌入到模型中去,直接訓練。梯度可以經過Attention Mechanism模組,反向傳播到模型其他部分。

    相反,Hard Attention是一個隨機的過程。Hard Attention不會選擇整個encoder的輸出做為其輸入,Hard Attention會依機率Si來取樣輸入端的隱狀態一部分來進行計算,而不是整個encoder的隱狀態。為了實現梯度的反向傳播,需要採用蒙特卡洛取樣的方法來估計模組的梯度。

    兩種Attention Mechanism都有各自的優勢,但目前更多的研究和應用還是更傾向於使用Soft Attention,因為其可以直接求導,進行梯度反向傳播。

2.2 Global Attention 和 Local Attention

    Global Attention:傳統的Attention model一樣。所有的hidden state都被用於計算Context vector 的權重,即變長的對齊向量at,其長度等於encoder端輸入句子的長度。結構如圖5所示。

圖5 Global Attention模型示意圖

    在t時刻,首先基於decoder的隱狀態ht和源端的隱狀態hs,計算一個變長的隱對齊權值向量at,其計算公式如下:

    其中,score是一個用於評價ht與hs之間關係的函式,即對齊函式,一般有三種計算方式,我們在上文中已經提到了。公式如下:

    得到對齊向量at之後,就可以透過加權平均的方式,得到背景關係向量ct。

    Local Attention:Global Attention有一個明顯的缺點就是,每一次,encoder端的所有hidden state都要參與計算,這樣做計算開銷會比較大,特別是當encoder的句子偏長,比如,一段話或者一篇文章,效率偏低。因此,為了提高效率,Local Attention應運而生。

Local Attention是一種介於Kelvin Xu所提出的Soft Attention和Hard Attention之間的一種Attention方式,即把兩種方式結合起來。其結構如圖6所示。

圖6 Local Attention模型示意圖

    Local Attention首先會為decoder端當前的詞,預測一個source端對齊位置(aligned position)pt,然後基於pt選擇一個視窗,用於計算背景向量ct。Position pt的計算公式如下:

    其中,S是encoder端句子長度,vp和wp是模型引數。此時,對齊向量at的計算公式如下:

    總之,Global Attention和Local Attention各有優劣,在實際應用中,Global Attention應用更普遍,因為local Attention需要預測一個位置向量p,這就帶來兩個問題:1、當encoder句子不是很長時,相對Global Attention,計算量並沒有明顯減小。2、位置向量pt的預測並不非常準確,這就直接計算的到的local Attention的準確率。

2.3 Self Attention

    Self Attention與傳統的Attention機制非常的不同:傳統的Attention是基於source端和target端的隱變數(hidden state)計算Attention的,得到的結果是源端的每個詞與標的端每個詞之間的依賴關係。但Self Attention不同,它分別在source端和target端進行,僅與source input或者target input自身相關的Self Attention,捕捉source端或target端自身的詞與詞之間的依賴關係;然後再把source端的得到的self Attention加入到target端得到的Attention中,捕捉source端和target端詞與詞之間的依賴關係。因此,self Attention Attention比傳統的Attention mechanism效果要好,主要原因之一是,傳統的Attention機制忽略了源端或標的端句子中詞與詞之間的依賴關係,相對比,self Attention可以不僅可以得到源端與標的端詞與詞之間的依賴關係,同時還可以有效獲取源端或標的端自身詞與詞之間的依賴關係,如圖7所示。

圖7 self attention視覺化實體,圖片摘自《深度學習中的註意力機制》,張俊林

    Self Attention的具體計算方式如圖8所示:

圖8 All Attention模型結構示意圖

    Encoder的輸入inputs和decoder的輸入outputs,加上position embedding,做為各自的最初的輸入,那麼問題來了,self Attention具體是怎麼實現的呢?從All Attention的結構示意圖可以發現,Encoder和decoder是層疊多了類似的Multi-Head Attention單元構成,而每一個Multi-Head Attention單元由多個結構相似的Scaled Dot-Product Attention單元組成,結構如圖9所示。

圖9 Multi-Head Attention結構示意圖

    Self Attention也是在Scaled Dot-Product Attention單元裡面實現的,如上圖左圖所示,首先把輸入Input經過線性變換分別得到Q、K、V,註意,Q、K、V都來自於Input,只不過是線性變換的矩陣的權值不同而已。然後把Q和K做dot Product相乘,得到輸入Input詞與詞之間的依賴關係,然後經過尺度變換(scale)、掩碼(mask)和softmax操作,得到最終的Self Attention矩陣。尺度變換是為了防止輸入值過大導致訓練不穩定,mask則是為了保證時間的先後關係。

    最後,把encoder端self Attention計算的結果加入到decoder做為k和V,結合decoder自身的輸出做為q,得到encoder端的attention與decoder端attention之間的依賴關係。

Attention其他一些組合使用

2.4 Hierarchical Attention

    Zichao Yang等人在論文《Hierarchical Attention Networks for Document Classification》提出了Hierarchical Attention用於檔案分類。Hierarchical Attention構建了兩個層次的Attention Mechanism,第一個層次是對句子中每個詞的attention,即word attention;第二個層次是針對檔案中每個句子的attention,即sentence attention。網路結構如圖10所示。

圖10 Hierarchical Attention結構示意圖

    整個網路結構由四個部分組成:一個由雙向RNN(GRU)構成的word sequence encoder,然後是一個關於詞的word-level的attention layer;基於word attention layar之上,是一個由雙向RNN構成的sentence encoder,最後的輸出層是一個sentence-level的attention layer。

2.5 Attention over Attention

    Yiming Cui與2017年在論文《Attention-over-Attention Neural Networks for Reading Comprehension》中提出了Attention Over Attention的Attention機制,結構如圖11所示。

圖11 Attention over Attention結構示意圖

    兩個輸入,一個Document和一個Query,分別用一個雙向的RNN進行特徵抽取,得到各自的隱狀態h(doc)和h(query),然後基於query和doc的隱狀態進行dot product,得到query和doc的attention關聯矩陣。然後按列(colum)方向進行softmax操作,得到query-to-document的attention 值a(t);按照行(row)方向進行softmax操作,得到document-to-query的attention值b(t),再按照列方向進行累加求平均得到平均後的attention值b(t)。最後再基於上一步attention操作得到a(t)和b(t),再進行attention操作,即attention over attention得到最終query與document的關聯矩陣。

2.6 Multi-step Attention

    2017年,FaceBook 人工智慧實驗室的Jonas Gehring等人在論文《Convolutional Sequence to Sequence Learning》提出了完全基於CNN來構建Seq2Seq模型,除了這一最大的特色之外,論文中還採用了多層Attention Mechanism,來獲取encoder和decoder中輸入句子之間的關係,結構如圖12所示。

圖12 Multi-step Attention結構示意圖

    完全基於CNN的Seq2Seq模型需要透過層疊多層來獲取輸入句子中詞與詞之間的依賴關係,特別是當句子非常長的時候,我曾經實驗證明,層疊的層數往往達到10層以上才能取得比較理想的結果。針對每一個捲記得step(輸入一個詞)都對encoder的hidden state和decoder的hidden state進行dot product計算得到最終的Attention 矩陣,並且基於最終的attention矩陣去指導decoder的解碼操作。

2.7 Multi-dimensional Attention 

傳統的Attention往往是一維的,如下圖所示(a)所示。《Coupled Multi-Layer Attentions for Co-Extraction of Aspect and Opinion Terms》提出了Multi-dimensional attention把一維的Attention擴充套件到多維,如下圖(b)所示。

    多維Attention可以捕捉輸入多個維度重要性,具有更強的描述能力。如上圖所示,輸入序列“Fish burger is the best dish it tastes fresh”,每個輸入token的Attention由兩個部分concat而成,比如,計算h8(tastes)關於Aspect的Attention時,Attention分為Aspect的Attention u(t~a)和Opinion的Attention u(t~p),計算公式如下:

    當m=a時,m-=p,當m=p時,m-=a。Attention同時考慮了輸入token作為Aspect和Opinion的重要程度。Multi-dimension Attention捕捉多維度的Attention,為了避免Attention過於集中,對Attention加入F範數約束:

使Attention集中序列的不同部分。

2.8 Memory-based Attention

Memory機制在NLP中應用也比較廣泛,比如對話系統中。Memory-based Attention借用了這一思想,假設輸入為q,Memory中以(k,v)形式儲存著我們需要的背景關係。基於Attention的計算公式,得出Memory-based Attention的計算公式如下:

    例如在QA問題中,Memory-based Attention可以透過不停地迭代地更新Memory來將註意力轉移到答案所在的位置,如下圖所示:

    初始q為問題question,然後計算a與memory中k的Attention關係,得到此時最相關的C,將q與c拼接到一起作為新的q,再次計算C,不停地迭代,直到得到最終的答案。

3. Attention的應用場景

    本節主要給出一些基於Attention去處理序列預測問題的例子,以下內容整理翻譯自:https://machinelearningmastery.com/attention-long-short-term-memory-recurrent-neural-networks/

1.機器翻譯

    給定一個法陳述句子做為輸入序列,翻譯並輸出一個英文句子做為輸出序列。Attention用於關聯輸出序列中每個單詞與輸入序列中的某個特定單詞的關聯程度。

    “我們擴充套件了傳統的編碼器-解碼器結構,賦予decoder,在生成標的端(target)的詞時,可以自動(軟)搜尋一組與之相關的輸入序列的能力。這使得模型不必將整個源句子編碼成一個固定長度的向量,並且還使模型只關註源端與下一個標的詞的生成有關的資訊。”

– Dzmitry Bahdanau等人,《Neural machine translation by jointly learning to align and translate》,2015。

   透過Attention來解釋法語到英語單詞之間的對應關係。摘自Dzmitry Bahdanau的論文

2.影象標註(Image Caption)

    基於序列的Attention Mechanism可以應用於計算機視覺問題,以幫助理解如何最好地利用摺積神經網路來省長一段關於圖片內容的描述,也稱為Caption。

    給定輸入影象,輸出影象的英文描述。使用Attention是為輸出序列中的每個單詞關註影象中不同部分。

    “我們提出了一種基於Attention mechanism的方法,併在在三個標準資料集上都取得了最好的成績…我們還展示瞭如何利用學到的Attention來提供更多對模型生成過程的解釋,並且證明Attention學習到的對齊與人類視覺感知非常一致。”

    Kelvin Xu等人,《Attend and Tell: Neural Image Caption Generation with Visual Attention》, 2016

    基於Attention來解釋,生成英文描述中某一個詞時,與圖片中某一區域的高度依賴關係。

3. 蘊含關係推理(Entailment Reasoning)

    給定一個用英語描述前景描述(premise scenario)和假設(hypothesis),判讀假設(premise)與假設(hypothesis)的關係:矛盾,相關或包含。

例如:

前提:“一場婚禮中拍照”

假設:“有人結婚”

    Attention被用來把假設中的每個單詞與前提中的單詞聯絡起來,反之亦然。

    “我們提出了一個基於LSTM的神經模型,它一次讀取兩個句子來確定兩個句子之間的蘊含關係,而不是將每個句子獨立對映到一個語意空間。我們引入逐字的(word-by-word)Attention Mechanism來擴充套件這個模型,來強化模型對單詞或短語對的關係推理能力。該模型比傳統的僅基於LSTM的模型高2.6個百分點,取得了一個最高成就”

-Tim Rocktäschel,《Reasoning about Entailment with Neural Attention》, 2016

    基於Attention來解釋前提和假設中詞與詞之間的對應關係

4. 語音識別

    給定一段英語語音片段做為輸入序列,輸出對應的音素序列。

    Attention被用聯將輸出序列中的每個音素與輸入序列中的特定音訊幀相關聯。

    “基於混合Attention機制的新型端到端可訓練語音識別體系結構,其結合內容和位置資訊幫助選擇輸入序列中的下一個位置用於解碼。所提出的模型的一個理想特性就是它可以識別比訓練集中句子的更長的句子。”

-Jan Chorowski,《Attention-Based Models for Speech Recognition》, 2015.。

    基於Attention來解釋輸出音素與輸入端的聲音片段的對應關係

5.文字摘要生成

    給定一篇英文文章做為輸入順序,輸出一個總結英文文章註意內容的摘要句子。

    Attention用於將輸出摘要中的每個單詞與輸入檔案中的特定單詞相關聯。

    “將基於Attention的神經網路用語摘要抽取。我們將這個機率模型與可以產生準確的摘要的生成演演算法相結合。”

-Alexander M. Rush,《A Neural Attention Model for Abstractive Sentence Summarization》, 2015

    基於Attention來解釋輸入Sentence與輸出Summary之間單詞的對應關係

    Attention Mechanism現在應用非常廣泛,這裡就列出這幾個case供大家參考。

往期精品內容推薦:

純乾貨-17 分散式深度學習原理、演演算法詳細介紹

UC Berkeley-2019-《深度學習與應用自然語言處理》實戰課程分享

2019年新書-《PyTorch實戰-一個解決問題的方法》精品教材分享

深度學習工業級部署實踐:基於Spark部署Tensorflow深度學習模型

2018-CUDA程式設計精品教材分享《基於GPU-多核-叢集等並行化程式設計》

C++深度學習工程挑戰-這可能是你最需要的

全域性語意語境能改善神經語言模型嗎?

NLP聖經《自然語言處理綜述》2018最新版推薦

2018-Geoffrey Hinton-深度學習基礎

吳恩達-人工智慧是科學技術進步新助力

遷移學習在自然語言處理中的應用之通用語言建模

神聖的NLP!一文理解詞性標註、依存分析和命名物體識別任務

掃描下方二維碼可以訂閱哦!

DeepLearning_NLP

深度學習與NLP

       商務合作請聯絡微訊號:lqfarmerlq

    贊(0)

    分享創造快樂