注意力機制


注意力的種類有如下四種:

  • 加法注意力, Bahdanau Attention
  • 點乘注意力, Luong Attention
  • 自注意力, Self-Attention
  • 多頭點乘注意力, Multi-Head Dot Product Attention(請轉至Transformer模型)

1. Bahdanau Attention

Neural Machine Translation by Jointly Learning to Align and Translate, Bahdanau et al, ICLR 2015

總覽

2015年發布的論文,首次提出注意力機制,也就是加法注意力,並將其應用在機器翻譯領域。

當前工作的不足

目前NMT主流的方法是seq2seq方法,具體采用的是encoder-decoder模型。但是在編解碼模型中編碼得到的是固定長度的context vector,這是當前seq2seq的瓶頸

本文提出聯合學習對齊翻譯的方法:

  • 對齊:在預測每一個target word的時候都去search源句子中一個部分
  • 翻譯:根據對齊的部分動態生成c,然后基於c和上一個target word生成當前的target word

模型

下圖展示了在預測target word \(o_t\)時從源句子隱藏狀態動態生成上下文向量的過程。

首先根據對齊模型\(a\),給每個源隱藏狀態\(h_j\)生成一個權重系數\(e_{tj}\)

\[e_{tj} = a(s_{t-1}, h_j) \]

然后將所有權重系數進行softmax歸一化得到各個源隱藏狀態的注意力權重:

\[a_{tj} = \frac{exp(e_{tj})}{\sum_{k=1}^{T_x}exp(e_{tk})} \]

計算注意力權重和各個源隱藏狀態的加權和,得到預測\(o_t\)的注意力向量:

\[c_t = \sum_{j=1}^{T_x}a_{tj}h_j \]

然后根據注意力向量進行預測:

\[s_t = f(s_{t-1}, y_{t-1}, c_t) \]

\[p(y_t|y_1, ..., y_{t-1}, x) = g(y_{t-1}, s_t, c_t) \]

文章在這里對g進行了解釋:g是非線性的,可能是多層的函數。

結論

通過注意力機制,避免了encoder將整個句子的語義信息編碼成一個固定長度的上下文向量,並在翻譯時將注意力集中到和下一個目標詞相關的信息上。在長句子上,此方法的提升尤為突出。

下圖展示了注意力機制的可視化:
在這里插入圖片描述

簡單解釋下:x和y軸分別表示源句子(英語)和生成的句子(法語),權重系數通過像素的灰度值來刻畫,1表示全白,0表示全黑。

文章最后提出,未來的工作是處理一些罕見詞。

2. Luong Attention

Effective Approaches to Attention-based Neural Machine Translation, Luong, EMNLP 2015

總覽

Luong提出了全局和局部注意力(這里只討論全局注意力),本文提出了新的權重系數計算方法,大大提高了成績。

當前工作存在的不足

本文繼Bahdanau之后繼續研究注意力,在此根據對齊時,覆蓋所有范圍和部分范圍,提出了全局注意力(global attention)和局部注意力(local attention)。

模型

全局注意力和局部注意力的區別是生成注意力向量的方式不同,后續工作都是一樣的。

下圖展示了全局注意力的完整生成過程:

在這里插入圖片描述

在這里,權重系數直接根據目標隱藏狀態\(h_t\)和源隱藏狀態\(\overline h_s\)計算得到,計算方法有以下幾種:

\[score(h_t, \overline h_s) = \begin{cases} h_t^T\overline h_s \quad dot\\ h_t^TW_a\overline h_s \quad general\\ v_a^Ttanh(W_a[h_t;\overline h_s]) \quad concat \end{cases} \]

然后將分數進行歸一化:

\[\begin{aligned} a_t(s) & = align(h_t, \overline h_s)\\ & = \frac{exp(score(h_t, \overline h_s))}{\sum_{s'}exp(score(h_t, \overline h_{s'}))} \end{aligned} \]

文中沒有給出注意力向量的計算過程,可以參考Bahdanau注意力的計算過程,通過加權和得到注意力向量\(c_t\)

將注意力向量和隱藏狀態\(h_t\)簡單拼接,輸入到全連接層,得到隱藏狀態\(\tilde h_t\):

\[\tilde h_t = tanh(W_c[c_t;h_t]) \]

根據這個隱藏狀態即可得到最后的輸出:

\[p(y_t|y_{<t}, x) = softmax(W_s\tilde h_t) \]

總結&相比Bahdanau的優勢

無論是全局注意力還是局部注意力,Luong都提出了多種權重系數計算方式,最后的實驗結果表示:對於全局注意力,dot的方式是最好的;對於局部注意力,general的方式最好

但是可以看出無論是哪一種計算方式,都不再需要預先計算出\(s_{t-1}\)了,這樣就可以實現並行化計算,大大提高了計算速度。

3. Self-Attention

A Structured Self-Attentive Sentence Embedding, Zhouhan Lin et al, ICLR 2017

總覽

本文提出使用自注意力機制計算不同注意力系數作用下的句子嵌入(sentence embedding)。

然后將得到的句子嵌入應用到多個NLP任務(author profiling, sentiment classification, textual entailment)中去。

自注意力是注意力機制的一種特例:因為自注意力的源隱藏狀態和目標隱藏狀態的來源相同。

模型

模型的結構如下圖所示:

在這里插入圖片描述

從圖中可以看出,如果只考慮一種句子嵌入,雙向LSTM的輸出為H,那么模型的注意力權重計算如下所示:

\[a = softmax(w_{s_2}tanh(W_{s_1}H^T)) \]

上式中,\(W_{s_2} \in \Bbb R^{1 \times d_a}\)\(W_{s_1}\in \Bbb R^{d_a \times 2u}\)\(H \in \Bbb R^{n \times 2u}\)\(d_a\)是超參數

此時如果考慮多種句子嵌入,那么

\[A = softmax(w_{s_2}tanh(W_{s_1}H^T)) \]

此時,\(W_{s_2} \in \Bbb R^{r \times d_a}\),那么就得到r套注意力權重,計算其和源隱藏狀態加權和就得到多種句子嵌入:

\[M = AH \]

這就是最后的句子嵌入矩陣。


免責聲明!

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



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