RNN Encoder–Decoder的attention機制簡介

先貼原paper:

NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

對讀者要求:

對RNN和Encoder–Decoder有基本的了解。

背景介紹:

神經網路在機器翻譯裡面比較有名的模型之一就是Encoder–Decoder了,然而在attention機制出來之前,神經網路方法還是沒有真正達到傳統方法的水平的,用神經網路搞翻譯這幫人只敢說「我們還在研究之中~~」。有了attention機制之後,這幫人終於可以揚眉吐氣了,神經網路方法做翻譯總算敢說超越傳統方法了。(這些故事是一位NLP界的同學跟我吹牛時說的,我反正是信了)

一、原來的Encoder–Decoder

在這個模型中,encoder只將最後一個輸出遞給了decoder,這樣一來,decoder就相當於對輸入只知道梗概意思,而無法得到更多輸入的細節,比如輸入的位置信息。所以想想就知道了,如果輸入的句子比較短、意思比較簡單,翻譯起來還行,長了複雜了就做不好了嘛。

二、對齊問題

前面說了,只給我遞來最後一個輸出,不好;但如果把每個step的輸出都傳給我,又有一個問題了,怎麼對齊

什麼是對齊?比如說英文翻譯成中文,假設英文有10個詞,對應的中文翻譯只有6個詞,那麼就有了哪些英文詞對哪些中文詞的問題了嘛。

傳統的翻譯專門有一塊是搞對齊的,是一個比較獨立的task(傳統的NLP基本上每一塊都是獨立的task啦)。

三、attention機制

我們從輸出端,即decoder部分,倒過來一步一步看公式。S_{t} =f(S_{t-1} ,y_{t-1} ,c_{t} ) (1)

S_{t}是指decoder在t時刻的狀態輸出,S_{t-1}是指decoder在t-1時刻的狀態輸出,y_{t-1} 是t-1時刻的label(注意是label,不是我們輸出的y),c_{t} 看下一個公式,f是一個RNN。

c_{t} =sum_{j=1}^{T_{x}}{a _{tj} h _{j}} (2)

 h _{j}是指第j個輸入在encoder里的輸出,a _{tj}是一個權重

a_{tj} =frac{exp(e_{tj} )}{sum_{k=1}^{T_{x} }{exp(e_{tk})} } (3)

這個公式跟softmax是何其相似,道理是一樣的,是為了得到條件概率P(a|e),這個a 的意義是當前這一步decoder對齊第j個輸入的程度。

最後一個公式,e_{tj} =g(S_{t-1} ,h_{j}) (4)

這個g可以用一個小型的神經網路來逼近。

好了,把四個公式串起來看,這個attention機制可以總結為一句話,「當前一步輸出S_{t} 應該對齊哪一步輸入,主要取決於前一步輸出S_{t-1} 和這一步輸入的encoder結果h_{j}」。

我當時看了這個方法的感受是,計算力發達的這個年代,真是什麼複雜的東西都有人敢試了啊。這要是放在以前,得跑多久才能收斂啊......

神經網路搞NLP雖然還有諸多受限的地方,但這種end-to-end 的one task方式,太吸引人,有前途。


推薦閱讀:

淺談自然語言處理 – 開端
詳解梯度下降法的三種形式BGD、SGD以及MBGD
Deep Learning 最優化方法之AdaGrad
隱馬爾科夫模型(HMM)一前向與後向演算法
TensorFlow入門

TAG:算法 | 自然语言处理 | 神经网络 |