Attention機制全解

2021-09-28 21:27:12 字數 2737 閱讀 5960

目錄

之前已經提到過好幾次attention的應用,但還未對attention機制進行系統的介紹,之後的實踐模型attention將會用到很多,因此這裡對attention機制做乙個總結。

注意力機制(attention mechanism)首先是用於解決 sequence to sequence 問題提出的,因此我們了解下研究者是怎樣設計出attention機制的。

seq2seq,即序列到序列,指的是用encoder-decoder框架來實現的端到端的模型,最初用來實現英語-法語翻譯。encoder-decoder框架是一種十分通用的模型框架,其抽象結構如下圖所示:

其中,encoder和decoder具體使用什麼模型都是由研究者自己定的,cnn/rnn/transformer均可。encoder的作用就是將輸入序列對映成乙個固定長度的上下文向量c,而decoder則將上下文向量c作為**\(y_1\)輸出的初始向量,之後將其作為背景向量,並結合上乙個時間步的輸出來對下乙個時間步進行**。

attention機制的作用就是為模型增添了注意力功能,使其傾向於根據需要來選擇句子中更重要的部分。

加入加入attention機制的seq2seq模型框架如下圖所示:

與傳統的語義向量c不同的是,帶有注意力機制的seq2seq模型與傳統seq2seq模型的區別如下:

其中\(s_i\)表示decoder上一時刻的輸出狀態,\(c_i\)為當前的時刻的中間語義向量

其中\(h_j\)為encoder端的第j個詞的隱向量,\(\alpha_\)表示decoder端的第i個詞對encoder端的第j個詞的注意力大小,即輸入的第j個詞對生成的第i個詞的影響程度。這意味著在生成每個單詞\(y_i\)的時候,原先都是相同的中間語義表示\(c\)會替換成根據當前生成單詞而不斷變化的\(c_i\)。生成\(c_i\)最關鍵的部分就是注意力權重\(\alpha_\)的計算,具體的計算方法我們下面再討論。

之前我們提到的為soft attention的一般形式,還有一種hard attention,其與soft attention的區別在於,其通過隨機取樣或最大取樣的方式來選取特徵資訊(soft attention是通過加權求和的方式),這使得其無法使用反向傳播演算法進行訓練。因此我們常用的通常是soft attention

global attention 與 local attention 的區別在於二者的關注範圍不同。global attention 關注的是整個序列的輸入資訊,相對來說需要更大的計算量。而 local attention 僅僅關注限定視窗範圍內的序列資訊,但視窗的限定使得中心詞容易忽視不在視窗範圍內的資訊,因此視窗的大小設定十分重要。在實踐中,預設使用的是global attention。

我們之前已經討論過,中間語義向量\(c_i\)為對輸入資訊注意力加權求和之後得到的向量,即:

\[c_i = \sum_^\alpha_h_j\]

而注意力權重\(\alpha_\)表示decoder端的第i個詞對encoder端的第j個詞的注意力大小,即輸入的第j個詞對生成的第i個詞的影響程度。其基本的計算方式如下:

\[\alpha_ = \frac)}^exp(e_)}\]

\[e_ = score(s_, h_j)\]

其中,\(s_\)需要根據具體任務進行選擇,對於機器翻譯等生成任務,可以選取 decoder 上乙個時刻的隱藏層輸出,對於閱讀理解等問答任務,可以選擇問題或問題+選項的表徵,對於文字分類任務,可以是自行初始化的上下文向量。而\(h_j\)為 encoder 端第j個詞的隱向量,分析上面公式,可以將attention的計算過程總結為3個步驟:

\[e_ = score(s_, h_j) = \frac \cdot h_j}||\cdot||h_j||}\]

\[e_ = score(s_, h_j) = s_wh_\]

\[e_ = score(s_, h_j) = w|h_j;s_|\]

得到對齊分數之後,用softmx函式將其進行歸一化,得到注意力權重

最後將注意力權重與 encoder 的輸出進行加權求和,得到需要的中間語義向量\(c_i\)

將公式整合一下:

\[c_ = attention(query, keys, values) = softmax(score(query, keys)) * values\]

其中,\(query\)為我們之前提到的\(s_\),\(keys\) 和 \(values\)為 \(h\)

重溫一下我們講解transformer時提到的self-attention,其 \(query\),\(keys\) 和 \(values\) 均為encoder層的詞表徵通過乙個簡單的線性對映矩陣得到的,即可將其表示為

\[attention(q,k,v) = attention(w^qx,w^kx,w^vx)\]

從其注意力分數的計算方法上來看也是一種典型的縮放點積,其關鍵在於僅對句子本身進行注意力權值計算,使其更能夠把握句子中詞與詞之前的關係,從而提取出句子中的句法特徵或語義特徵。

這一塊對attention的原理基本已經全部總結了,主要是對自己只是的鞏固,以及對之後的實踐工作做鋪墊,之後有時間再將attention這塊相關的**寫出來。

參考鏈結

Attention機制全解

目錄 系統流 wap.kuwx.net 之前已經提到過好幾次attention的應用,但還未對attention機制進行系統的介紹,之後的實踐模型attention將會用到很多,因此這裡對attention機制做乙個總結。注意力機制 attention mechanism 首先是用於解決 seque...

Attention機制結構詳解

bert bidirectional encoder representations from transformers 使用了transformer為主要框架,transformer能夠更徹底的捕捉語句中的雙向關係。transformer框架之所以能夠比傳統的cnn rnn甚至是lstm更優秀,是...

Attention機制的文章總結

這兩年,看到了很多關於attention機制的文章,尤其在影象領域。可能大家都覺得這個好用,從頂刊頂會到國產會議,這個attention機制偏低開花。本文結合自己的研究方向,簡單總結一下有關於attention機制的文章。由於我研究的是2d human pose estimation,我接觸的第一篇...