一文徹底搞懂attention機制


一、什么是attention機制

Attention機制:又稱為注意力機制,顧名思義,是一種能讓模型對重要信息重點關注並充分學習吸收的技術.通俗的講就是把注意力集中放在重要的點上,而忽略其他不重要的因素。其中重要程度的判斷取決於應用場景,拿個現實生活中的例子,比如1000個人眼中有1000個哈姆雷特。根據應用場景的不同,Attention分為空間注意力時間注意力,前者用於圖像處理,后者用於自然語言處理.

二、為什么需要注意力機制

  注意力機制最早用在seq2seq模型上原始編解碼模型的encode過程會生成一個中間向量C,用於保存原序列的語義信息。但是這個向量長度是固定的,當輸入原序列的長度比較長時,向量C無法保存全部的語義信息,上下文語義信息受到了限制,這也限制了模型的理解能力。如下圖:

  這種編碼方法,無法體現對一個句子序列中不同語素的關注程度,在自然語言中,一個句子中的不同部分是有不同含義和重要性的,比如上面的例子中:I hate this movie.如果是做情感分析的應用場景,訓練的時候明顯應該對hate這個詞語做更多的關注。

三、Attention的原理

基本流程描述,以seq2seq模型為例子,對於一個句子序列S,其由單詞序列[w1,w2,w3,...,wn]構成:

1)將S的每個單詞 [公式] 編碼為一個單獨向量 [公式],這里對應seq2seq模型,就是在encoder編碼階段,每個時間步單位(即每個單詞)的輸出隱狀態。

2)在解碼decoder階段,待預測詞的輸入隱狀態C(即上一個時間步的輸出狀態)與1)中每個單詞的隱狀態相乘再做softmax歸一化后得到權重分數,使用學習到的注意力權重 [公式] 對1)中得到的所有單詞向量做加權線性組合Z=[公式].

3)利於輸入狀態C以及輸入變量Z作為對待預測詞的共同輸入,來進行預測。

公式步驟:

1)首先利用RNN模型已經得到了序列的隱層狀態(h1,h2,...,hn)

2)如果當前decoder階段已經到了Si-1,要進行下一個Si的預測了,接下來計算每一個輸入位置hj對當前位置i的影響

3)eij做歸一化處理,得到attention的權重分布

4)利用αij進行加權求和,得到相應的context vector。

5)計算預測最終的輸出

 

以例子進行更通俗詳細的描述:

我們的最終目標是要能夠幫助decoder在生成詞語時,有一個不同詞語的權重的參考。在訓練時,對於decoder我們是有訓練目標的,此時將decoder中的信息定義為一個Query。而encoder中包含了所有可能出現的詞語,我們將其作為一個字典,該字典的key為所有encoder的序列信息,n個單詞相當於當前字典中有n條記錄,而字典的value通常也是所有encoder的序列信息,一般情況下,key和value是一樣的

上面對應於第一步,然后是第二部計算注意力權重,由於我們要讓模型自己去學習該對哪些語素重點關注,因此要用我們的學習目標Query來參與這個過程,因此對於Query的每個向量,通過一個函數 [公式] ,這里的Qi就是上一個時間步的輸出隱狀態,計算預測i時刻詞時,需要學習的注意力權重,由於包含n個單詞,因此, [公式] 應當是一個n維的向量,為了后續計算方便,需要將該向量進行softmax歸一化,讓向量的每一維元素都是一個概率值。

上圖的黃色框圈的hate變量,就是由I單詞之后的輸出隱狀態C,也可以稱之為q,這里的q再與上面的Key Vector相乘再做softmax歸一化得到一個權重分數。

這個權重分數再與Value Vectors(這里的value與key一樣)進行加權線性組合,得到一組新的帶有注意力的變量,這個變量就是預測hate的輸入值Z,最后由C和Z來共同輸入預測hate。

 

四、Self-Attention

1)Self-Attention與 傳統的Attention機制有什么不同呢?

  Self- Attention與傳統的Attention機制非常的不同:傳統的Attention是基於source端和target端的隱變量(hidden state)計算Attention的,得到的結果是源端(source端)的每個詞與目標端(target端)每個詞之間的依賴關系。

  但Self -Attention不同,它首先分別在source端和target端進行自身的attention,僅與source input或者target input自身相關的Self -Attention,以捕捉source端或target端自身的詞與詞之間的依賴關系;然后再把source端的得到的self -Attention加入到target端得到的Attention中,稱作為Cross-Attention,以捕捉source端和target端詞與詞之間的依賴關系。如下圖的架構:

  因此,self -Attention比傳統的Attention mechanism效果要好,主要原因之一是,傳統的Attention機制忽略了源端或目標端句子中詞與詞之間的依賴關系,相對比,self Attention可以不僅可以得到源端與目標端詞與詞之間的依賴關系,同時還可以有效獲取源端或目標端自身詞與詞之間的依賴關系。

 

2)Self-Attention的計算

參考論文《Attention is all you need》的計算方式

  1. 將輸入單詞轉化成嵌入向量X;
  2. 根據嵌入向量X與權重參數相乘,分別得到 [公式] , [公式] , [公式] 三個向量;
  3. 為每個向量計算一個score: [公式] ;
  4. 為了梯度的穩定,Transformer使用了score歸一化,即除以 [公式] ;
  5. 對score施以softmax激活函數;
  6. softmax點乘Value值 [公式] ,得到加權的每個輸入向量的評分 [公式] ;
  7. 相加之后得到最終的輸出結果 [公式] : [公式] 。

 

 

參考:https://zhuanlan.zhihu.com/p/46313756

https://zhuanlan.zhihu.com/p/79115586


免責聲明!

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



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