深度學習的Attention模型

前面看到谷歌發表的運用在機器翻譯上的論文《Attention is all you need》,非常讓人驚訝,這是一種全新的模型,與以前的經典的seq2seq模型改動較大,它徹底摒棄了RNN或CNN神經網絡,大大簡化了模型的複雜度,並且效果還至關好。固然Attention模型能夠單獨使用,但這篇文章咱們來看看Attention的機制及怎麼與經典的seq2seq結合。網絡

seq2seq

前面咱們有詳細的文章介紹了seq2seq的機制以及如何用TensorFlow來實現seq2seq。可到《深度學習的seq2seq模型》、《TensorFlow實現seq2seq》閱讀。學習

seq2seq模型結構基本都大同小異,下面用一種常見結構進行說明,咱們能夠看到decoder將不一樣時刻的輸入最後用一個狀態C來表示,encoder部分的不一樣時刻的輸出則爲=g(t,′ ,C ,且有′ =f(′ t,t,C ,能夠看到,不一樣時刻的輸入被編碼成C,而不一樣時刻的輸出與上一時刻的輸出、當前時刻的隱含狀態、編碼狀態C都相關,而當前時刻隱含狀態因爲上一時刻的隱含狀態、上個時刻輸出、編碼C相關。編碼

這裏寫圖片描述

seq2seq缺點

seq2seq模型是處理序列問題的大殺器,由它實現的encoder-decoder模型讓其在不少場景都發揮着強大的做用,獲得了很不錯的效果。但它也有本身的侷限性,被認爲最大限制了seq2seq能力的就在於編碼和解碼之間的惟一聯繫就是一個固定長度的語義向量C。atom

咱們能夠看到上面,encoder的不一樣時刻的輸入都被編碼成狀態C,這個即是語義向量。從這個角度去看,它將整個序列的信息壓縮到一個固定長度的向量中去了。對於短序列來講,這種作法可能問題不大,但若是是較長較複雜的隊列,則該語義向量可能沒法徹底表示整個序列的信息。並且先輸入的序列的信息會被後輸入的序列信息稀釋掉。輸入序列越長,這個現象就越嚴重。若是咱們獲得一個有損的語義編碼,那對後面的解碼也極可能會產生影響。spa

另外seq2seq模型通常會使用RNN,而RNN由於與上一時刻狀態相關,因此不能並行運算,效率低。但這是全部使用RNN的侷限性,除非不使用它。翻譯

Attention模型

爲了解決語義損失和信息稀釋的問題,提出了Attention模型,Attention即注意力,它是模擬了人類的視覺注意機制而來,好比當觀察某個畫面時,注意力聚焦到其中某一部分,其他部分則變得模糊。code

這裏寫圖片描述

按照圖,我們往下詳細看Attention模型怎麼與seq2seq結合。對於decoder,輸出爲牛肉板面的作法隊列

=g(t,′ ,C 圖片

這裏的C已經與前面說到的seq2seq的語義向量C不一樣了,已經再也不是將全部輸入進行編碼,下面會說到C怎麼計算。再看隱含狀態,get

′ =f(′ t,t,C

C向量計算公式爲,

=∑ x  j=tj  

咱們能夠將其中的a當作是各個時刻的輸出的不一樣時刻的輸入對應的權重,其實就可使用softmax來計算,它的計算公式爲,

t=exp(t)∑ x  k=exp(t)  

其中,

t=w(′ t,

這裏寫圖片描述

經過上面幾個公式就基本描述了seq2seq與Attention的結合,其中每一個輸出多了注意力向量參與,注意力的權重由上一時刻隱含狀態與encoder的各個輸入的隱含狀態共同決定。

在seq2seq模型上加上Attention模型,克服了語義損失和信息稀釋的問題,可是它也引入了額外的成本,對於m個輸入,n個輸出的結構中,Attention參數也達到了m*n的數量級。

相關文章
相關標籤/搜索