????????上節(jié)已經(jīng)了解注意力模型如何讓一個(gè)神經(jīng)網(wǎng)絡(luò)只注意到一部分的輸入句子譬圣,當(dāng)它在生成句子的時(shí)候瓮恭,更像人類翻譯。
????????下面詳細(xì)講解注意力模型
????????假定有一個(gè)輸入句子厘熟,使用雙向RNN或雙向的GRU或雙向的LSTM屯蹦,去計(jì)算每個(gè)詞的特征,實(shí)際上GRU和LSTM經(jīng)常應(yīng)用于這個(gè)绳姨,可能LSTM更經(jīng)常一點(diǎn)登澜。對于第一步,有第一個(gè)時(shí)間步的前向傳播的激活值飘庄,第一個(gè)時(shí)間步后向傳播的激活值脑蠕。然后是第二個(gè)時(shí)間步的前向傳播激活值,后向的激活值跪削,以此類推谴仙。一共向前了五個(gè)時(shí)間步,也向后了五個(gè)時(shí)間步碾盐。技術(shù)上我們把最開頭設(shè)置為0晃跺,也可以后向傳播6次。設(shè)一個(gè)都是0的因子廓旬,實(shí)際上就是個(gè)都是0的因子哼审。
????????為了簡化每個(gè)時(shí)間步的記號谐腰,使用a<t>一起表示前向的特征值和后向的特征值,所以a<t>就是時(shí)間步t上的特征向量涩盾。為了保持符號的一致性十气,用t’來表示法語句子里的詞。接下來我們只進(jìn)行前向計(jì)算春霍,就是單向的RNN砸西,用狀態(tài)S表示生成翻譯。第一個(gè)時(shí)間步生成y<1>址儒,當(dāng)輸入上下文C<1>的時(shí)候會這樣芹枷。C會取決于注意力參數(shù),即α<1,1>莲趣、α<1,2>……鸳慈,告訴我們上下文C有多少取決于我們得到的特征,或者從不同時(shí)間步中得到的激活值喧伞。所以我們定義上下文的方式實(shí)際上來源于被注意力權(quán)重除權(quán)的不同時(shí)間步中的特征值走芋。所以更公式化的注意力權(quán)重將會滿足非負(fù)的條件,會是0或正數(shù)潘鲫,他們加起來等于1翁逞。所以α<t,t’>就是y<t>應(yīng)該在t’時(shí)花在a<t’>上注意力的數(shù)量。換句話說溉仑,當(dāng)你在t處生成輸出詞挖函,你應(yīng)該花多少注意力在第t’個(gè)輸入詞上面。這是生成輸出的其中一步浊竟,然后下一個(gè)時(shí)間步會生成第二個(gè)輸出怨喘,于是相似的,現(xiàn)在有了一個(gè)新的注意力權(quán)重集逐沙,再找到一個(gè)新的方式將他們相加哲思,即產(chǎn)生了一個(gè)新的上下文C。
????????這樣的神經(jīng)網(wǎng)絡(luò)看起來很像相當(dāng)標(biāo)準(zhǔn)的RNN序列吩案,這里有著上下文向量作為輸出棚赔,可以一次一個(gè)詞地生成翻譯。我們也定義了如何通過注意力權(quán)重和輸入句子的特征值來計(jì)算上下文向量徘郭。剩下唯一要做的事就是如何通過計(jì)算定義這些注意力權(quán)重:
????????α<t,t’>就是y<t>應(yīng)該在t’時(shí)花在a<t’>上注意力的數(shù)量靠益,為了嘗試生成第t個(gè)輸出的翻譯詞。上圖的式子用來計(jì)算α<t,t’>残揉,所以需要先計(jì)算e<t,t’>胧后,關(guān)鍵要用softmax來確保這些權(quán)重加起來等于1。對于每個(gè)固定的t值抱环,對t’求和都等于1壳快。如何計(jì)算這些e項(xiàng)呢纸巷?
????????一種可用的方法是用這種小的神經(jīng)網(wǎng)絡(luò)(上圖中左下角)。這里有一個(gè)神經(jīng)網(wǎng)絡(luò)(上圖右側(cè))眶痰,如果想生成y<t>瘤旨,s<t-1>就是上一時(shí)間步的隱藏狀態(tài)。s<t-1>是小神經(jīng)網(wǎng)絡(luò)的其中一個(gè)輸入竖伯,也就是在神經(jīng)網(wǎng)絡(luò)中的一個(gè)隱藏層存哲,需要經(jīng)常計(jì)算他們。另一個(gè)輸入a<t’>是時(shí)間步的特征七婴,直觀來想就是想要決定要花多少注意力在t’的激活值上祟偷。于是似乎它會很大程度上取決于你上一個(gè)時(shí)間步的隱藏狀態(tài)的激活值,此時(shí)還沒有當(dāng)前狀態(tài)的激活值打厘,因?yàn)樯舷挛臅斎氲竭@里修肠,所以還沒計(jì)算出來。但是看看生成上一個(gè)翻譯的RNN的隱藏狀態(tài)婚惫,然后對于每一個(gè)位置氛赐,每一個(gè)詞都看向他們的特征值。即α<t,t’>和e<t,t’>應(yīng)該取決于這兩個(gè)量:s<t-1>和a<t’>先舷。但是我們不知道具體的函數(shù)是什么,所以可以做的事就是訓(xùn)練一個(gè)很小對的神經(jīng)網(wǎng)絡(luò)滓侍,去學(xué)習(xí)這個(gè)函數(shù)到底是什么蒋川。相信反向傳播算法,相信梯度下降算法撩笆,學(xué)到一個(gè)正確的函數(shù)捺球。這表示如果你應(yīng)用整個(gè)模型,然后應(yīng)梯度下降法來訓(xùn)練它夕冲,是可行的氮兵。這個(gè)小型的神經(jīng)網(wǎng)絡(luò)做了一件相當(dāng)棒的事情,告訴你y<t>應(yīng)該花多少注意力在a<t’>上面歹鱼,然后這個(gè)式子確保注意力權(quán)重相加=1泣栈,一次生成一個(gè)詞。右邊的神經(jīng)網(wǎng)絡(luò)將會花注意力在輸入句子上弥姻,它會完全自動地通過梯度下降來學(xué)習(xí)南片。
????????這個(gè)算法的一個(gè)缺點(diǎn)就是它要花費(fèi)三次方的時(shí)間,即算法復(fù)雜度為O(n*n*n)庭敦。如果有Tx個(gè)輸入單詞和Ty個(gè)輸出單詞疼进,注意力參數(shù)的總數(shù)就會是Tx*Ty,這個(gè)算法有著三次方的消耗秧廉。但是在機(jī)器翻譯的應(yīng)用上伞广,輸入和輸出的句子一般不會太長拣帽,可能三次方的消耗是可以接受的。但也有很多研究工作嘗試去減少這樣的消耗嚼锄。
????????注意力想法除了在機(jī)器翻譯中應(yīng)用诞外,現(xiàn)在也被應(yīng)用到其他很多問題中,比如圖片加標(biāo)題灾票,即給一張圖片峡谊,自動生成標(biāo)題】裕可以用一個(gè)很相似的結(jié)構(gòu)既们,看圖片然后在寫圖片標(biāo)題的時(shí)候一次只花注意力在一部分的圖片上面。