3.8 注意力模型-深度學習第五課《序列模型》-Stanford吳恩達教授

注意力模型 (Attention Model)

在上個視頻中你已經見到了,注意力模型如何讓一個神經網絡只注意到一部分的輸入句子。當它在生成句子的時候,更像人類翻譯。讓我們把這些想法轉化成確切的式子,來實現注意力模型。

在這裏插入圖片描述

跟上個視頻一樣,我們先假定有一個輸入句子,並使用雙向的RNN,或者雙向的GRU或者雙向的LSTM,去計算每個詞的特徵。實際上GRULSTM經常應用於這個,可能LSTM更經常一點。對於前向傳播(the forward occurrence),你有第一個時間步的前向傳播的激活值(a forward occurrence first time step),第一個時間步後向傳播的激活值,後向的激活值,以此類推。他們一共向前了五個時間步,也向後了五個時間步,技術上我們把這裏設置爲0。我們也可以後向傳播6次,設一個都是0的因子,實際上就是個都是0的因子。爲了簡化每個時間步的記號,即使你在雙向RNN已經計算了前向的特徵值和後向的特徵值,我就用 a<t>a^{<t>} 來一起表示這些聯繫。所以 a<t>a^{<t>} 就是時間步 tt 上的特徵向量。但是爲了保持記號的一致性,我們用第二個,也就是 tt\prime ,實際上我將用 tt\prime 來索引法語句子裏面的詞。接下來我們只進行前向計算,就是說這是個單向的RNN,用狀態 SS 表示生成翻譯。所以第一個時間步,它應該生成 y<1>y^{<1>} ,當你輸入上下文 CC 的時候就會這樣,如果你想用時間來索引它,你可以寫 C<1>C^{<1>} ,但有時候我就寫個 CC ,就是沒有上標的 CC ,這個會取決於注意力參數,即 a<1,1>a^{<1,1>}a<1,2>a^{<1,2>} 以此類推,告訴我們應該花多少注意力。同樣的,這個 α\alpha 參數告訴我們上下文有多少取決於我們得到的特徵,或者我們從不同時間步中得到的激活值。所以我們定義上下文的方式實際上來源於被注意力權重加權的不同時間步中的特徵值。於是更公式化的注意力權重將會滿足非負的條件,所以這就是個0或正數,它們加起來等於1。我們等會會見到我們如何確保這個成立,我們將會有上下文,或者說在 t=1t=1 時的上下文,我會經常省略上標,這就會變成對 tt\prime 的求和。這個權重的所有 tt\prime 的值,加上這些激活值。所以這裏的這項(上圖編號1所示)就是注意力權重,這裏的這項(上圖編號2)來自於這裏(上圖編號3),於是 a<t,t>a^{<t,t\prime>} 就是 y<t>y^{<t>} 應該在 tt\prime 時花在 α\alpha 上注意力的數量。換句話來說,當你在 tt 處生成輸出詞,你應該花多少注意力在第 tt\prime 個輸入詞上面,這是生成輸出的其中一步。然後下一個時間步,你會生成第二個輸出。於是相似的,你現在有了一個新的注意力權重集,再找到一個新的方式將它們相加,這就產生了一個新的上下文,這個也是輸入,且允許你生成第二個詞。只有現在才用這種方式相加,它會變成第二個時間步的上下文。即對 tt\primea<2,t>a^{<2,t\prime>} 進行求和,於是使用這些上下文向量, C<1>C^{<1>} 寫到這裏, C<2>C^{<2>} 也同理。這裏的神經網絡看起來很像相當標準的RNN序列,這裏有着上下文向量作爲輸出,我們可以一次一個詞地生成翻譯,我們也定義瞭如何通過這些注意力權重和輸入句子的特徵值來計算上下文向量。剩下唯一要做的事情就是定義如何計算這些注意力權重。讓我們下張幻燈片看看。

在這裏插入圖片描述

回憶一下 a<t,t>a^{<t,t\prime>} ,是你應該花費在 a<t>a^{<t\prime>} 上的注意力的數量,當你嘗試去生成第 tt 個輸出的翻譯詞,讓我們先把式子寫下來,再討論它是怎麼來的。這個式子你可以用來計算 a<t,t>a^{<t,t\prime>} ,在此之前我們要先計算 e<t,t>e^{<t,t\prime>},關鍵要用softmax,來確保這些權重加起來等於1。如果你對 tt\prime 求和,比如每一個固定的 tt 值,這些加起來等於1。如果你對 tt\prime 求和,然後優先使用softmax,確保這些值加起來等於1。

現在我們如何計算這些 ee 項,一種我們可以用的方式是用下面這樣的小的神經網絡,於是 s<t1>s^{<t-1>} 就是神經網絡在上個時間步的狀態,於是這裏我們有一個神經網絡,如果你想要生成 y<t>y^{<t>} ,那麼 s<t1>s^{<t-1>} 就是上一時間步的隱藏狀態,即 s<t>s^{<t>} 。這是給小神經網絡的其中一個輸入,也就是在神經網絡中的一個隱藏層,因爲你需要經常計算它們,然後 a<t>a^{<t\prime>} ,即上個時間步的的特徵是另一個輸入。直觀來想就是,如果你想要決定要花多少注意力在的激活值上。於是,似乎它會很大程度上取決於你上一個時間步的的隱藏狀態的激活值。你還沒有當前狀態的激活值,因爲上下文會輸入到這裏,所以你還沒計算出來,但是看看你生成上一個翻譯的RNN的隱藏狀態,然後對於每一個位置,每一個詞都看向他們的特徵值,這看起來很自然,即 a<t,t>a^{<t,t\prime>}e<t,t>e^{<t,t\prime>} 應該取決於這兩個量。但是我們不知道具體函數是什麼,所以我們可以做的事情就是訓練一個很小的神經網絡,去學習這個函數到底是什麼。相信反向傳播算法,相信梯度下降算法學到一個正確的函數。這表示,如果你應用這整個的模型,然後用梯度下降來訓練它,這是可行的。這個小型的神經網絡做了一件相當棒的事情,告訴你 y<t>y^{<t>} 應該花多少注意力 a<t>a^{<t>} 在上面,然後這個式子確保注意力權重加起來等於1,於是當你持續地一次生成一個詞,這個神經網絡實際上會花注意力在右邊的這個輸入句子上,它會完全自動的通過梯度下降來學習。

這個算法的一個缺點就是它要花費三次方的時間,就是說這個算法的複雜是 O(n3)O(n3) 的,如果你有 TxT_x 個輸入單詞和 TyT_y 個輸出單詞,於是注意力參數的總數就會是 TxTyT_x*T_y ,所以這個算法有着三次方的消耗。但是在機器翻譯的應用上,輸入和輸出的句子一般不會太長,可能三次方的消耗是可以接受,但也有很多研究工作,嘗試去減少這樣的消耗。那麼講解注意想法在機器翻譯中的應用,就到此爲止了。雖然沒有講到太多的細節,但這個想法也被應用到了其他的很多問題中去了,比如圖片加標題(image captioning),圖片加標題就是看一張圖,寫下這張圖的標題。底下的這篇論文來源於Kevin Chu,Jimmy Barr, Ryan Kiros, Kelvin Shaw, Aaron Korver, Russell Zarkutnov, Virta Zemo, 和 Andrew Benjo。他們也顯示了你可以有一個很相似的結構看圖片,然後,當你在寫圖片標題的時候,一次只花注意力在一部分的圖片上面。如果你感興趣,那麼我鼓勵你,也去看看這篇論文,做一些編程練習。

在這裏插入圖片描述
因爲機器翻譯是一個非常複雜的問題,在之前的練習中,你應用了注意力,在日期標準化的問題(the date normalization problem)上面,問題輸入了像這樣的一個日期,這個日期實際上是阿波羅登月的日期,把它標準化成標準的形式,或者這樣的日期。用一個序列的神經網絡,即序列模型去標準化到這樣的形式,這個日期實際上是威廉·莎士比亞的生日。一般認爲是這個日期正如你之前聯繫中見到的,你可以訓練一個神經網絡,輸入任何形式的日期,生成標準化的日期形式。其他可以做的有意思的事情是看看可視化的注意力權重(the visualizations of the attention weights)。這個一個機器翻譯的例子,這裏被畫上了不同的顏色,不同注意力權重的大小,我不想在這上面花太多時間,但是你可以發現,對應的輸入輸出詞,你會發現注意力權重,會變高,因此這顯示了當它生成特定的輸出詞時通常會花注意力在輸入的正確的詞上面,包括學習花注意在哪。 在注意力模型中,使用反向傳播時, 什麼時候學習完成。

這就是注意力模型,在深度學習中真的是個非常強大的想法。在本週的編程練習中,我希望你可以享受自己應用它的過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章