Seq2Seq and Attention 入門

Seq2Seq and Attention

參考文獻

[1] Cho 在 2014 年在論文《Learning Phrase Representations using RNN Encoder–Decoder
for Statistical Machine Translation》中提出 Encoder–Decoder 結構

[2] Sutskever et al 2014年在論文 《Sequence to Sequence Learning with Neural Networks》中正式提出seq2seq的概念

[3] Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio.在論文
《Neural Machine Translation by Jointly Learning to Align and Translate》 ICLR 2015.中提出BahdanauAttention Mechanism。

[4] Minh-Thang Luong, Hieu Pham, Christopher D. Manning.在論文
《”Effective Approaches to Attention-based Neural Machine Translation.”
EMNLP 2015.》中提出LuongAttention Mechanism.

1. Seq2Seq model

seq2seq的名字全稱是序列到序列(sequence to sequence), 從一個序列到另一個序列,可以是從中文的序列到英文的序列,也可以是從中文語音序列到中文文字序列,總之,實現的是從一個不定長輸入序列到一個不定長輸出序列的模型。

1.1 Encoder-Decoder model

要實現從一個序列到另外一個序列的轉換,正常思維邏輯是找到一箇中間編碼,可以實現在兩種序列之間實現自由轉換。於是乎,Encoder-Decoder結構在2014年被Cho提了出來, 先通過編碼器對原序列進行編碼,再通過解碼器對中間編碼進行解碼得到輸出序列。
在這裏插入圖片描述
Figure 1 爲Encoder-Decoder結構示意圖,Encoder框中是一個正常的Rnn結構,輸入序列 (x1,x2,...,xT)(x1,x2,...,xT),輸出CCCC是上文中說到的中間序列。Decoder框中同樣爲Rnn結構, 其輸入是中間編碼CC, 輸出爲輸出序列(y1,y2,...,yT)(y1,y2,...,yT)

這裏Decoder部分的Rnn和Encoder部分的Rnn稍有不同。
Encoder的Rnn爲正常使用,由上一時刻隱狀態ht1h_{t-1}和該時刻輸入xtx_{t}進行隱狀態更新,公式爲:
ht=f(ht1,xt)h_{t} = f(h_{t-1}, x_{t})
Decoder的Rnn在 tt 時刻的輸出由 tt 時刻的隱藏狀態sts_{t}t1t-1時刻的輸出yt1y_{t-1}CC 計算得出,公式爲:
P(ytyt1,yt2,...,y1,C)=g(st,yt1,C)P(y_{t}| y_{t-1}, y_{t-2}, ..., y_{1}, C) = g(s_{t}, y_{t-1}, C)
Encoder和Decoder的訓練目標是最大化條件概率分佈:
maxθ1Nn=1NlogPθ(ynxn)max_{\theta} \frac{1}{N} \displaystyle\sum_{n=1}^N logP_{\theta}(y_{n}|x_{n})
模型參數爲θθ,出現xnx_{n}yny_{n}的條件概率是P(ynxn)P(y_{n}|x_{n})logPlogP是單調遞增的,更容易計算,將NPN個P加起來求平均,就是最終的優化目標,輸出序列輸出幾個符號,NN就是幾
這裏不懂的可以看博客:語言模型:馬爾可夫模型

2. Attention

Seq2Seq中Encoder通過 CC 將信息傳給Decoder, CC承載的是訓練數據中序列的信息,而CC僅僅是Rnn隱藏序列的最後一個,表達的是整個序列的信息。而如果想要更好的結果,將Encoder序列的所有隱藏狀態都給Decoder顯然更好,因此 CC 可以是Encoder所有時刻的隱藏狀態之和,此時的 CC 表示Encoder 中又包含了各個詞的隱藏信息;當然,在解碼時生成某一個詞有時候並不需要依賴輸入序列所有的詞的信息,此時,只要給Encoder每個時刻隱藏狀態一個權值,再相加,就可以得到生成指定詞最適合的編碼信息了,換種說法就是當生成某個詞的時候我們的注意力只放在那些對它有用的詞信息上。這就是注意力機制的邏輯。

2.1 Bahdanau Attention Mechanism

先來介紹Bahdanau在2015年提出的attention mechanism。
在這裏插入圖片描述
同樣,Decoder通過計算條件概率分佈的方式來預測輸出:
P(yiyi1,yi2,...,y1,X)=g(si,yi1,ci)P(y_{i}| y_{i-1}, y_{i-2}, ..., y_{1}, X) = g(s_{i}, y_{i-1}, c_{i})
注意:Encoder-Decoder中的 CC 是固定不變得信息,而這裏cic_{i} 是一個變化信息,稱爲第 ii 個輸出詞的對應的輸入上下文向量,同樣代表輸入句子的表徵,不同時刻注意力集中在不同的詞上面。

狀態 sis_{i}ii 時刻Decoder Rnn的隱藏狀態:
si=f(si1,yi1,ci)s_{i} = f(s_{i-1}, y_{i-1}, c_{i})

上下文向量 cic_{i} 由輸入序列的隱藏層狀態 h1,...,hTh_{1},...,h_{T}產生。每個hih_{i}包含整個序列的信息的同時更多的關注第 ii 個詞的上下文信息。cic_{i} 的計算:
ci=j=1Tαijhj c_{i} = \displaystyle\sum_{j=1}^T \alpha_{ij}h_{j}
這裏的 αij\alpha_{ij} 是每個 hjh_{j} 的權重得分,範圍爲(0,1):
αij=exp(eij)k=1Texp(eik)\alpha_{ij} = \frac{exp(e_{ij})}{\displaystyle\sum_{k=1}^T exp(e_{ik})}
eij=a(si1,hj)e_{ij} = a(s_{i-1}, h_{j})

eije_{ij} 爲Decoder (i1)(i−1) 位置的隱藏狀態si1s_{i-1}和Encoder中 jj 位置的隱藏狀態hjh_{j}經過計算方式 aa 得到的分值。
aa的計算方式爲:
a=vaTtanh(Wasi1+Uahj) a = v_a^T tanh(W_{a}s_{i-1}+U_{a}h_{j})
這裏的WaUaW_a和U_{a}爲參數矩陣,作爲可訓練參數加入整個網絡,所以attention也相當於是一層網絡,WaUaW_a和U_{a}是這層網絡的參數,所以attention的參數矩陣也是可以訓練得到的。
網絡經過訓練可以學習到:解碼器在輸出一個序列元素時,哪些編碼器信息更有價值,更值得被關注,這就是注意力機制的通俗解釋。

2.2 Luong Attention Mechanism

Luong 在論文4中提出一種 aa(對齊函數) 的新計算方式,
a=vaTtanh(Wasi+Uahj) a = v_a^T tanh(W_{a}s_{i}+U_{a}h_{j})
需要注意的是在Luong提出的Attention Mechanism中,是通過Decoder ii 時刻的隱藏層狀態 sis_{i} 和encoder的隱藏層狀態hjh_{j} 來確定aa的值,而在Bahdanau中是通過Decoder (i1)(i−1) 時刻的隱藏狀態si1s_{i-1}和Encoder中 jj 位置的隱藏狀態hjh_{j}經過計算。
在這裏插入圖片描述
轉載自:https://blog.csdn.net/ilikede/article/details/81035889#commentBox

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