本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 : Attn: Illustrated Attention 作者 | Raimi Karim 翻譯 | yata 校對(duì) | 鄧普斯·杰弗 審核 | 醬番梨 整理 | Pita https:///attn-illustrated-attention-5ec4ad276ee3
Kalchbrenner and Blunsom (2013), Sutskever et. al (2014) 和Cho. et. al (2014b)等人,作為先驅(qū)首先提出了神經(jīng)機(jī)器翻譯框架,之后由Sutskever 等人提出了更廣為人知的序列到序列模型。我們這篇文章將基于序列到序列的框架,以及如何在此框架上構(gòu)建attention機(jī)制,來展開講解。
在序列到序列模型中,其主要的思想在于使用兩個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)構(gòu)建一個(gè)編碼器-解碼器的結(jié)構(gòu):首先以其中一個(gè)RNN為構(gòu)成的編碼器,按時(shí)間順序一個(gè)一個(gè)讀入輸入的文字,之后便可以得到一個(gè)固定維度的向量;在這些輸入的基礎(chǔ)上,由另一個(gè)RNN構(gòu)成的解碼器按照時(shí)間順序再進(jìn)行一個(gè)一個(gè)的解碼,從而得到最后的翻譯。我們的解釋借鑒了[5]。 Fig. 0.2: 輸入序列長(zhǎng)度為64的序列到序列框架 序列到序列模型的主要問題在于,編碼器的最后一個(gè)隱層狀態(tài)(見Fig.0.1中的兩個(gè)紅色節(jié)點(diǎn)),作為唯一的信息輸入到解碼器中來。而這最后一個(gè)隱層狀態(tài)向量就好像是全部輸入的一個(gè)數(shù)值匯總。所以當(dāng)輸入的文字很長(zhǎng)時(shí)(Fig.0.2),僅僅利用一個(gè)匯總向量(期望他可以充分的總結(jié)輸入序列的所有信息),便希望可以輸出一個(gè)合理的翻譯文本,便顯得有些不合理,因?yàn)閰R總向量的表達(dá)能力的受限,這必然會(huì)導(dǎo)致對(duì)輸入文本災(zāi)難性的"遺忘"。這就好比給你一個(gè)由一百多個(gè)單詞組成的段落,然后希望你可以在閱讀完最后一個(gè)詞之后,立馬給出這個(gè)段落的翻譯,你可以做到嗎? 如果我們都做不到,我們也不應(yīng)該奢求解碼器能夠做到。那么我們?yōu)楹尾豢紤]讓解碼器使用編碼器部分每一個(gè)時(shí)刻的隱層狀態(tài),而不是單單只是使用編碼器部分最后一個(gè)隱層狀態(tài),這樣子我們應(yīng)該會(huì)得到更好的翻譯文本。這就要引入attention機(jī)制了。 Fig 0.3:在編碼器和解碼器中間加入attention機(jī)制。這里,在給出第一個(gè)翻譯詞匯之前,解碼器就已經(jīng)從解碼器得到了第一個(gè)時(shí)間步長(zhǎng)的輸入信息(初始化狀態(tài))。 注意力作為編碼器和解碼器之間的接口,負(fù)責(zé)將編碼器部分每一個(gè)時(shí)刻的隱狀態(tài)提供給解碼器(其中不包括在Fig.0.3中的標(biāo)紅的隱狀態(tài))。在這樣的設(shè)定下,模型才有能力去聚焦在輸入序列中有用的部分,并且從中學(xué)到輸入文本與輸出翻譯文本之間的對(duì)齊(alignment)。這對(duì)于模型有效的處理長(zhǎng)輸入句子十分有效。 定義:對(duì)齊 對(duì)齊的意思是將原始輸入文本中的片段與他們對(duì)應(yīng)輸出的翻譯文本片段,進(jìn)行匹配。 Fig.0.3:法文"la"與輸入序列之間的對(duì)齊分布在輸入序列中各個(gè)單詞上,但是主要在其中四個(gè)單詞:"the","European","Economic"和"Area"。連線的顏色越深表示attention的score越大。 在[2]中的介紹我們可以直到,這里有種形式的attention.一種是,使用編碼器的所有隱層狀態(tài),我們稱其為全局attention。相對(duì)的,只使用編碼器隱層狀態(tài)的子集來計(jì)算attention,我們將其稱為局部attention。在這篇文章中,我們討論的是全局attention。其中提到attention時(shí)大家就默認(rèn)為全局attention. 在這篇文章中,我們使用動(dòng)畫的形式進(jìn)行對(duì)attention的工作原理進(jìn)行總結(jié),所以大家再也不用對(duì)著論文或者資料里的各種數(shù)學(xué)表達(dá)式發(fā)愁了。同時(shí)作為例證,我將介紹在過去五年里發(fā)表的四種神經(jīng)機(jī)器翻譯的框架。并且我將在文章中為對(duì)其中的一些概念理論進(jìn)行直觀推斷式的講解,所以大家要注意這些講解哦。 目錄 1.Attention:綜述 2.Attention:例子 3.總結(jié) 附錄:attention分?jǐn)?shù)計(jì)算方法 1.Attention:綜述 在我們討論attention如何使用之前,首先允許我使用直觀理解的方式,解釋如何將序列到序列模型運(yùn)用到翻譯任務(wù)上。 直觀理解:序列到序列模型 一名翻譯員從頭到尾的讀一段德語文本,一旦他讀完這段文本,便開始將其逐詞的翻譯為英文。當(dāng)這段文本很長(zhǎng)時(shí),他極有可能在翻譯過程中已經(jīng)忘記了這段文本之前的段落。 當(dāng)然,上面我們說的只是一個(gè)簡(jiǎn)單的序列到序列模型。下面我將帶大家厘清在序列到序列+attention模型中attention層中計(jì)算的具體步驟。在這之前,讓我們首先對(duì)模型有一個(gè)直觀理解。 直觀理解:序列到序列+attention 一名翻譯員從頭到尾去讀一段德語文本,只是在讀的過程中,會(huì)記下來文本中涉及到的關(guān)鍵詞。這樣在之后翻譯工作時(shí),他可以在翻譯每個(gè)德語單詞時(shí)借鑒他在之前已經(jīng)記下的關(guān)鍵詞。 attention通過向不同的單詞賦予不同的分?jǐn)?shù)來表征 不同的關(guān)注程度。之后,將這些得到的分?jǐn)?shù)經(jīng)過softmax層(從而拿到歸一化的權(quán)重),這樣我們就可以將編碼器階段所有的隱層狀態(tài)經(jīng)過加權(quán)和得到一個(gè)上下文向量。attention層具體的實(shí)現(xiàn)可以分解為如下四個(gè)步驟。 Step 0:準(zhǔn)備隱層狀態(tài) 我們要首先準(zhǔn)備好decoder的(當(dāng)前)隱層狀態(tài)(紅色)和所有可以拿到的編碼器隱層狀態(tài)(綠色)。在我們的例子中,我們有4個(gè)編碼器隱層狀態(tài)和一個(gè)當(dāng)前解碼器隱層狀態(tài)。
Step 1: 獲得對(duì)每個(gè)編碼器隱層狀態(tài)的分?jǐn)?shù) 分?jǐn)?shù)(標(biāo)量)可以通過分?jǐn)?shù)函數(shù)(或者叫做對(duì)齊分?jǐn)?shù)函數(shù)[2]或者對(duì)齊模型)得到。在這個(gè)例子中,我們使用解碼器和編碼器隱層狀態(tài)之間的點(diǎn)積作為我們的分?jǐn)?shù)計(jì)算函數(shù)。 附錄A中給了不同的分?jǐn)?shù)計(jì)算函數(shù)。
Step 2 : 將所有的分?jǐn)?shù)值通過一個(gè)softmax層 我們將這些分?jǐn)?shù)通過一個(gè)softmax層,這樣我們可以得到對(duì)應(yīng)的加起來為1的值。這些經(jīng)過了softmax層的分?jǐn)?shù)代表了[3,10]的注意力分布。
Step 3: 將每個(gè)編碼器隱狀態(tài)乘以softmax層之后的分?jǐn)?shù)值 通過將每個(gè)編碼器的隱層狀態(tài)乘上對(duì)應(yīng)的softmax之后的分?jǐn)?shù)值,我們就可以得到對(duì)齊向量[2]或者叫做標(biāo)注向量[1]。這就是對(duì)齊的機(jī)制。
Step 4: 將所有的對(duì)齊向量相加 將所有的對(duì)齊向量相加即可得到最終的上下文向量[1,2]。一個(gè)上下文向量相當(dāng)于是之前所有步驟中的對(duì)齊向量的聚合信息。
(輸入解碼器的)方式由我們的框架設(shè)計(jì)所決定。之后我們將在Section 2a,2b,和2c中通過例子介紹這些框架如何在解碼器部分使用上下文向量信息。
下面是整個(gè)動(dòng)態(tài)的過程。
直觀理解:attention到底是如何有效的 答案:反向傳播,驚喜嗎?反向傳播會(huì)盡其可能的去讓輸出接近真實(shí)答案。它需要去不斷的調(diào)整RNN網(wǎng)絡(luò)中的權(quán)值以及對(duì)應(yīng)的函數(shù)方程中的權(quán)值,如果有需要的話。這些權(quán)重會(huì)去影響編碼器的隱層狀態(tài)和解碼器的隱層狀態(tài),從而間接的去影響attention的分?jǐn)?shù)。 2. Attention:例子 我們?cè)谥暗恼鹿?jié)中已經(jīng)了解了序列到序列和序列到序列+attention兩種框架。在下一小節(jié)中,我們將詳細(xì)的去了解3個(gè)在序列到序列基礎(chǔ)上運(yùn)用attention機(jī)制的神經(jīng)機(jī)器翻譯模型。為了讓大家更為完整的了解(他們的具體性能),我將附上他們的雙語評(píng)估分?jǐn)?shù)(BLEU)--一種在真實(shí)序列基礎(chǔ)上評(píng)價(jià)合成序列的指標(biāo)。 2a. Bahdanau 等(2015)[1] 這種attention的計(jì)算實(shí)現(xiàn)是基礎(chǔ)attention計(jì)算的來源之一。作者在論文題目"Neural Machine Translation by Learning to Jointly Align and Translate"中用了"align"(對(duì)齊)這和詞,以此來表示在訓(xùn)練模型時(shí)去調(diào)整跟分?jǐn)?shù)直接相關(guān)的權(quán)重。下面是對(duì)此框架的一些要點(diǎn)總結(jié): 1.編碼器是由雙向(前向+反向)的門限循環(huán)單元(BiGRU)。解碼器是由一個(gè)單向的GRU組成,它的初始化狀態(tài)是由編碼器的反向GRU的最后一個(gè)隱層狀態(tài)變換而來。(這一點(diǎn)沒有在下面的圖中體現(xiàn)) 2.attention層分?jǐn)?shù)的計(jì)算方式是 加/串聯(lián) 3.機(jī)器碼器下一個(gè)時(shí)刻的輸入是由上一步解碼器的輸出(粉色)和當(dāng)前時(shí)刻的上下文向量(深綠)串聯(lián)。
作者在WMT14英-法數(shù)據(jù)集上BLEU值達(dá)到了26.75。 直觀理解:由雙向編碼器組成的序列到序列模型+attention機(jī)制 譯者A像之前我們說的那樣邊讀邊寫下關(guān)鍵詞。譯者B(他屬于高級(jí)譯者,有可以從后往前讀文章并可以進(jìn)行翻譯的能力)從最后一個(gè)詞開始從后往前閱讀,并且也做關(guān)鍵詞的記錄。這樣兩個(gè)人會(huì)不斷的討論他們閱讀到的內(nèi)容,一旦閱讀完整段德語文本,譯者B被要求依據(jù)他們之前討論的內(nèi)容以及他們共同整理的關(guān)鍵詞,將德文逐詞的翻譯為英文。 譯者A是前向RNN,譯者B是反向RNN。 2b. Luong等(2015)[2] Effective Approaches to Attention-based Neural Machine Translation的作者將Bahdanau等的框架進(jìn)行了泛化,并且進(jìn)行了簡(jiǎn)化。下面我們看下它的主要結(jié)構(gòu): 1.編碼器是一個(gè)兩層的長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(LSTM)。解碼器也有著相同的網(wǎng)絡(luò)框架,同時(shí)它的隱狀態(tài)的初始化來自編碼器的最后一個(gè)隱層狀態(tài)。 2.他們?cè)趯?shí)驗(yàn)過的分?jǐn)?shù)方程有(i)加/串聯(lián),(ii)點(diǎn)乘,(iii)基于位置的 和(iv)一般化的。 3.當(dāng)前時(shí)刻解碼器的最終輸出(粉色),由當(dāng)前時(shí)刻解碼器部分的輸出(譯者注:解碼器部分LSTM的輸出或隱層狀態(tài))和當(dāng)前時(shí)刻計(jì)算得到的上下文向量進(jìn)行串聯(lián),之后經(jīng)過一層全連接網(wǎng)絡(luò)得到。
此模型在WMT15 英語-法語數(shù)據(jù)集上BLEU分?jǐn)?shù)達(dá)到了25.9. 直觀理解:帶有兩層(LSTM)堆疊編碼器的序列到序列模型 + attention 譯者A從前至后閱讀德語文本,并寫下遇到的關(guān)鍵詞。同樣的,譯者B(比譯者A的級(jí)別要高)同樣閱讀這段德語文本,并且記下關(guān)鍵詞。注意在這個(gè)過程中,譯者A每讀一個(gè)詞就向譯者A進(jìn)行匯報(bào)。當(dāng)文本閱讀結(jié)束后。兩位譯者會(huì)基于他們之前共同得到的關(guān)鍵詞進(jìn)行逐詞的翻譯。 2c. 谷歌的神經(jīng)機(jī)器翻譯模型(GNMT)[9] 我們中的大多數(shù)應(yīng)該都曾經(jīng)以各種形式使用過谷歌翻譯,所以我覺得十分有必要來討論2016年實(shí)現(xiàn)的谷歌神經(jīng)機(jī)器翻譯系統(tǒng)。GNMT是我們看到的前兩個(gè)例子的結(jié)合(深受第一個(gè)例子[1]的啟發(fā))。 1.編碼器部分由八層LSTM堆疊而成,其中第一層是雙向的(雙向的輸出進(jìn)行串聯(lián)),并且從第三層開始會(huì)進(jìn)行連續(xù)的殘差連接。解碼器部分由8層單向的LSTM堆疊而組成。 2.分?jǐn)?shù)計(jì)算函數(shù)使用的 加/串聯(lián),和文獻(xiàn)[1]一樣。 3.同樣的,和文獻(xiàn)[1]相同,解碼器當(dāng)前時(shí)刻的輸入由上一個(gè)時(shí)刻解碼器的輸出(粉色)和當(dāng)前時(shí)刻的上下文向量(深綠)串聯(lián)而得。
該模型在WMT14英-法數(shù)據(jù)庫上BLEU分?jǐn)?shù)達(dá)到了38.95,在WMT14英-德數(shù)據(jù)庫上BLEU的值達(dá)到了24.17. 直觀理解:GNMT--有八層LSTM堆疊而成編碼器的序列到序列模型(+雙向+殘差連接)+attention 八個(gè)譯者依次坐好,順序是從A到B直到H。每個(gè)譯者都讀著相同的德語文本。在每個(gè)詞上,譯者A向譯者B分享他的發(fā)現(xiàn),譯者B會(huì)改善得到的信息并將它分享給譯者C,重復(fù)這樣的過程直到告訴譯者H。同樣的,譯者H會(huì)在讀這段德文文本時(shí),基于它獲得的信息寫下相關(guān)的關(guān)鍵詞。 一旦每個(gè)人都讀完了這段德文文本,譯者A會(huì)被告知去翻譯第一個(gè)詞。首先他開始回想,然后他將他的答案分享給B,B改進(jìn)答案后分享給C,重復(fù)這個(gè)過程直到傳遞給了H。然后譯者H會(huì)基于他得到的答案和之前記錄下的關(guān)鍵詞,寫下第一個(gè)翻譯出來的單詞。他會(huì)重復(fù)這個(gè)過程直到整個(gè)翻譯內(nèi)容結(jié)束。 3. 總結(jié) 這里我們對(duì)你在這篇文章里見過的所有架構(gòu)做一個(gè)快速的總結(jié)。 有雙向編碼器的序列到序列模型 + attention 以上就是所有的內(nèi)容。在下一篇博客中,我將為你講述什么是self-attention,并且講述它是怎樣應(yīng)用到谷歌的Transformer和self-Attention對(duì)抗神經(jīng)網(wǎng)絡(luò)模型上的。請(qǐng)密切關(guān)注我的空間! 附錄:分?jǐn)?shù)函數(shù) 下面是Lilian Weng編輯的分?jǐn)?shù)函數(shù)中的一部分。加/串聯(lián) 和 點(diǎn)乘在這篇文章中已經(jīng)被提及。其中包含了點(diǎn)乘操作(點(diǎn)乘,余弦距離等)的分?jǐn)?shù)函數(shù),其主旨是為了度量?jī)蓚€(gè)向量之間的相似性。對(duì)于使用前饋神經(jīng)網(wǎng)絡(luò)的分?jǐn)?shù)函數(shù),其主旨是對(duì)翻譯譯文的對(duì)齊權(quán)重進(jìn)行建模。
References [1] Neural Machine Translation by Jointly Learning to Align and Translate (Bahdanau et. al, 2015) [2] Effective Approaches to Attention-based Neural Machine Translation (Luong et. al, 2015) [3] Attention Is All You Need (Vaswani et. al, 2017) [4] Self-Attention GAN (Zhang et. al, 2018) [5] Sequence to Sequence Learning with Neural Networks (Sutskever et. al, 2014) [6] TensorFlow's seq2seq Tutorial with Attention (Tutorial on seq2seq+attention) [7] Lilian Weng's Blog on Attention (Great start to attention) [8] Jay Alammar's Blog on Seq2Seq with Attention (Great illustrations and worked example on seq2seq+attention) [9] Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation (Wu et. al, 2016) Related Articles on Deep Learning Animated RNN, LSTM and GRU Line-by-Line Word2Vec Implementation (on word embeddings) Step-by-Step Tutorial on Linear Regression with Stochastic Gradient Descent 10 Gradient Descent Optimisation Algorithms + Cheat Sheet Counting No. of Parameters in Deep Learning Models 想要繼續(xù)查看本篇文章相關(guān)鏈接和參考文獻(xiàn)? 長(zhǎng)按鏈接點(diǎn)擊打開或點(diǎn)擊【注意力的動(dòng)畫解析(以機(jī)器翻譯為例)】: https://ai./page/TextTranslation/1460 AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng)) CVPR 2018 最牛逼的十篇論文 深度學(xué)習(xí)目標(biāo)檢測(cè)算法綜述 迷你自動(dòng)駕駛汽車深度學(xué)習(xí)特征映射的可視化 在2018年用"笨辦法"學(xué)數(shù)據(jù)科學(xué)體會(huì)分享 等你來譯: 如何在神經(jīng)NLP處理中引用語義結(jié)構(gòu) (Python)用Mask R-CNN檢測(cè)空閑車位 高級(jí)DQNs:利用深度強(qiáng)化學(xué)習(xí)玩吃豆人游戲 深度強(qiáng)化學(xué)習(xí)新趨勢(shì):谷歌如何把好奇心引入強(qiáng)化學(xué)習(xí)智能體 |
|