Notes on Neural Machine Translation by Jointly Learning to Align and Translate

這是大概三或者兩個月前無聊的時候看的幾篇有關Attenion Model的論文之一。那段時間正好有一周輪到我在組會上講東西,不知道哪裡出的毛病突然就搜了幾篇這個主題的文章。因為是一周讀了大概七八篇,所以對我來說算是速度很快,自然細節會遺漏很多。現在憑記憶再整理成文字,也就只能講講所謂的思想了,一般來說講思想就可以糊弄糊弄。

首先,這篇是針對seq2seq的改進。seq2seq不多說,基本可以認為是先塞一個句子給LSTM跑一遍,完事了拉出來中間的隱藏層的結果,再用一個LSTM跑一遍,出最終結果,這個基本思想就是Encoder-Decoder。只是,我相信正常人第一次看完這篇文章心裡一定是「這TM也行」的感嘆,因為,句子不一樣長。不一個長度的句子複雜度肯定不一樣,seq2seq完全沒考慮這個問題。不過,數據集上的結果非常好,你能奈何呢。

這篇論文就是試圖解決這個變長問題,可以猜測作者的討論對話:

A: "seq2seq這篇實在太不科學了。"

B: "沒錯。"

A: "這說明了什麼?"

B: "模型面前,科學根本不重要。"

A: "滾,說明了我們可以找到一個更科學的方法,在seq2seq的基礎上獲得更好的結果。"

於是,最樸素的想法是什麼?在Decoding的階段,把Encoder LSTM的運行過程中所有的的隱藏層結果利用起來。所以第一個動作應該就 sum_{t=0}^N{h_t} 。當然,單這樣的話最後的和的範圍會變化,所以肯定會變成 1/N * sum_{t=0}^N{h_t} 。我個人猜測在這個基礎上的結果已經有改進了,不過這是個單純的平均。進一步的改進顯然就是加權平均,這樣就需要一個選擇權值的函數 F_w

為了定義這個 F_w ,需要找到輸入和輸出,輸出顯然就是一個權值,輸出則需要看看當時情況下可以用的數據包括哪些。在Decoding的每一個step,可以拿來用的數據就包括:上一步的結果 s_{t-1} ,Encoding過程中的所有中間結果。於是,我們可以定義 F_w = f(s_{t-1}, h_j) 。文章裡面說的貌似比較細緻一點,其實就是一個輸入為 s_{t-1}, h_j ,輸出為一個權值的網路,用來擬合這個 F_w 。之後會把對每個h的所有的結果再弄一個Softmax,其實就是為了做normalize。不過,其實這個和另外一個東西很類似,LSTM裡面的gate。

當然,我的水平有限,表達更是災難。

Refs:

  • wildml.com/2016/01/atte
  • colah.github.io/posts/2

推薦閱讀:

寫一個像Keras的深度學習框架需要學習哪些知識?
目前火熱的Deep Learning會滅絕傳統的SIFT/ SURF的特徵提取的演算法嗎?
如何在沒有有效指導的情況下學習深度學習?
如何評價Hinton在加拿大多倫多大學關於用「capsule」作為下一代CNN的演講?

TAG:深度学习DeepLearning | 自然语言处理 |