Attention注意力機制

Seq2Seq
在開始Attention之前,我們先簡單回顧一下Seq2Seq模型,傳統的機器翻譯基本都是基於Seq2Seq模型來做的,該模型分爲encoder層與decoder層,並均爲RNN或RNN的變體構成,如下圖所示

在encode階段,第一個節點輸入一個詞,之後的節點輸入的是下一個詞與前一個節點的hidden state,最終encoder會輸出一個上下文向量c(context),這個c又作爲decoder的輸入,每經過一個decoder的節點就輸出一個翻譯後的詞,並把decoder的隱狀態和當前節點的輸出作爲下一層的輸入。該模型對於短文本的翻譯來說效果很好,但是其也存在一定的缺點,如果文本稍長一些,就很容易丟失文本的一些信息,bleu得分也會較低(關於什麼是bleu請看這篇博客https://blog.csdn.net/CharlesOyfz/article/details/90668423),而Attention就是爲了解決這個問題。下圖是Attention模型和普通Seq2Seq模型根據句子長度和bleu得分的對比(藍色爲普通seq2seq,綠色爲attention模型):


Attention,注意力,該模型在decode階段,會選擇最適合當前節點的c作爲輸入。

注意力機制在encoder階段,提供了更多的數據給到decoder階段,encoder會把所有的輸入節點的隱狀態形成一個加權和的上下文向量c提供給decoder。
具體的步驟看圖,如下:

圖示爲一個雙向rnn,a爲編碼器的隱狀態,s爲解碼器的隱狀態,當解碼輸出第1個輸出時,也就是單詞Jane,需要花多少注意力在每個輸入的單詞上?c代表輸入序列全部隱狀態a^{<1>},a^{<2>},...,a^{<T>}的一個加權和,每個時刻生成輸出所對應的上下文向量c都不一樣。\alpha ^{<1,1>}表示解碼器生成第1個輸出(單詞Jane)時;需要放在第1個單詞x ^{<1>}的隱狀態的注意力量,\alpha ^{<1,2>}表示生成第1個輸出(單詞Jane)時,需要放在第2個單詞的隱狀態的注意力量;同理,\alpha ^{<1,3>}表示需要放在第3個單詞的隱狀態的注意力量。也就是說\alpha ^{<i,j>}表示模型在生成第i個輸出時,需要放多少注意力在第j個輸入隱狀態上。而傳給後面解碼器的該時刻t'=1的全部隱狀態的加權和(上下文向量c)爲:

c_{1}=\sum_{t'=1}^{T_{x}}\alpha^{<1,t'>}a^{<t'>}

 

同理,可得其他時刻輸出的上下文向量,從而完成解碼階段的輸出,下面上公式結合下圖說明:

編碼階段:

因爲是雙向RNN,所以編碼階段t'時刻隱狀態向量a爲該時刻正向與反向的隱狀態的拼接:

a ^{<t{}'>}=\left ( \overrightarrow{a}^{<t{}'>},\overleftarrow{a}^{<t{}'>}\right)

\overrightarrow{a}^{<t{}'>}=tanh(\overrightarrow{W_{x}}x^{<t'>}+\overrightarrow{U_{x}}a^{<t'-1>})

\overleftarrow{a}^{<t{}'>}\right=tanh(\overleftarrow{W_{x}}x^{<t'>}+\overleftarrow{U_{x}}a^{<t'+1>})

當t'=0, \overrightarrow{a}^{<t{}'>}=0 ,t'=T_x+1時,\overleftarrow{a}^{<t{}'>}=0;x^{<t'>}爲經過emberding後的詞嵌入向量

Attention部分:

第i個輸出對應的上下文向量c爲:

c_{i}=\sum_{t'=1}^{T_{x}}\alpha^{<i,t'>}a^{<t'>}

其中,所有該時刻i的注意力權重和爲1:

\sum_{t'=1}^{T_{x}}\alpha^{<i,t'>}=1

e^{<i,t'>}=v_{a}^{\top }tanh(W_{a}s_{i-1}+U_{a}a^{<t'>})

\alpha^{<i,t'>}=softmax(e^{<i,t'>})

解碼階段:

s^{<i>}=\begin{cases} tanh(W_{s}\overleftarrow{a}^{<i>}),& \text{ if } i= 0\\tanh(W_{y}E_{y}y^{<i>}+U_{y}s^{i-1}+Cc_{i}) ,& \text{ if } i>0 \end{cases}

t^{<i>}=tanh(U_{o}s^{<i-1>}+V_{o}E_{y}y^{<i-1>}+C_{o}c_{i})

y^{<i>}=softmax(W_{o}t^{<i>})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章