1. 程式人生 > >Attention機制學習(二)使用

Attention機制學習(二)使用

前言

前一篇部落格簡要的介紹了一下傳統的attention機制的基本思想,
本篇部落格解讀使用attention機制做機器翻譯的第一篇論文,通過這篇論文看attention的使用方法。
論文:
NEURAL MACHINE TRANSLATION
BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
論文地址:https://arxiv.org/pdf/1409.0473.pdf

論文motivation

這篇論文的motivation,就是在說attention之前的Encoder-Decoder機器翻譯模型有一個明顯的缺點:傳統模型將源句子的所有資訊都壓縮成一個固定長度的向量,這樣做的缺點是當句子長度很長的時候,模型無法利用句子前面部分的有效資訊。換句話說,句子長了原來的技術都不好使了。
於是他們就提出了往Encoder-Decoder裡面加入Attention機制的想法,加入這種想法以後模型可以同時學習如何進行翻譯以及進行對齊。
如何進行翻譯,大家都知道是啥意思。
那如何進行對齊是啥意思呢?其實這個就是Attention機制了。
還是上文那個例子:
源句: Tom chase Jerry.
翻譯結果: 湯姆追逐傑瑞
我們可以看到,譯文結果“湯姆”實際是對齊與“Tom”的,“追逐”對齊與chase。這個對齊,並不是唯一,因為翻譯的時候肯定不是一個個對齊就能翻譯好的。它其實是更想表達:譯文“湯姆” 主要是根據“Tom”得到的,注意這裡是“主要” 是一個高權值的思想。
於是這篇論文就是通過這種 對齊 來體現它的attention.

老生常談

在Encoder-coder 模型框架裡面,encoder複製先輸入的句子的各個詞的詞向量,然後把它們壓縮成一個句向量 c c 。如果encoder和decoder都是使用rnn的話,就可以表示成:
c = q

( h 1 , h 2 ,
, h T x
) c=q({h_{1},h_{2},\dots,h_{T_{x}}})
其中 h i = f ( h i 1 , x i ) h_{i}=f(h_{i-1},x_{i}) ,它是每個時間步iRNN隱藏層。

x是輸入的各個詞的詞向量
X = ( x 1 , x 2 , , x T x ) X=(x_{1},x_{2},\dots,x_{T_{x}}) .

f , q f,q 是非線性啟用函式。通常,人們取 c = h T x c=h_{T_{x}} ,表示拿RNN的最後一個時間步的隱藏層輸出作為句向量。
然後翻譯的話就是在目標語言中,找到一個詞串,使得下面的條件概率最大:
p ( y ) = p ( y 1 , y 2 , , y T c ) = p ( y 1 c ) p ( y 2 { y 1 , c } ) p ( y 3 { y 1 , y 2 , c } ) = t = 1 t = T p ( y t { y 1 , y 2 , , y t 1 , c } ) p(y)=p(y_{1},y_{2},\dots,y_{T}|c)=p(y_{1}|c)p(y_{2}|\{y_{1},c \})p(y_{3}|\{y_{1},y_{2},c \})\dots=\prod ^{t=T}_{t=1}p(y_{t}|\{y_{1},y_{2},\dots,y_{t-1},c\})
其中 y = { y 1 , y 2 , y 3 , , y T } y=\{y_{1},y_{2},y_{3},\dots,y_{T}\} 是翻譯結果, T T 是翻譯結果的長度。
其中使用到的條件概率公式可以巨集觀的表示為: p ( y t { y 1 , y 2 , , y t 1 , c } ) = g ( y t 1 , s t , c ) p(y_{t}|\{y_{1},y_{2},\dots,y_{t-1},c\})=g(y_{t-1},s_{t},c) 。g是一個勢能函式, y t 1 y_{t-1} 是上一步的輸出, s t s_{t} 是decoder部分的rnn的隱藏層向量,而 c c 就是輸入句子的句向量。

以上是老生常談的東西,使用一些符號來方便下面講述attention.


核心的東西來啦

注意到在翻譯的時候的,對於任意一個時間步 i { 1 , 2 , , T } i\in \{1,2,\dots,T\} ,

條件概率 p ( y i { y 1 , y 2 , , y i 1 , c } ) = g ( y i 1 , s i , c ) p(y_{i}|\{y_{1},y_{2},\dots,y_{i-1},c\})=g(y_{i-1},s_{i},c) 輸入的 c c 是固定的。

這樣是不好的,於是作者就提出了每個時間步, c i c_{i} 是可以不同的想法。

把條件概率改寫成:
p ( y i { y 1 , y 2 , , y i 1 , c } ) = g ( y i 1 ,