1. 程式人生 > 其它 >【自然語言處理】:seq2seq當中的Attention注意力機制

【自然語言處理】:seq2seq當中的Attention注意力機制

一.seq2seq機制

傳統的seq2seq機制在語言翻譯當中使用了兩個RNN,一個是encoder,將語言進行編碼,另一個是decoder,將我們的得到的語言編碼進行解碼,解碼的過程當中就可以對我們的語言進行翻譯成另外一種語言。其機制如下所示:

當然這種機制了,就會出現一定的問題,比如說我們的一個hidden layer就需要捕捉到整句話的所有資訊,但是實際上我們有些位於前面的一些資訊可能就會有所遺漏,同樣的,一些本來應該是比較重要的資訊,可能模型覺得並沒有那麼重要。

例如輸入的英文句子是:Tom chase Jerry,目標的翻譯結果是:湯姆追逐傑瑞。在未考慮注意力機制的模型當中,模型認為湯姆

這個詞的翻譯受到TomchaseJerry這三個詞的同權重的影響。但是實際上顯然不應該是這樣處理的,湯姆這個詞應該受到輸入的Tom這個詞的影響最大,而其它輸入的詞的影響則應該是非常小的。顯然,在未考慮注意力機制的 Encoder-Decoder 模型中,這種不同輸入的重要程度並沒有體現處理,一般稱這樣的模型為分心模型

因此我們引入注意力機制,也就是attention來改變這個現狀。

二.Attention注意力機制的原理

Attention is all you need 是 楊力坤的名言。我們來看看attention注意力機制具體是怎麼實現的。首先,我們將decoder的第一個hidden layer的值分別和encoder當中的每一個值進行相乘,也就是進行dot product,得到一個attention score。如下圖所示:

然後我們對這些dot product的結果使用softmax,得到一個概率分佈,眾所周知,softmax得到的概率只和為1. 而使用softmax之後的概率分佈,我們這裡稱之為attention distribution。我們發現這些第一個encoder unit的attention score經過softmax之後,其概率。說明當前我們的attention,注意力主要集中在了第一個encoder unit上。機器的主要注意力在於翻譯當前這個unit所對應的單詞。

然後我們對這個attention distribution使用weighted sum來計算當前encoder的hidden states作為一個我們的attention output,形成一個vector。應該就是將attention distribution的結果轉換成了一個vector。

然後我們將這個vector和attention作用於的那個decoder進行拼接,用這個拼接的結果來計算我們最後輸出的翻譯結果。

最後使用剛才的這個結果作為我們第二個hidden layer的一個輸入(一般可以這樣做)。然後再進行第二次attention,得到我們得二個hidden layer的預測結果為單詞:hit。然後依次重複這樣的過程,得到我們最後的翻譯結果。

最後的最後,我們對attention機制進行一個總結。

其中,我們的hidden states或者hidden layer可以稱之為h1,h2.....hN,然後我們通過dot product可以得到我們的一個attention score:et

將這個et放入softmax函式當中,得到attention distribution: at我們再使用這個at來計算weighted sum ,而這個weight是我們hidden state(layer)的一個權重(終於豁然開朗,知道這個weighted sum怎麼來的了!)

最後進行組合和拼接(左右互相拼接,不是上下),就得到了我們的預測值啦!具體公式如下圖所示:

,