2017-06-21 28 views

回答

1

Neural Machine Translation by Jointly Learning to Align and Translate他們給(Bahdanau)注意機制的描述;基本上會發生什麼是你計算的標量「對齊分數」a_1, a_2, ..., a_n,它表明你的編碼輸入序列的每個元素在給定的時刻是多麼重要(即在當前時間步中你應該注意哪一部分輸入句子)。

假設您要「注意」/「注視」的(編碼的)輸入序列是一個表示爲e_1, e_2, ..., e_n的矢量序列,給定時間步的上下文向量是所有這些的加權和你對準成績:

context = c := (a_1*e_1) + (a_2*e_2) + ... + (a_n*e_n)

(記住a_k的是標量;如果你的模型,你可以認爲這是一個‘平均出’信/字在你的句子---那麼理想訓練得很好,上下文看起來與你最想要注意的e_i最相似,但是與你有一點相似之處e_{i-1}e_{i+1}等直覺上,認爲「塗出」輸入組件,如果讓任何意義......)

無論如何,如果attention_layer_sizeNone,那麼它指定一個隱藏單元的數量解碼器中的前饋層,用於將此上下文向量與解碼器內部RNN單元的輸出混合以獲得關注值。如果attention_layer_size == None,它只是使用上面的上下文向量作爲注意值,並且不會混合內部RNN單元的輸出。 (當我說「混合」時,我的意思是將上下文向量和RNN單元格的輸出連接起來,然後投影到您通過設置attention_layer_size指定的維度。)

實現的相關部分位於this line並且具有描述它是如何計算的。

希望有幫助!

+0

這非常有幫助!如果我可以問兩個後續問題,(1)是否有推薦的attention_layer_size? (2)你能否提供一些關於何時使用連接和投影以及何時使用上下文向量的直覺? –

+0

我已經將'attention_layer_size'設置爲數百個隱藏單位的順序,並取得了良好的效果,但它依賴於手邊的任務(我通常會首先嚐試先裝備大量隱藏單元,然後將其最小化直到它達到儘可能低的水平,同時保持驗證集性能良好)。 FWIW,在神經機器翻譯論文中,我認爲其中有數百種(混合實際上比前饋NN更像是一個矩陣投影,因爲沒有激活;我略微錯誤地指出)。 我通常會同時使用上下文和RNN輸出。 – ptsw

+0

好的,謝謝!我正努力將我的序列調試到序列模型。既然聽起來你有這方面的經驗,我可以給你發電子郵件嗎? –