Attention

2014年,Google Mind發(fā)表的《Recurrent Models of Visual Attention》論文點(diǎn)燃了Attention機(jī)制在圖像領(lǐng)域的應(yīng)用。隨后,Bahdanau等人發(fā)表論文《Neural Machine Translation by Jointly Learning to Align and Translate》第一次將Attention機(jī)制應(yīng)用在自然語言領(lǐng)域。之后Attention機(jī)制被廣泛應(yīng)用于基于RNN神經(jīng)網(wǎng)絡(luò)模型的深度學(xué)習(xí)任務(wù)中。2017年,Google發(fā)表的論文《Attention is all you need》中提出在機(jī)器翻譯上大量使用self-attention來學(xué)習(xí)文本表示。

深度學(xué)習(xí)中的注意力機(jī)制借鑒了人類的注意力思維方式。人類視覺通過快速掃描全局圖像,獲得需要重點(diǎn)關(guān)注的目標(biāo)區(qū)域,也就是所說的注意力焦點(diǎn),然后對這一區(qū)域投入更多的注意力資源,以獲取更多所需要關(guān)注目標(biāo)的細(xì)節(jié)信息,從而抑制其他無用信息。人類視覺注意力機(jī)制極大地提高了視覺信息處理的效率與準(zhǔn)確性。深度學(xué)習(xí)中的注意力機(jī)制本質(zhì)上也是和人類視覺注意力類似,也是從眾多信息中選擇出對當(dāng)前任務(wù)目標(biāo)更關(guān)鍵的信息。

先說說encoder-decoder

目前大多數(shù)注意力機(jī)制都附著在encoder-decoder框架下,但是我們應(yīng)該清楚,attention是一種思想,其本身并不依賴于任何框架。encoder-decoder是深度學(xué)習(xí)中非常常見的一個模型框架。在Image Caption應(yīng)用中,encoder-decoder是CNN-RNN框架;在神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯模型中,encoder-decoder是LSTM-LSTM框架。特別地,在機(jī)器翻譯中文本到文本的轉(zhuǎn)換,這樣的encoder-decoder模型也被叫做sequence to sequence learning。encoder,就是將輸入序列編碼成一個定長向量;decoder,就是將前面生成的定長向量再解碼成輸出序列。


1.png

如上圖,這里我們設(shè)定encoder-decoder是RNN-RNN框架。

當(dāng)前時刻的隱狀態(tài)h_{t}=f(h_{t-1}, x_{t})。

編碼:獲得各個時刻隱狀態(tài)后,把這些隱狀態(tài)匯總,生成最終的語義編碼向量C=q\left(h_{1}, h_{2}, h_{3}, \ldots, h_{T_{x}}\right),q是非線性神經(jīng)網(wǎng)絡(luò),在這里表示多層RNN。

解碼:根據(jù)語義向量C和已經(jīng)生成的輸出序列y_{1}, y_{2},...,y_{t-1}預(yù)測下一個輸出詞y_{t}
y_{t}=\operatorname{argmax} P\left(y_{t}\right)=\prod_{t=1}^{T} p\left(y_{t} | y_{1}, y_{2}, \ldots, y_{t-1}, C\right)
由于我們這里是RNN,所以上式可以簡寫:
y_{t}=g\left(y_{t-1}, s_{t-1}, C\right)
其中s_{t-1}是decoder中RNN神經(jīng)元的隱狀態(tài),y_{t-1}是前一時刻的輸出,C是語義向量。g是一個非線性的多層神經(jīng)網(wǎng)絡(luò),可以輸出y_{t}的概率。一般情況下g是多層RNN后接softmax。

encoder-decoder最大的局限性在于編碼器和解碼器之間的唯一聯(lián)系是一個定長的語義向量C。編碼器要將整個序列的信息壓縮進(jìn)一個定長的向量中。這樣做有兩個缺點(diǎn):一是C可能無法完全代表整個序列的信息; 二是先輸入到網(wǎng)絡(luò)的內(nèi)容攜帶的信息會被后輸入的信息覆蓋,輸入序列越長,問題越突出。

請出今天的主角:Attention

下圖是Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》中使用的加入了Attention機(jī)制的encoder-decoder模型:

2.png

在編碼部分使用了雙向RNN。在前向RNN中,數(shù)據(jù)按順序輸入,所以第j個隱層狀態(tài)\overrightarrow{\mathrm{h}_{j}}攜帶了第j個詞本身及之前的一些信息;在逆向RNN中,數(shù)據(jù)是逆序輸入的,所以第j個隱層狀態(tài)h_{j}^{\leftarrow}攜帶了第j個詞本身及之后的信息。把這兩個隱狀態(tài)結(jié)合起來,h_{j} = [\overrightarrow{\mathrm{h}_{j}}, h_{j}^{\leftarrow}]包含了第j個輸入的前后信息。

再看看解碼部分。

  • 計算上一步得到的各個隱狀態(tài)h_{j}與解碼器隱狀態(tài)s_{t}之間的相關(guān)程度,然后進(jìn)行softmax得到每個隱狀態(tài)的權(quán)重a_{tj}

e_{t j}=a\left(s_{t-1}, h_{j}\right)=v_{a}^{T} \tanh \left(W_{a} s_{t-1}+U_{a} h_{j}\right)

a_{t j} = \frac{\exp \left(e_{t j}\right)}{\sum_{k=1}^{T} \exp \left(e_{t k}\right)}

e_{tj}表示第t個輸出前一個隱層s_{t-1}與第j個輸入隱層向量h_{j}之間的相關(guān)性,可以通過一個MLP神經(jīng)網(wǎng)絡(luò)進(jìn)行計算。有了e{tj}后,進(jìn)行softmax就可以得到歸一化的權(quán)重a_{tj}

這里計算輸入隱狀態(tài)和輸出隱狀態(tài)之間的相關(guān)程度常見的方法有:求兩者的向量點(diǎn)積、求兩個向量的夾角余弦值、通過引入額外的神經(jīng)網(wǎng)絡(luò)求值。

  • 計算當(dāng)前輸入對應(yīng)的編碼向量c_{t}

c_{t}=\sum_{j=1}^{T} a_{t j} h_{j}

  • 根據(jù)編碼向量c_{t}計算解碼器t時刻的隱狀態(tài)s_{t}和輸出h_{t}:

s_{t}=f\left(s_{t-1}, y_{t-1}, c_{t}\right)

y_{t}=g\left(y_{t-1}, s_{t}, c_{t}\right)

上述Attention機(jī)制稱為Soft Attention,對所有的編碼器隱狀態(tài)h_{j}都分配了權(quán)重。這里可以理解為對齊模型,作用是匹配輸出序列與輸入序列的對應(yīng)關(guān)系。

繼Bahdanau等人之后,Luong等人在Attention機(jī)制方面也發(fā)表了一篇很有代表性的論文《Effective approaches to attention-based neural machine translation》,提出兩種Attention機(jī)制:Global Attention 和 Local Attention;對后續(xù)各種基于Attention機(jī)制的模型在NLP中的應(yīng)用起到了很大的促進(jìn)作用。

Global Attention其實也是Soft Attention,與Bahdanau等人提出的模型基本相同,不同的是權(quán)重的計算方式,這里提出三種計算選擇:內(nèi)積、general、concat,并且實驗結(jié)果是general的效果比較好。
\operatorname{score}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right)=\left\{\begin{array}{ll}{\boldsymbol{h}_{t}^{\top} \overline{\boldsymbol{h}}_{s}} & {\text { dot }} \\ {\boldsymbol{h}_{t}^{\top} \boldsymbol{W}_{a} \overline{\boldsymbol{h}}_{s}} & {\text { general }} \\ {\boldsymbol{W}_{a}\left[\boldsymbol{h}_{t} ; \overline{\boldsymbol{h}}_{s}\right]} & {\text { concat }}\end{array}\right.

Soft Attention的缺點(diǎn)是每次decoder的時候都要計算所有的編碼器隱層狀態(tài),導(dǎo)致計算復(fù)雜度高。另外,當(dāng)source比較長時,Soft Attention的效果也會有所下降。

Local Attention每次只選擇一部分source進(jìn)行計算。其基本思路是:先為decoder端當(dāng)前詞預(yù)測一個source端對齊位置(Aligned Position) pt,然后基于pt為中心選擇一個窗口用于計算語言編碼向量C。這里比較重要的是怎么選取pt的位置,文中給出兩種計算方法:

  • Monotonic alignment:直接選擇source中第t個作為中心pt,然后向兩側(cè)取窗口大小個詞。

  • Predictive alignment:將decoder的隱狀態(tài)經(jīng)過一個激活函數(shù)tanh和sigmoid兩個函數(shù)之后變成0-1,再乘以S(source序列長度)變成0-S,也就是我們需要的原序列所對應(yīng)的中心位置pt,取出窗口大小個隱層,再進(jìn)行加權(quán)求和。這里權(quán)重乘以了一個高斯分布,目的是讓靠近中心pt的詞權(quán)重更大一些。
    p_{t}=S \cdot \operatorname{sigmoid}\left(\boldsymbol{v}_{p}^{\top} \tanh \left(\boldsymbol{W}_{\boldsymbol{p}} \boldsymbol{h}_{t}\right)\right)

\boldsymbol{a}_{t}(s)=\operatorname{align}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right) \exp \left(-\frac{\left(s-p_{t}\right)^{2}}{2 \sigma^{2}}\right)

我們再來看看近幾年比較熱的一種Attention機(jī)制——Self Attention

Self Attention也被稱為Intra Attention(內(nèi)部Attention),近年也獲得比較廣泛的使用;google翻譯模型內(nèi)部就大量使用了Self Attention。

通過前面的介紹,我們知道Soft Attention的計算是建立在source和target之間的。而Self Attention有點(diǎn)不一樣,從名字可能我們也能猜出個大概,這里的Attention計算是建立在Source或Target內(nèi)部的。這里可以做個不恰當(dāng)?shù)募僭O(shè),我們假設(shè)source和target一樣,然后根據(jù)soft attention的方式來計算attention。

下面兩張圖展示了Self Attention學(xué)習(xí)到同一個句子內(nèi)部詞之間的句法特性和語義特征。


3.png
4.png

Self Attention更容易捕獲句子中長距離的相互依賴特征。如果是RNN,需要依據(jù)序列計算,對于遠(yuǎn)距離的相互依賴特征,要經(jīng)過若干時間步的信息積累才能將兩者聯(lián)系起來;距離越遠(yuǎn),有效捕獲的可能性越小。Self Attention在計算過程中直接將句子中任意兩個單詞通過一個計算步直接聯(lián)系起來,所以遠(yuǎn)距離依賴特征之間的距離被縮短。另外,Self Attention對于增加計算的并行性也有直接幫助作用。

參考:

https://aclweb.org/anthology/D15-1166

https://arxiv.org/pdf/1409.0473.pdf

https://mp.weixin.qq.com/s?__biz=MzA4Mzc0NjkwNA==&mid=2650783542&idx=1&sn=3846652d54d48e315e31b59507e34e9e&chksm=87fad601b08d5f17f41b27bb21829ed2c2e511cf2049ba6f5c7244c6e4e1bd7144715faa8f67&mpshare=1&scene=1&srcid=1113JZIMxK3XhM9ViyBbYR76#rd

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容