0
本文作者: AI研習社-譯站 | 2019-02-18 10:22 |
本文為 AI 研習社編譯的技術博客,原標題 :
Attn: Illustrated Attention
作者 | Raimi Karim
翻譯 | yata 校對 | 鄧普斯?杰弗
審核 | 醬番梨 整理 | Pita
原文鏈接:
https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3
近十年以來,直到神經(jīng)機器翻譯系統(tǒng)的誕生之前,統(tǒng)計機器翻譯一直在機器翻譯領域占據(jù)著主要地位。神經(jīng)機器翻譯模型作為一種新興的機器翻譯方法,其致力于構建并訓練出一個可以輸入文本并返回翻譯文本的大型神經(jīng)網(wǎng)絡。
Kalchbrenner and Blunsom (2013), Sutskever et. al (2014) 和Cho. et. al (2014b)等人,作為先驅(qū)首先提出了神經(jīng)機器翻譯框架,之后由Sutskever 等人提出了更廣為人知的序列到序列模型。我們這篇文章將基于序列到序列的框架,以及如何在此框架上構建attention機制,來展開講解。
Fig. 0.1: 輸入序列長度為4的序列到序列的框架
在序列到序列模型中,其主要的思想在于使用兩個循環(huán)神經(jīng)網(wǎng)絡構建一個編碼器-解碼器的結(jié)構:首先以其中一個RNN為構成的編碼器,按時間順序一個一個讀入輸入的文字,之后便可以得到一個固定維度的向量;在這些輸入的基礎上,由另一個RNN構成的解碼器按照時間順序再進行一個一個的解碼,從而得到最后的翻譯。我們的解釋借鑒了[5]。
Fig. 0.2: 輸入序列長度為64的序列到序列框架
序列到序列模型的主要問題在于,編碼器的最后一個隱層狀態(tài)(見Fig.0.1中的兩個紅色節(jié)點),作為唯一的信息輸入到解碼器中來。而這最后一個隱層狀態(tài)向量就好像是全部輸入的一個數(shù)值匯總。所以當輸入的文字很長時(Fig.0.2),僅僅利用一個匯總向量(期望他可以充分的總結(jié)輸入序列的所有信息),便希望可以輸出一個合理的翻譯文本,便顯得有些不合理,因為匯總向量的表達能力的受限,這必然會導致對輸入文本災難性的“遺忘”。這就好比給你一個由一百多個單詞組成的段落,然后希望你可以在閱讀完最后一個詞之后,立馬給出這個段落的翻譯,你可以做到嗎?
如果我們都做不到,我們也不應該奢求解碼器能夠做到。那么我們?yōu)楹尾豢紤]讓解碼器使用編碼器部分每一個時刻的隱層狀態(tài),而不是單單只是使用編碼器部分最后一個隱層狀態(tài),這樣子我們應該會得到更好的翻譯文本。這就要引入attention機制了。
Fig 0.3:在編碼器和解碼器中間加入attention機制。這里,在給出第一個翻譯詞匯之前,解碼器就已經(jīng)從解碼器得到了第一個時間步長的輸入信息(初始化狀態(tài))。
注意力作為編碼器和解碼器之間的接口,負責將編碼器部分每一個時刻的隱狀態(tài)提供給解碼器(其中不包括在Fig.0.3中的標紅的隱狀態(tài))。在這樣的設定下,模型才有能力去聚焦在輸入序列中有用的部分,并且從中學到輸入文本與輸出翻譯文本之間的對齊(alignment)。這對于模型有效的處理長輸入句子十分有效。
定義:對齊
對齊的意思是將原始輸入文本中的片段與他們對應輸出的翻譯文本片段,進行匹配。
Fig.0.3:法文"la"與輸入序列之間的對齊分布在輸入序列中各個單詞上,但是主要在其中四個單詞:"the","European","Economic"和"Area"。連線的顏色越深表示attention的score越大。
在[2]中的介紹我們可以直到,這里有種形式的attention.一種是,使用編碼器的所有隱層狀態(tài),我們稱其為全局attention。相對的,只使用編碼器隱層狀態(tài)的子集來計算attention,我們將其稱為局部attention。在這篇文章中,我們討論的是全局attention。其中提到attention時大家就默認為全局attention.
在這篇文章中,我們使用動畫的形式進行對attention的工作原理進行總結(jié),所以大家再也不用對著論文或者資料里的各種數(shù)學表達式發(fā)愁了。同時作為例證,我將介紹在過去五年里發(fā)表的四種神經(jīng)機器翻譯的框架。并且我將在文章中為對其中的一些概念理論進行直觀推斷式的講解,所以大家要注意這些講解哦。
目錄
1.Attention:綜述
2.Attention:例子
3.總結(jié)
附錄:attention分數(shù)計算方法
1.Attention:綜述
在我們討論attention如何使用之前,首先允許我使用直觀理解的方式,解釋如何將序列到序列模型運用到翻譯任務上。
直觀理解:序列到序列模型
一名翻譯員從頭到尾的讀一段德語文本,一旦他讀完這段文本,便開始將其逐詞的翻譯為英文。當這段文本很長時,他極有可能在翻譯過程中已經(jīng)忘記了這段文本之前的段落。
當然,上面我們說的只是一個簡單的序列到序列模型。下面我將帶大家厘清在序列到序列+attention模型中attention層中計算的具體步驟。在這之前,讓我們首先對模型有一個直觀理解。
直觀理解:序列到序列+attention
一名翻譯員從頭到尾去讀一段德語文本,只是在讀的過程中,會記下來文本中涉及到的關鍵詞。這樣在之后翻譯工作時,他可以在翻譯每個德語單詞時借鑒他在之前已經(jīng)記下的關鍵詞。
attention通過向不同的單詞賦予不同的分數(shù)來表征 不同的關注程度。之后,將這些得到的分數(shù)經(jīng)過softmax層(從而拿到歸一化的權重),這樣我們就可以將編碼器階段所有的隱層狀態(tài)經(jīng)過加權和得到一個上下文向量。attention層具體的實現(xiàn)可以分解為如下四個步驟。
Step 0:準備隱層狀態(tài)
我們要首先準備好decoder的(當前)隱層狀態(tài)(紅色)和所有可以拿到的編碼器隱層狀態(tài)(綠色)。在我們的例子中,我們有4個編碼器隱層狀態(tài)和一個當前解碼器隱層狀態(tài)。
Fig.1.0 準備關注
Step 1: 獲得對每個編碼器隱層狀態(tài)的分數(shù)
分數(shù)(標量)可以通過分數(shù)函數(shù)(或者叫做對齊分數(shù)函數(shù)[2]或者對齊模型)得到。在這個例子中,我們使用解碼器和編碼器隱層狀態(tài)之間的點積作為我們的分數(shù)計算函數(shù)。
附錄A中給了不同的分數(shù)計算函數(shù)。
Fig. 1.1:分數(shù)獲得
在上面這個例子中,我們在編碼器隱層狀態(tài)[5, 0, 1]中得到了較高的分數(shù),這意味著下一個要翻譯的單詞將較大的收到這個隱層狀態(tài)的影響。
Step 2 : 將所有的分數(shù)值通過一個softmax層
我們將這些分數(shù)通過一個softmax層,這樣我們可以得到對應的加起來為1的值。這些經(jīng)過了softmax層的分數(shù)代表了[3,10]的注意力分布。
Fig.1.2 softmaxed 分數(shù)
我們可以看到,在經(jīng)過了softmax的分數(shù)score^,attention按我們的預期只分布在[5, 0, 1]上。實際上,這些數(shù)應該是0到1之間的浮點數(shù)而不是0和1的二值數(shù)。
Step 3: 將每個編碼器隱狀態(tài)乘以softmax層之后的分數(shù)值
通過將每個編碼器的隱層狀態(tài)乘上對應的softmax之后的分數(shù)值,我們就可以得到對齊向量[2]或者叫做標注向量[1]。這就是對齊的機制。
Fig. 1.3: Get the alignment vectors
這里我們可以看到除了[5, 0, 1]之外的其他隱層狀態(tài)都因為其分數(shù)小的原因降至0。這意味著我們可以認為第一個被翻譯出的單詞應該匹配著輸入單詞中的[5,0,1]編碼向量。
Step 4: 將所有的對齊向量相加
將所有的對齊向量相加即可得到最終的上下文向量[1,2]。一個上下文向量相當于是之前所有步驟中的對齊向量的聚合信息。
Fig. 1.4: Get the context vector
Step 5: 將上下文向量輸入解碼器部分
(輸入解碼器的)方式由我們的框架設計所決定。之后我們將在Section 2a,2b,和2c中通過例子介紹這些框架如何在解碼器部分使用上下文向量信息。
Fig. 1.5: Feed the context vector to decoder
下面是整個動態(tài)的過程。
Fig. 1.6: Attention
直觀理解:attention到底是如何有效的
答案:反向傳播,驚喜嗎?反向傳播會盡其可能的去讓輸出接近真實答案。它需要去不斷的調(diào)整RNN網(wǎng)絡中的權值以及對應的函數(shù)方程中的權值,如果有需要的話。這些權重會去影響編碼器的隱層狀態(tài)和解碼器的隱層狀態(tài),從而間接的去影響attention的分數(shù)。
2. Attention:例子
我們在之前的章節(jié)中已經(jīng)了解了序列到序列和序列到序列+attention兩種框架。在下一小節(jié)中,我們將詳細的去了解3個在序列到序列基礎上運用attention機制的神經(jīng)機器翻譯模型。為了讓大家更為完整的了解(他們的具體性能),我將附上他們的雙語評估分數(shù)(BLEU)——一種在真實序列基礎上評價合成序列的指標。
2a. Bahdanau 等(2015)[1]
這種attention的計算實現(xiàn)是基礎attention計算的來源之一。作者在論文題目"Neural Machine Translation by Learning to Jointly Align and Translate"中用了"align"(對齊)這和詞,以此來表示在訓練模型時去調(diào)整跟分數(shù)直接相關的權重。下面是對此框架的一些要點總結(jié):
1.編碼器是由雙向(前向+反向)的門限循環(huán)單元(BiGRU)。解碼器是由一個單向的GRU組成,它的初始化狀態(tài)是由編碼器的反向GRU的最后一個隱層狀態(tài)變換而來。(這一點沒有在下面的圖中體現(xiàn))
2.attention層分數(shù)的計算方式是 加/串聯(lián)
3.機器碼器下一個時刻的輸入是由上一步解碼器的輸出(粉色)和當前時刻的上下文向量(深綠)串聯(lián)。
Fig. 2a: NMT from Bahdanau et. al. Encoder is a BiGRU, decoder is a GRU.
作者在WMT14英-法數(shù)據(jù)集上BLEU值達到了26.75。
直觀理解:由雙向編碼器組成的序列到序列模型+attention機制
譯者A像之前我們說的那樣邊讀邊寫下關鍵詞。譯者B(他屬于高級譯者,有可以從后往前讀文章并可以進行翻譯的能力)從最后一個詞開始從后往前閱讀,并且也做關鍵詞的記錄。這樣兩個人會不斷的討論他們閱讀到的內(nèi)容,一旦閱讀完整段德語文本,譯者B被要求依據(jù)他們之前討論的內(nèi)容以及他們共同整理的關鍵詞,將德文逐詞的翻譯為英文。
譯者A是前向RNN,譯者B是反向RNN。
2b. Luong等(2015)[2]
Effective Approaches to Attention-based Neural Machine Translation的作者將Bahdanau等的框架進行了泛化,并且進行了簡化。下面我們看下它的主要結(jié)構:
1.編碼器是一個兩層的長短時記憶網(wǎng)絡(LSTM)。解碼器也有著相同的網(wǎng)絡框架,同時它的隱狀態(tài)的初始化來自編碼器的最后一個隱層狀態(tài)。
2.他們在實驗過的分數(shù)方程有(i)加/串聯(lián),(ii)點乘,(iii)基于位置的 和(iv)一般化的。
3.當前時刻解碼器的最終輸出(粉色),由當前時刻解碼器部分的輸出(譯者注:解碼器部分LSTM的輸出或隱層狀態(tài))和當前時刻計算得到的上下文向量進行串聯(lián),之后經(jīng)過一層全連接網(wǎng)絡得到。
Fig. 2b: NMT from Luong et. al. Encoder is a 2 layer LSTM, likewise for decoder.
此模型在WMT15 英語-法語數(shù)據(jù)集上BLEU分數(shù)達到了25.9.
直觀理解:帶有兩層(LSTM)堆疊編碼器的序列到序列模型 + attention
譯者A從前至后閱讀德語文本,并寫下遇到的關鍵詞。同樣的,譯者B(比譯者A的級別要高)同樣閱讀這段德語文本,并且記下關鍵詞。注意在這個過程中,譯者A每讀一個詞就向譯者A進行匯報。當文本閱讀結(jié)束后。兩位譯者會基于他們之前共同得到的關鍵詞進行逐詞的翻譯。
2c. 谷歌的神經(jīng)機器翻譯模型(GNMT)[9]
我們中的大多數(shù)應該都曾經(jīng)以各種形式使用過谷歌翻譯,所以我覺得十分有必要來討論2016年實現(xiàn)的谷歌神經(jīng)機器翻譯系統(tǒng)。GNMT是我們看到的前兩個例子的結(jié)合(深受第一個例子[1]的啟發(fā))。
1.編碼器部分由八層LSTM堆疊而成,其中第一層是雙向的(雙向的輸出進行串聯(lián)),并且從第三層開始會進行連續(xù)的殘差連接。解碼器部分由8層單向的LSTM堆疊而組成。
2.分數(shù)計算函數(shù)使用的 加/串聯(lián),和文獻[1]一樣。
3.同樣的,和文獻[1]相同,解碼器當前時刻的輸入由上一個時刻解碼器的輸出(粉色)和當前時刻的上下文向量(深綠)串聯(lián)而得。
Fig. 2c: Google’s NMT for Google Translate. Skip connections are denoted by curved arrows. *Note that the LSTM cells only show the hidden state and input; it does not show the cell state input.
該模型在WMT14英-法數(shù)據(jù)庫上BLEU分數(shù)達到了38.95,在WMT14英-德數(shù)據(jù)庫上BLEU的值達到了24.17.
直觀理解:GNMT——有八層LSTM堆疊而成編碼器的序列到序列模型(+雙向+殘差連接)+attention
八個譯者依次坐好,順序是從A到B直到H。每個譯者都讀著相同的德語文本。在每個詞上,譯者A向譯者B分享他的發(fā)現(xiàn),譯者B會改善得到的信息并將它分享給譯者C,重復這樣的過程直到告訴譯者H。同樣的,譯者H會在讀這段德文文本時,基于它獲得的信息寫下相關的關鍵詞。
一旦每個人都讀完了這段德文文本,譯者A會被告知去翻譯第一個詞。首先他開始回想,然后他將他的答案分享給B,B改進答案后分享給C,重復這個過程直到傳遞給了H。然后譯者H會基于他得到的答案和之前記錄下的關鍵詞,寫下第一個翻譯出來的單詞。他會重復這個過程直到整個翻譯內(nèi)容結(jié)束。
3. 總結(jié)
這里我們對你在這篇文章里見過的所有架構做一個快速的總結(jié)。
序列到序列模型
序列到序列模型 + attention
有雙向編碼器的序列到序列模型 + attention
有兩層(lstm)堆疊編碼器的序列到序列模型 + attention
GNMT-有八層堆疊編碼器的序列到序列模型(+ 雙向 + 殘差)+attention。
以上就是所有的內(nèi)容。在下一篇博客中,我將為你講述什么是self-attention,并且講述它是怎樣應用到谷歌的Transformer和self-Attention對抗神經(jīng)網(wǎng)絡模型上的。請密切關注我的空間!
附錄:分數(shù)函數(shù)
下面是Lilian Weng編輯的分數(shù)函數(shù)中的一部分。加/串聯(lián) 和 點乘在這篇文章中已經(jīng)被提及。其中包含了點乘操作(點乘,余弦距離等)的分數(shù)函數(shù),其主旨是為了度量兩個向量之間的相似性。對于使用前饋神經(jīng)網(wǎng)絡的分數(shù)函數(shù),其主旨是對翻譯譯文的對齊權重進行建模。
Fig. A0: Summary of score functions
Fig. A1: Summary of score functions. (Image source)
[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)
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ù)查看本篇文章相關鏈接和參考文獻?
長按鏈接點擊打開或點擊【注意力的動畫解析(以機器翻譯為例)】:
https://ai.yanxishe.com/page/TextTranslation/1460
AI研習社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。