RNN-Encoder Decoder架構中引入的注意力機制

一夜了發表於2018-06-15

一.簡介

    注意力機制是在Encoder與Deconder架構中針對輸出不同的序列(分詞)在輸入序列中所佔權重一樣,或者使用同一個C向量的不足中,引入了能夠學習針對不同輸出序列在不同輸入序列所佔的比重不同的一個機制,例如,“我喜歡足球”與“i like football”這個翻譯中,‘i’這個詞的翻譯明顯與“我”這個輸入詞對應,與後面“喜歡足球”的關係不大,因此,這種注意力機制能夠明顯的提升翻譯效果。
    以下內容是我在看完《NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE》這篇論文後做的一個簡要總結。

二.詳細介紹

    論文中提出,注意力機制共同學習輸入輸出序列對應關係以及翻譯比傳統的Encoder-Deconder架構要好。尤其是在長句子的翻譯上,由於Encoder-Decoder在長句子中表現不好,Cho et al. (2014b) 這篇論文顯示了隨著句子的增長,傳統的Encoder-Decoder架構表現越來越糟,尤其是對文字中最長的句子。
    注意力機制解決了這個問題,每次在翻譯中生成一個單詞,都會在輸入中找到與之最相關的資訊。該模型都會根據輸入中相關的單詞位置資訊以及先前的目標詞來預測當前目標詞。
    最為重要的是這種方式並不是將整個輸入文字學習到一個簡單的固定長度的向量中,而是編碼整個輸入到一個向量序列中,並從中選擇適宜的向量子集解碼翻譯。

2.1 RNN Encoder-Decoder

    文中提出了一個使用兩個RNN網路的Encoder-Decoder架構,一個用於Encoder,一個用於Decoder。能夠同時學到對應關係和進行翻譯。
    在Encoder中,編碼器學習輸入序列(x1,x2...xTx)

(x_1,x_2...x_{T_x})
到向量C中,如下所示:

ht=f(xt,ht1)
h_t=f(x_t,h_{t-1})

並且:
C=q(h1,h2....hTx)
C = q({h_1,h_2....h_{T_x}})

其中ht
h_t
是在時間t的隱藏狀態,C是從隱藏狀態中生成的向量,f和q是非線性的函式,例如,Sutskever et al使用LSTM作為f,C為hTx
h_{T_x}

    在已知輸入文件向量C以及y1,...yt1
{y_1,...y_{t'-1}}
,Decoder被訓練用來預測下一個詞語yt
y_{t'}

p(y)=t=1Tp(yt|(y1,...yt1),c)
p(y)=\prod_{t=1}^T p(y_t | (y_1,...y_{t-1}),c)

其中,y=(y1,....,yTy)
y=(y_1,....,y_{T_y})
,在RNN中,每個條件模型被指定為:
p(yt|(y1,...yt1),c)=g(yt1,st,c)
p(y_t | (y_1,...y_{t-1}),c)=g(y_{t-1},s_t,c)

其中g是一個非線性的,多層的函式,st
s_t
是RNN的隱藏層。

2.2 注意力機制

注意力機制本文主要是使用在了Encoder-Decoder架構中,其中使用雙向RNN作為Encoder,而解碼器Decoder主要搜尋輸入序列進行翻譯。

2.2.1 Decoder

在新的架構中,文中新的條件概率為:

p(yt|y1,...,yt1,c)=g(yt1,st,ci)
p(y_t | y_1,...,y_{t-1},c)=g(y_{t-1},s_t,c_i)

其中st
s_t
是RNN的在時間t的隱藏狀態,可以計算為:
si=f(si1,yi1,ci)
s_i=f(s_{i-1},y_{i-1},c_i)

其中,ci=j=1Txαijhj
c_i=\sum_{j=1}^{T_x} \alpha_{ij}h_j
αij=exp(eij)k=1Txexp(eik)
\alpha_{ij}=\frac{exp(e_{ij})}{\sum_{k=1}^{T_x}exp(e_{ik})}
eij=a(si1,hj)
e_{ij}=a(s_{i-1},h_j)
eij
e_{ij}
這個引數主要評價位置i的輸入與位置j附近輸入之間的匹配關係。這個引數主要依靠RNN隱藏狀態si1
s_{i-1}
以及輸入序列第j個標籤hj
h_j
eij
e_{ij}
計算公式為:
這裡寫圖片描述
具體如下圖所示:
這裡寫圖片描述

   文中將a作為前饋神經網路的引數與其它模型一起訓練,與傳統的機器翻譯不同,the alignment並不認為是一個潛在的變數,alignment model直接計算soft alignment,允許反向傳播損失函式的梯度,梯度能夠同翻譯模型一起訓練,讓αij

\alpha_{ij}
作為目標詞yi
y_i
與輸入詞xj
x_j
之間的一種分佈,並與Ci
C_i
加權求和。
   αij
\alpha_{ij}
在隱藏狀態si1
s_{i-1}
決定si
s_i
和生成yi
y_i
中反應了hj
h_j
的重要性,換一句話說,解碼器Decoder決定了關注哪些輸入序列,在這種注意力機制下,一些資訊會擴散到annotation中去,並在解碼器Decoder中被選擇。

2.2.2 Encoder-雙向RNN

   文中提到,傳統的RNN讀取有序的輸入序列,然後在一些場景中,針對每一個單詞,我們希望不僅能夠學習到前面單詞的資訊,而且能夠學習到後面單詞的資訊。
   雙向RNN是由前向以及後向的RNN組成,前向的RNN讀取輸入序列(x1,....,xTx)

(x_1,....,x_{T_x})
,然後計算前向的隱藏狀態(h1,...hTx)
(\overrightarrow{h_1},...\overrightarrow{h_{T_x}})
,而後向的RNN讀取(xTx,....,x1)
(x_{T_x},....,x_1)
,然後學習後向的隱藏狀態(h1,...hTx)
(\overleftarrow{h_1},...\overleftarrow{h_{T_x}})
。因此,我們能夠得到每個輸入詞語的隱藏狀態hj=[hjT,hhjT]
h_j=[\overrightarrow{h_j^T},\overleftarrow{h_{h_j^T}}]
。在這種方式下,hj
h_j
將會表示前向以及後向的單詞。由於RNN更傾向於表示最近的輸入,所以,hj
h_j
會更注重於xj
x_j
附近的單詞。

實驗驗證

這裡寫圖片描述
其中30表示句子長度最長為30,50表示句子長度最長為50個單詞。RNNsearch為文中提出的模型。
這裡寫圖片描述

相關文章