作者 | 蘑菇先生
來源 | NewBeeNLP
頭圖 | CSDN下載自視覺中國
目前深度學習中熱點之一就是注意力機制(Attention Mechanisms)。Attention源於人類視覺系統,當人類觀察外界事物的時候,一般不會把事物當成一個整體去看,往往傾向於根據需要選擇性的去獲取被觀察事物的某些重要部分,比如我們看到一個人時,往往先Attend到這個人的臉,然後再把不同區域的信息組合起來,形成一個對被觀察事物的整體印象。
「同理,Attention Mechanisms可以幫助模型對輸入的每個部分賦予不同的權重,抽取出更加關鍵及重要的信息,使模型做出更加準確的判斷,同時不會對模型的計算和存儲帶來更大的開銷,這也是Attention Mechanism應用如此廣泛的原因」,尤其在Seq2Seq模型中應用廣泛,如機器翻譯、語音識別、圖像釋義(Image Caption)等領域。Attention既簡單,又可以賦予模型更強的辨別能力,還可以用於解釋神經網絡模型(例如機器翻譯中輸入和輸出文字對齊、圖像釋義中文字和圖像不同區域的關聯程度)等。
本文主要圍繞核心的Attention機制以及Attention的變體展開。
Seq2Seq Model
Attention主要應用於Seq2Seq模型,故首先簡介一下Seq2Seq模型。Seq2Seq模型目標是學習一個輸入序列到輸出序列的映射函數。應用場景包括:機器翻譯(Machine translation)、自動語音識別(Automatic speech recognition)、語音合成(Speech synthesis)和手寫體生成(Handwriting generation)。
Seq2Seq模型奠基性的兩個工作如下:
NIPS2014:Sequence to Sequence Learning with Neural Networks[1]
該論文介紹了一種基於RNN(LSTM)的Seq2Seq模型,基於一個Encoder和一個Decoder來構建基於神經網絡的End-to-End的機器翻譯模型,其中,Encoder把輸入編碼成一個固定長度的上下文向量,Decoder基於 「上下文向量」和 「目前已解碼的輸出」,逐步得到完整的目標輸出。這是一個經典的Seq2Seq的模型,但是卻存在 「兩個明顯的問題」:
- 把輸入的所有信息有壓縮到一個固定長度的隱向量,忽略了輸入的長度,當輸入句子長度很長,特別是比訓練集中所有的句子長度還長時,模型的性能急劇下降(Decoder必須捕捉很多時間步之前的信息,雖然本文使用LSTM在一定程度上能夠緩解這個問題)。
- 把輸入編碼成一個固定的長度過程中,對於句子中每個詞都賦予相同的權重,這樣做是不合理的。比如,在機器翻譯里,輸入的句子與輸出句子之間,往往是輸入一個或幾個詞對應於輸出的一個或幾個詞。因此,對輸入的每個詞賦予相同權重,這樣做沒有區分度,往往使模型性能下降。
注意上圖中Encoder得到的上下文向量 「僅用於作為Decoder的第一個時間步的輸入」。
Decoder的另一個輸入是前一時刻的單詞 ,需要注意的是,在訓練階段 是 「真實label」(需要embedding一下),而不是上一時刻的預測值。而在測試階段,則是上一時刻的預測值(具體使用時需要藉助beam-search來得到最優翻譯序列)。
但是實際訓練過程中, 「label是否使用真實數據2種方式,可以交替進行」,即一種是把標準答案作為Decoder的輸入,還有一種是把Decoder上一次的輸出的結果作為輸入,因為如果完全使用標準答案,會導致收斂的過快,導致測試的時候不穩定。
另外,上述輸入輸出中的每個單詞,都要藉助 「embedding」技術。
EMNLP2014:Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation[2]
和NIPS2014幾乎同時發表,思想也是一樣的。只不過在這篇文章中,作者提出了一種新的RNN Cell,即GRU代替LSTM來構建Seq2Seq模型。
還有一點不同的是,Encoder得到的上下文向量會作用於Decoder 「每一個時間步」的預測。
總結起來:RNN-based Encoder-Decoder Framework,目標是預測 ,其中 都是one-hot向量。
「Encoder」
給定輸入,,將其編碼為上下文向量 .
是LSTM或GRU,是時間步 的單詞的one-hot表示,先經過embedding矩陣 嵌入後作為RNN在 時刻的輸入,是 時間步的encode;是時間步 的encode。
是上下文向量,是關於 的函數。是輸入的最大長度。最簡單的,,即最後一個時間步得到的encode作為上下文向量。
「Decoder」
Decoder在給定上下文向量 以及已經預測的輸出 條件下,預測下一個輸出 。換句話說,Decoder將輸出 上的聯合分布分解為有序條件分布 (ordered conditionals):
其中,,是輸出的最大長度。
使用RNN,每個條件分布可以寫成下式:
是輸出詞的one-hot向量(全連接+softmax激活後得到),是前一時刻已經預測的輸出詞的one-hot向量,先經過 embedding後再作為 的輸入。是一個非線性函數(e.g., 全連接+softmax),輸出關於 的機率分布。(,是LSTM/GRU)是RNN的隱藏層狀態。(注意,不是RNN提取隱藏層狀態的LSTM或GRU,而是隱藏層後面接的全連接層或其他非線性函數,LSTM或GRU提取的Decoder隱狀態和上下文向量以及已經預測的輸出都將作為 的輸入,用於預測機率分布)。
Attention
如上文所述,傳統的Seq2Seq模型對輸入序列缺乏區分度,存在明顯的兩大問題。因此,有大牛提出使用Attention機制來解決問題。下面將按照Attention的不同類型重點介紹一些Attention上的研究工作。
Basic Attention
本小節介紹最傳統和基礎的Attention模型的應用。首先直觀感受下Attention機制的一個示意動圖。
Machine Translation
ICLR2015: Neural Machine Translation by Jointly Learning to Align and Translate[3]
這是ICLR2015提出的文章,機器翻譯的典型方法。作者在RNN Encoder-Decoder框架上,引入了Attention機制來同時進行翻譯和對齊。使用bidirectional RNN作為Encoder,Decoder會在翻譯的過程中通過模擬搜索源句子focus到不同部位上來進行更準確的解碼。模型示意圖如下:
首先將Decoder中的條件機率寫成下式:
其中,一般使用softmax全連接層(或多加幾層,輸入的3個向量concat到一起後進行Feed Forward),是Decoder中RNN在時間步 的隱狀態,根據如下LSTM或GRU函數計算得到:
是關於前一時刻Decoder端隱狀態 ,前一時刻已經預測的輸出 的embedding表示 以及該時刻 的上下文向量 的函數。是LSTM或GRU。
注意,和已有的encoder-decoder不同,這裡的條件機率對「每一個目標單詞」都需要有一個「不同的」上下文向量 。
而上下文向量 取決於Encoder端輸入序列encode後的RNN隱狀態 (bidirectional RNN,因此 包含了輸入句子 位置周圍的信息,)
而每一個權重 使用softmax轉換為機率分布:
而 是輸出 和輸入 的對齊模型(alignment model),衡量了輸入位置 周圍的信息和輸出位置 的匹配程度。
得分依賴於Decoder端 時刻的「前一時刻的隱狀態」和Encoder端 時刻的隱狀態。文中使用前饋神經網絡學習對齊模型,並且和其他組件聯合學習,實際上學到的是soft alignment,因此可以很容易應用梯度反向傳播。
總之,可以理解為衡量了輸出單詞 和輸入單詞 的對齊程度,而 是 時刻,所有encode隱狀態根據該對齊程度得到的期望上下文向量,是所有對齊情況下的期望。衡量了在計算下一個decoder隱狀態 和預測 過程中,相對於前一個decoder隱狀態 ,不同 的重要性程度。這一「Decoder中的」注意力機制使得只需要關注源句子部分的信息,而不是像此前工作中非要將源句子「所有的信息」都編碼成固定長度的上下文向量來用。
Image Caption
ICML2015: Show, Attend and Tell- Neural Image Caption Generation with Visual Attention[4]
Kelvin Xu等人在該論文中將Attention引入到Image Caption中。Image Caption是一種場景理解的問題,這是視覺領域重要的一個研究方向。場景理解的難點在於既要進行物體識別,又要理解物體之間的關係。這相當於要讓機器擁有模仿人類將大量顯著的視覺信息壓縮為描述性語言的能力。
模型包括兩個部分:Encoder和Decoder。其中,Encoder會使用CNN提取圖片低層特徵;Decoder會在RNN中引入注意力機制,將圖片特徵解碼為自然語言語句。模型總的示意圖如下:
如上圖,模型把圖片經過CNN網絡,變成特徵圖。LSTM的RNN結構在此上運行Attention模型,最後得到描述。
「目標:」 輸入一個圖像,輸出該圖像的描述 ,其中 是詞典詞彙的數量,是詞的one-hot表示向量,是描述的長度。
「Encoder」
在encoder端,模型使用CNN來提取L個D維vector,每一個都對應圖像的一個區域(這裡粗體表示向量):
在原論文中,原始圖像先經過center cropped變為 的圖像,然後經過卷積和pooling操作,共4次max pooling,最後得到 的feature map,feature map個數共512個,即512個通道。這裡 對應的就是196個區域數量,每個區域都是原始圖像經過下採樣得到的,因此可以通過4次上採樣能夠恢復原始圖像中對應區域。而 ,即每個區域的向量化表示是由所有的feature map相應位置數值構造而成。
與此前的工作使用Softmax層之前的那一層vector作為圖像特徵不同,本文所提取的這些vector來自於 「low-level 的卷積層,這使得Decoder可以通過從所有提取到的特徵集中,選擇一個子集來聚焦於圖像的某些部分」。這樣子就有點像NLP里的seq2seq任務了,這裡的輸入從詞序列轉變成了圖像區域vector的序列。作為類比,圖像上的 個區域(平展開為196)就相當於句子的長度(單詞的數量 );每個區域的D維向量化表示是由D個Filter提取的該區域的特徵concat在一起形成的向量,類比於句子每個單詞的embedding經過RNN提取的「隱狀態向量」。
上下文向量 計算如下:
即,在給定一組提取到的圖像不同區域的向量表示 ,以及不同區域相應的權重 條件下,計算上下文向量,最簡單的方式是使用上文所述的加權和來處理。本文使用了兩種Attention Mechanisms,即Soft Attention和Hard Attention。我們之前所描述的傳統的Attention Mechanism就是Soft Attention。Soft Attention是參數化的(Parameterization),因此可導,可以被嵌入到模型中去,直接訓練,梯度可以經過Attention Mechanism模塊,反向傳播到模型其他部分。相反,Hard Attention是一個隨機的過程,根據 隨機採樣。Hard Attention不會選擇整個encoder的輸出做為其輸入,Hard Attention會依機率來採樣輸入端的隱狀態一部分來進行計算,而不是整個encoder的隱狀態。為了實現梯度的反向傳播,需要採用蒙特卡洛採樣的方法來估計模塊的梯度。
而權重 的計算,作者引入了一個Attention模型,實際上就是上篇文章MT任務中的對齊模型。
是當前要預測的「輸出詞」的位置,是輸入詞的位置。
「Decoder」
使用LSTM來解碼並生成描述詞序列,LSTM結構單元如下:
具體LSTM的計算:(可以發現如何將 融入到LSTM中的,實際上就是多一個線性變換,再全部加起來)
第一個式子實際上是四個式子,分別得到輸入門、遺忘門、輸出門和被輸入門控制的候選向量。其中,三個門控由sigmoid激活,得到的是元素值皆在 0 到 1 之間的向量,可以將門控的值視作保留機率;候選向量由tanh激活,得到的是元素值皆在-1到1之間的向量。是仿射變換,在上式也就是要對最右邊的三項進行加權求和,可以將T理解為分塊矩陣。最右邊的三個式子,其中 是「輸出詞的embedding matrix」,是one-hot詞表示,用來lookup,得到dense詞向量表示。是前一時刻的decoder狀態,是LSTM真正意義上的「輸入」,代表的是捕捉了特定區域視覺信息的上下文向量,既然它和時刻 有關,就說明它是一個動態變化的量,在不同的時刻將會捕捉到與本時刻相對應的「相關圖像區域」。這個量將由attention機制計算。
第二個式子是更新舊的記憶單元,element-wise 的運算表示三個門控將對各自控制的向量的每個元素做「取捨」:0 到 1 分別代表完全拋棄到完全保留。第三個式子是得到隱狀態。
有了隱狀態,就可以計算詞表中各個詞的機率值,那麼取機率最大的那個作為當前時刻生成的詞,並將作為下一時刻的輸入。其實就是softmax全連接層(兩層MLPs+softmax)。是單詞的數量。
原論文中還有一些比較有意思的Trick。
- 解碼的輸出:模型生成的一句caption被表示為各個詞的one-hot編碼所構成的集合,輸出的caption y表示為:
是字典的單詞個數,是句子長度。的形式為 ,即只有第處位置為1,其它位置為0。
RNN建模時,會用在embedding,將稀疏one-hot向量轉成dense的embedding向量。模型的輸出機率 會用於擬合真實的 。
- LSTM初始輸入:
LSTM中的記憶單元與隱藏單元的初始值,是兩個不同的多層感知機,采用所有特徵區域的平均值來進行預測的:
- 圖像的encode:
文中使用VGGnet作為encoder進行編碼,且不進行finetuning。encoder得到 的feature maps。因此decoder處理的是flattened()。
- Caption的Decode:
在decode時,由於模型每次更新所需要的時間正比於最長的句子,如果隨機採樣句子進行解碼,訓練時間會很長。為了解決這個問題,文中會在預處理環節,將句子按照長度分組。每次更新時,隨機採樣一個長度,然後使用相應的分組內的句子進行訓練,這樣就能顯著提高運行效率。
個人覺得輸出詞的embedding matrix也可以使用word2vec預訓練好的詞向量代替,文中沒提到。
Speech Recognition
NIPS2015: Attention-Based Models for Speech Recognition[5]
給定一個英文的語音片段作為輸入,輸出對應的音素序列。Attention機制被用於對輸出序列的每個音素和輸入語音序列中一些特定幀進行關聯。
Entailment
ICLR2016: Reasoning about Entailment with Neural Attention[6]
語義蘊含,句子關係推斷方面的早期工作,也是採用了基本的Attention模型。給定一個用英文描述的前提和假設作為輸入,輸出假設與前提是否矛盾、是否相關或者是否成立。舉個例子:前提:在一個婚禮派對上拍照;假設:有人結婚了。該例子中的假設是成立的。Attention機制被用於關聯假設和前提描述文本之間詞與詞的關係。
Text Summarization
EMNLP2015: A Neural Attention Model for Sentence Summarization[7]
給定一篇英文文章作為輸入序列,輸出一個對應的摘要序列。Attention機制被用於關聯輸出摘要中的每個詞和輸入中的一些特定詞。
參考資料:
[1]Sequence to Sequence Learning with Neural Networks:
https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf
[2]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation:
https://www.aclweb.org/anthology/D14-1179
[3]ICLR2015: Neural Machine Translation by Jointly Learning to Align and Translate:
https://arxiv.org/pdf/1409.0473.pdf
[4]ICML2015: Show, Attend and Tell- Neural Image Caption Generation with Visual Attention:
https://arxiv.org/pdf/1502.03044.pdf
[5]NIPS2015: Attention-Based Models for Speech Recognition:
https://arxiv.org/pdf/1506.07503.pdf
[6]ICLR2016: Reasoning about Entailment with Neural Attention:
https://arxiv.org/pdf/1509.06664.pdf
[7]EMNLP2015: A Neural Attention Model for Sentence Summarization:
https://www.aclweb.org/anthology/D/D15/D15-1044.pdf
文章來源: https://twgreatdaily.com/zh-tw/FFvoxHUBdHeNs4oxN0gp.html