論文筆記:Attention
來自專欄 NLP 論文筆記5 人贊了文章
論文鏈接:Neural Machine Translation by Jointly Learning to Align and Translate
一句話解釋 Attention:mlp + softmax
一、模型提出的背景
在之前介紹的 encoder-decoder 和 seq2seq 中,都是將輸入的序列編碼成一個固定長度的 vector,再對它進行解碼。這樣會有一個性能瓶頸,特別是在句子長度大於訓練的語料句長度時。於是,論文在原來的模型基礎上,提出了 attention 機制。
原有的模型是通過中間的固定長度的向量 C,將 source 和 target 連接起來的;
本文的模型,則是通過 attention,將 source 和 target 鏈接起來。
二、模型的流程
1,編碼:使用雙向的循環神經網路
如圖 1 下面的框框,具體的流程是使用一個前向 RNN 和一個後面 RNN。
前向 RNN 正序讀取輸入(X 從 1 到 T),如,讀取 X1,得到 h1(->)。
後向 RNN 逆序讀取輸入(X 從 T 到 1),如,讀取 X1,得到 h1(<-)。
然後將 h1(->) 和 h1(<-) 拼接到一起,得到 h1。就是一個完整的編碼過程。
2,解碼過程
第一篇 encoder-decoder 的模型大概是圖 3 這個樣子。其中 y 是上一時刻的輸出,s 是當前時間的隱藏狀態,c 是中間向量。
論文中唯一的不同點是將中間的固定長度的向量 c 換成了由 attention 得到的向量 c(i),如圖 4 所示。
其中的 c(i) 的計算過程如圖 5:
其實是一個 「mlp + softmax + 加權求和」 的過程(圖 5 從下往上看)。
其中的 i 表示第 i 個輸出,j 表示第 j 個輸入,s 表示編碼和的隱藏狀態,a 表示激活函數。
可以看到,e(ij)、a(ij)、c(i) 反映了輸入 hj 相對於先前的輸出隱藏狀態 s(i-1) 在決定下一狀態 s(i) 和產生 y(i) 時的重要性。直觀上看,這實現了解碼器中的注意力機制。
這裡我有個疑問:decoder 的初始隱藏狀態 s0 和 初始輸出 y0 是啥?
三、後記
可以看到,在 softmax 的公式中,分母每次都是除以所有的輸入,這將會造成相當大的計算量。所以又有人提出了 attention 優化。相關的論文將在今晚或者明天會去看。
這篇筆記我覺得寫得比較簡單吧,寫的都是我自己的理解。不知道我有沒有把流程講清楚。。
參考鏈接
NLP 筆記 - Neural Machine Translation
神經網路機器翻譯Neural Machine Translation(2): Attention Mechanism
推薦閱讀:
※機器學習演算法:邏輯回歸
※交叉熵、相對熵及KL散度通俗理解
※直觀理解正則化
※SVM問題定義、推導
※如何用Python和機器學習訓練中文文本情感分類模型?
TAG:深度學習DeepLearning | 機器學習 | 自然語言處理 |