注意力機制(Attention)已經成為深度學習必學內容之一,無論是計算機視覺還是自然語言處理都可以看到各種各樣注意力機制的方法。之前我們曾在一篇干貨文章《關于深度學習中的注意力機制,這篇文章從實例到原理都幫你參透了》中,從實例到原理幫助大家參透注意力機制的工作原理。今天,我們將再度為大家梳理全部理論要點,是大家學習的必備資料之一,并為后續掌握最新流行的注意力機制保駕護航。
在本篇博客中,作者不僅概述了注意力機制是如何被創造出來的,也詳細探討了時下最流行的注意力機制相關的方法和模型,比如Transformer、SNAIL、神經圖靈機(Neural Turing Machines)以及自注意力生成對抗網絡(SAGAN),一度成為不少學習者的參考資料。
該篇博客結構如下:
序列到序列(Seq2Seq)模型究竟有什么問題?
為翻譯而生
定義
注意力機制模型家族
歸納總結
自注意力機制(Self-attention)
Soft & Hard Attention
Global & Local Attention
神經圖靈機
讀寫機制
注意力機制
指針網絡(Pointer Network)
Transformer
Key, Value and Query
多頭自注意力機制(Multi-Head Self-Attention)
編碼器(Encoder)
解碼器(Decoder)
完整的結構
SNAIL
自注意力生成對抗網路(Self-Attention GAN)
參考
在某種程度上,注意力取決于我們如何對圖像的不同區域進行視覺注意或將一個句子中的單詞關聯起來。
以圖1 中的柴犬圖為例。
圖1 一只可愛的柴犬穿著一件人類的外套。該圖片來自于Instagram @mensweardog
人類的視覺注意力機制使我們能夠以一種“高分辨率”的形式關注到圖像的某個區域(例如當你觀察圖中黃色框標注的狗耳朵的時候),而同時以一種“低分辨率”的形式感知著周圍的圖像(例如這個時候你的余光中雪的背景,還有柴犬所穿的外套的樣子),然后調整眼睛所關注的焦點或者相應地進行推斷。
如果將圖像扣掉一小塊,我們也可以根據圖像中其余的內容線索推測出被扣掉的內容究竟是什么。比如可以推測出被黃色框扣掉的內容是一個尖尖的耳朵,因為我們看到了一個狗的鼻子,右邊另一個尖尖的耳朵以及柴犬的神秘眼神(圖中紅色框所示的內容)。對于耳朵的預測,底部的毛衣和毯子就不如上述狗的特征有用。
類似的,我們同樣可以解釋,一個句子或近似語境中單詞之間的關系。在一句話中,當我們看到“吃”這個單詞的時候,我們很快就會遇到一個食物詞(apple)。雖然顏色術語(green)描述了食物,但可能跟“吃”之間沒有直接的關系。
圖2 同一個句子當中,不同詞之間具有不同的關系
簡而言之,深度學習中的注意力機制可以被廣義地定義為一個描述重要性的權重向量:通過這個權重向量為了預測或者推斷一個元素,比如圖像中的某個像素或句子中的某個單詞,我們使用注意力向量定量地估計出目標元素與其他元素之間具有多么強烈的相關性,并由注意力向量的加權和作為目標的近似值。
序列到序列(Seq2Seq)模型究竟有什么問題?
seq2seq模型最早是在2014年由Sutskever提出的,他主要針對的是語言模型。從廣義上來講,它的目的是將輸入序列(源序列)轉換成一個新的序列(目標序列),而且兩個序列的長度可以是任意的。轉換任務包括文本或者語音上的多語種機器翻譯,問答對話的生成或者生成句子的語法樹等任務。
seq2seq模型通常具有一種編碼器-解碼器(encoder-decoder)結構,由下面兩部分構成:
Encoder:編碼器處理輸入序列,然后將其中包含的信息壓縮成固定長度的上下文向量(context vector),上下文向量也可以叫做句子嵌入(sentence embedding)。這種表示方式可以用來對一整個句子的含義做出一個很好的總結。
Decoder:利用Encoder產生的上下文向量來初始化解碼器以產生變換后的輸出序列。早期的工作僅僅使用編碼器網絡的最后狀態作為解碼器的初始狀態。
編碼器和解碼器都可以是遞歸神經網絡,例如使用LSTM和GRU單元。
圖3 encoder-decoder模型,用來將“she is eating a green apple”翻譯成中文,圖中是對編碼器和解碼器隨著時間步而展開的可視化效果
這種固定長度的上下文向量設計的一個關鍵的和明顯的缺點在于,它無法記住很長的句子,對很長的時序信息來說,一旦它完成了對整個序列的處理,它通常會忘記最開始的部分,從而丟失很多有用的信息。因此,在2015年Bahdanau等人為了解決長時依賴問題,提出了注意力機制。
為翻譯而生
注意力機制的誕生,最開始是為了幫助神經機器翻譯(NMT)記住較長的源句。注意力機制的秘方在于,它建立了一個上下文向量與整個源句之間的快捷方式,而不只是通過編碼器最后一步的隱層狀態來生成上下文向量。這些快捷方式的連接權重是根據每個輸出元素自適應計算出來的。
既然上下文向量可以訪問到整個句子中的每個單詞,那我們根本不用擔心之前的信息會被遺忘。源序列和目標序列之間的對齊(alignment)就通過這個上下文向量來學習和控制,從本質上講,要計算上下文向量需要三個必要信息:
編碼器的隱含層狀態
解碼器的隱含層狀態
源和目標序列之間的對齊方式
圖4 加入注意力機制的encoder-decoder模型(Bahdanau等人,2015)
定義
現在讓我們以科學的方式來定義神經機器翻譯系統中引入的注意力機制。比方說,我們有一個長度為n的源序列x,并嘗試輸出長度為m的目標序列y:
(加粗的變量代表他們是一個向量,本博客中所有情況相同)
這里的編碼器是雙向LSTM(或者其他你認為合適的遞歸神經網絡),前向的隱含層狀態定義為,后向的隱含層狀態定義為
。將兩種表示簡單地串聯起來構成編碼器的整個隱含層狀態表示。這種表示方法意在描述當前單詞的時候包含有它之前和之后詞的釋義。
解碼器網絡對于第t時刻的輸出單詞的隱含層狀態可以表示為, 其中上下文向量
是輸入序列的隱含層狀態的加權和,權重由對齊函數計算得來:
對齊函數得到的分數是根據第i個位置的輸入和第t個位置的輸出對
得來的,它衡量了二者的匹配程度。
的集合衡量了輸出關注到多少源序列的隱層狀態。在Bahdanau的文章中,對齊分數
的參數由一個前饋神經網絡參數化,其輸入僅僅是輸入序列和輸出序列的隱含層狀態,這個模型跟整體模型的其它部分一起參與訓練,從而學到所謂的注意力權重。因此對齊分數函數的定義如下面所示,給定tanh作為非線性激活函數:
其中和
是可學習的參數,作為整體模型參數的一部分參與到訓練的過程當中。
對齊分數矩陣是一個很好的副產品,它可以很好的顯示出源單詞和目標單詞之間的相關性。
圖5 對齊分數矩陣,表現了源句法語“L’accord sur l’Espace économique européen a été signé en ao?t 1992”到目標語句英語“The agreement on the European Economic Area was signed in August 1992”翻譯的單詞之間相關性的結果。
點擊下面鏈接可以獲得具體的實施方法,這是Tensorflow團隊提供的一份優秀的教程。
https://www.tensorflow.org/versions/master/tutorials/seq2seq
注意力機制模型家族
有了注意力機制,源序列和目標序列的依賴關系再也不需要二者之間的相對距離了!有了機器翻譯領域上巨大的進展,注意力機制在包括計算機視覺(Xu et al.2015)在內的其它領域也都隨之有了廣泛的應用,研究者們也相繼探索出各種不同的注意力機制模型以適用于不同的應用場合(Luong, et al., 2015; Britz et al., 2017; Vaswani, et al., 2017)。
歸納總結
下面的表格,我們總結了幾種流行的注意力機制以及相應的對齊分數函數:
(*)在Luong等人的文章中被稱為“concat”,在Vaswani等人的文章中被稱為“附加注意”。
(^)它增加了一個比例因子`$1/sqrt{n}$`,因為當輸入較大時,softmax函數的梯度可能非常小,難以進行有效的學習。
下面總結了一些更廣義的應用到注意力機制的方法:
(&)此外,Cheng等人在2016等論文中也將其稱為內注意力機制(intra-attention)。
自注意力機制(Self-attention)
自注意力機制,又稱內注意力機制,是一種將單個序列的不同位置關聯起來以計算同一序列的表示的注意機制。它在機器閱讀、抽象摘要或圖像描述生成中非常有用。
在“Long short-term memory network”這篇文章中使用自注意力機制去做機器閱讀。在下面的例子中,自注意機制使我們能夠學習當前單詞和句子前一部分之間的相關性。
相關鏈接:https://arxiv.org/pdf/1601.06733.pdf
圖6 當前單詞為紅色,藍色陰影的大小表示激活級別也就是相關性的大小。(圖片來自于Cheng et al.,2016)
在“Show,attend and tell”這篇文章中,自注意力機制應用于圖像以生成適當的描述。圖像首先由卷積神經網絡進行編碼,具有自注意力機制的遞歸神經網絡利用卷積特征映射逐條生成描述性詞語。注意力權重的可視化清晰地展示了模型為了輸出某個單詞而關注圖像的某些區域。
相關鏈接:http://proceedings.mlr.press/v37/xuc15.pdf
圖7 機器根據圖像得到的描述“一個女人正在一個公園里扔飛碟”。(圖像來自于Xu et al. 2015)
Soft & Hard Attention
soft vs hard 注意力記住是區分注意力定義的另一種方式。最初的想法是在“Show, attend and tell paper”論文中提出的,其主要思想在于:注意力是否可以訪問整個圖像或只訪問圖像中的一部分:
Soft Attention:所學習的對齊權重關注于整個輸入圖像中的各個部分,關鍵思想和Bahdanau在2015年的論文如出一轍。
優點:模型是平滑可微的
缺點:當輸入序列非常長的時候,計算量會很大
Hard Attention:每一步只關注到圖像中的一部分
優點: 預測階段具有很小的運算量
缺點:模型是不可導的而且需要更加復雜的訓練技術,例如強化學習和方差降低(variance reduction)
Global & Local Attention
“Luong, et al.,2015” 首次提出了“global”和“local”注意力機制。global注意力機制和soft注意力機制類似,然而local是hard和soft的有趣的融合,它是對hard attention的一種改進,使得它變得可導:該模型首先預測一個當前目標詞對齊的位置和一個圍繞源位置的窗口,然后用于計算上下文向量。
相關鏈接:https://arxiv.org/pdf/1508.04025.pdf
圖8 全局和局部注意力機制(圖片來自于Luong,et al.,2015中圖2和圖3)
神經圖靈機
1936年,阿蘭·圖靈提出了一個計算機的最小模型。它由一個無限長的磁帶和一個與磁帶交互的磁頭組成。磁帶上有無數的單元格,每個單元格都填有一個符號:0,1或空格(“ ”)。操作頭可以讀取符號、編輯符號,并可以在磁帶上左右移動。理論上,圖靈機可以模擬任何計算機算法,不管這個過程有多復雜或多耗時。無限內存給圖靈機帶來了數學上無限的優勢。然而,無限內存在真正的現代計算機中是不可行的。
圖9 圖靈機的樣子:一個磁帶+一個處理磁帶的磁頭。(圖片來源:http: aturingmachine.com)
神經圖靈機(NTM,Graves, Wayne & Danihelka, 2014)是一種神經網絡與外部存儲器耦合的模型結構。存儲器模仿圖靈機磁帶,神經網絡控制操作頭從磁帶讀取或者向磁帶中寫。然而,NTM中的內存是有限的,因此它看起來更像是一臺“神經馮諾伊曼機器”。
NTM包含兩個主要部件:一個由神經網絡構成的控制器和存儲器。控制器:負責對內存執行操作。它可以是任何類型的神經網絡(前饋神經網絡或遞歸神經網絡)。存儲器:保存處理過的信息。它是一個大小為`$N imes M$`的矩陣,其中包含N行向量,每個向量都有M個維度。
在一次更新迭代的過程中,控制器處理輸入信號并相應地與存儲器進行交互以生成輸出。交互由一組并行讀寫頭處理。讀和寫操作都是模糊的,因為它們都需要訪問所有內存地址。
圖10 神經圖靈機的結構
讀寫機制
當在時刻t(注意力向量大小為N)從內存中讀取數據時,控制分配給不同內存位置(矩陣行)的注意量。讀取向量
是記憶內存的加權和,權重根據注意力強度來衡量。
其中代表向量
的第i個元素,
是存儲矩陣的第i行向量。
在t時刻寫入內存時,受LSTM中輸入和遺忘門的啟發,寫入磁頭首先根據一個擦除向量擦除一些舊的內容,然后通過一個加法向量
添加新的信息到存儲器中。
注意力機制
在神經圖靈機中,如何產生注意力分布wt取決于尋址機制:神經圖靈機使用基于內容和基于位置的尋址的混合尋址方式。
基于內容的尋址方式
基于內容的尋址方式,就是根據控制器從輸入行和內存行提取的關鍵向量kt之間的相似性來創建注意向量。基于內容的注意力機制用余弦相似度來計算相似性,然后用softmax函數進行歸一化。此外,神經圖靈機增加了放大器βt用來放大或衰減分布的重點。
插值
然后利用插值門,也就是一個標量gt將新生成的基于內容的注意向量與上一步的注意權值進行混合:
基于位置的尋址方式
基于位置的尋址將注意向量中不同位置的值相加,并通過允許的整數移位上的加權分布進行加權。它等價于與核函數st(.)的一維卷積,st(.)是位置偏移的函數。定義這個分布有多種方法。參見圖11以獲得啟發。
圖11 兩種表示位移權重分布st的方式
最后注意分布由標量進行銳化增強。
注意向量wt在時間步長t上生成的完整過程如圖12所示。控制器產生的每個磁頭的所有參數都是唯一的。如果有多個讀寫頭并行,控制器將輸出多個集合。
圖12 神經圖靈機尋址機構流程圖
指針網絡(Pointer Network)
在排序或旅行推銷員(travelling salesman)等問題中,輸入和輸出都是順序的數據。不幸的是,傳統的seq-2-seq或NMT模型都不能很容易地解決這些問題,因為輸出元素的離散類別不是預先確定的,而是取決于可變的輸入大小。指針網絡(Ptr-Net;(Vinyals, et al. 2015)的提出就是為了解決這類問題:當輸出元素對應于輸入序列中的位置時。指針網絡沒有使用注意力機制將編碼器的隱藏單元混合到上下文向量中(參見圖8),而是使用注意力機制直接作用在編碼器上,選擇輸入序列中某個元素作為解碼器的輸出。
圖13 指針網絡模型的結構圖(圖片來自于https://lilianweng.github.io/lil-log/assets/images/ptr-net.png)
當給定輸入序列為,指針網絡的輸出是一個由整數索引構成的序列
。指針網絡依然是以編碼器-解碼器的結構作為基礎。其中編碼器和解碼器的隱含層狀態分別表示為
和
。指針網絡使用addictive attention作為對分數齊函數,然后同樣使用softmax進行歸一化從而建立輸出條件概率模型:
可以看到,在指針網絡中注意機制被簡化了,因為它沒有將編碼器狀態與注意權重混合到輸出中。這樣,輸出只響應位置,而不響應輸入內容。
Transformer
“Attention is All you Need”這篇文章(Vaswani, et al., 2017),無疑是2017年最有影響力和最有趣的論文之一。它對soft attention進行了大量的改進,使得在不需要遞歸神經網絡單元(LSTM,GRU)的情況下進行seq2seq建模成為了可能。它提出的 Transformer 模型完全建立在自注意力機制(self-attention)的基礎上,沒有使用任何序列對齊的遞歸結構。
其模型結構如下:
Key, Value and Query
Transformer的主要部件是一個叫做“多頭自注意力機制”的單元(multi-head self-attention mechanism)。Transformer將輸入的編碼表示形式視為一組鍵key-值value對(K,V),它們的維度都是n(輸入序列長度);在NMT的上下文中,key和value都是編碼器的隱含層狀態。在解碼器中,上一步的輸出被壓縮為一個查詢query(Q的維度為m),下一步的輸出是通過映射這個查詢query到一組鍵key和值value的集合生成的。Attention 函數的本質可以被描述為一個查詢到一系列鍵-值對的映射。
Transformer選擇縮放點積(scaled dot-product attention)作為注意力機制:輸出為各個值key的加權和,其中每個值value的權重定義為查詢query作用于所有鍵key的縮放點積:
多頭自注意力機制(Multi-Head Self-Attention)
圖14 多頭縮放點積注意力機制的結構圖
多頭注意力機制會并行計算縮放點積很多次,而不是僅僅計算一次。然后將相互獨立的注意力計算單元的輸出簡單的拼接在一起,最后通過一個線性單元轉換成期望大小的維度。我認為這樣做的動機是因為合并總是有效的?根據作者在文章中的描述,“多頭注意力機制允許模型共同關注來自不同位置的不同子空間的信息。而僅僅有一個注意力機制,是不能得到這么豐富的信息的。”
其中為可學習的參數。
編碼器(Encoder)
圖15 Transformer的編碼器結構
編碼器可以生成基于注意力的表示,其能夠從可能無限大的上下文中定位到特定的信息。
6個相同的層堆疊在一起
每個編碼層都有一個多頭自注意力機制層和一個全連接前饋神經網絡單元
每個編碼子層之間都采用殘差連接方式,并且使用層歸一化(layer normalization)。
每個子層的輸出數據都是相同的維度`$d_ ext{model} = 512$`
解碼器(Decoder)
圖16 Transformer的解碼器結構
解碼器能夠對已編碼的表示進行檢索。
6個相同的層堆疊在一起
每個解碼層含有兩個子層結構,一個是多頭注意力機制,另一個是全連接前饋神經網絡單元
與編碼器結構類似,每個解碼器子層之間都采用殘差連接方式,并且使用層歸一化(layer normalization)。
第一個多頭注意子層被修改,以防止當前位置參與到后面的子序列的位置中,因為我們不想在預測當前的位置時有目標序列的未來信息對其進行干擾。
完整的結構
有了前面對編碼器和解碼器結構的介紹,下面將引出Transformer的整體結構:
源序列和目標序列都先要經過一個embedding層,將其嵌入到相同的維度,例如。
為了保存序列的位置信息,使用基于正弦函數的位置編碼器對每個輸入向量進行編碼,將編碼向量合并在嵌入向量之后。
softmax函數和線性層加入到最后解碼器的輸出上。
圖17 Transformer的整體結構
注:作者實現的一個Transformer模型:lilianweng/transformer-tensorflow
SNAIL
Transformer模型沒有遞歸結構或者卷積結構,即便加入位置編碼單元對嵌入向量的位置進行編碼,對序列的順序表示也很弱。對于像強化學習這種對位置依賴性十分敏感的問題,這可能是一個大問題。
簡單神經注意力元學習(Simple Neural Attention Meta-Learner)簡稱SNAIL,通過將Transformer的自注意力機制與時序卷積相結合,部分解決了模型中位置編碼的問題。它已被證明擅長解決監督學習和強化學習任務。
圖18 SNAIL模型的結構圖
SNAIL的產生歸功于元學習,這是另一個值得寫一篇文章來歸納的大話題。但簡單來說,元學習用來預測那些新穎的但未被觀察到的、具有跟已知樣本有相同分布的樣本數據。
自注意力生成對抗網路(Self-Attention GAN)
最后,我想提到一個最新發布的生成對抗網絡模型,自注意力生成對抗網路,我們來看看注意力機制是如何應用到生成對抗網絡上以提高生成圖像的質量的。
經典的DGGAN(深度卷積生成對抗網絡)將生成器和判別器都表示成多層卷積神經網絡。然而,表示的能力受到濾波器大小的限制,因為一個像素的特征受限于一塊小的局部區域。為了連接相隔很遠的區域,必須通過卷積操作來稀釋這些特征,盡管如此,他們之間的依賴性也未必能得到很好的保證。
在計算機視覺中,由于上下文向量可以通過soft-attention明確地學習到一個像素與其他位置所有像素之間的關系,即便是相距甚遠的區域,它也可以輕松捕獲全局的依賴關系。因此,如果將self-attention與GAN相結合,有望處理更多細節信息。
圖19 卷積操作和自注意力機制訪問到的區域大有不同
SAGAN采用非局部神經網絡(non-local neural network)的注意力方法來計算。卷積圖像的特征圖構成三個分支,分別對應于Transformer模型中的鍵、值和查詢三個概念。
然后我們使用點積(dot-product)注意力機制來得到自注意特征圖:
圖20 SAGAN中的自注意力機制
注意到,是注意力圖(attention map)中的一個元素,它表示模型在生成第j個位置時對第i個位置應該注意多少程度。
都是1x1的卷積核。
如果你不太明白1x1的卷積是什么意思,請參看Andrew Ng的一個簡短的教程
(鏈接:https://www.youtube.com/watch?v=9EZVpLTPGz8)。
列向量是最終的輸出結果,
。
之后,輸出的注意層(attention layer)乘以一個比例系數,再放回到原始的特征圖中,這類似于殘差連接方式:
盡管縮放系數在訓練期間從0逐漸增加,但是網絡被配置為一開始依賴局部區域中的信息,然后通過分配更多權重給更遠區域逐漸學習到更遠區域的信息。
圖21 SAGAN生成的大小為128×128的不同類別的示例圖像
-
計算機視覺
+關注
關注
8文章
1700瀏覽量
46127 -
深度學習
+關注
關注
73文章
5515瀏覽量
121551 -
自然語言處理
+關注
關注
1文章
619瀏覽量
13646
原文標題:Deep Reading | 從0到1再讀注意力機制,此文必收藏!
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
注意力機制或將是未來機器學習的核心要素
基于注意力機制的深度興趣網絡點擊率模型
![基于<b class='flag-5'>注意力</b><b class='flag-5'>機制</b>的深度興趣網絡點擊率<b class='flag-5'>模型</b>](https://file.elecfans.com/web1/M00/E5/0E/pIYBAGBK2PiAB-OSAAIkmnAx2L0402.png)
基于注意力機制的深度學習模型AT-DPCNN
![基于<b class='flag-5'>注意力</b><b class='flag-5'>機制</b>的深度學習<b class='flag-5'>模型</b>AT-DPCNN](https://file.elecfans.com/web1/M00/E5/D2/pIYBAGBRYa2AJBfwAAItGPaXyTE263.png)
基于層次注意力機制的多模態圍堵情感識別模型
![基于層次<b class='flag-5'>注意力</b><b class='flag-5'>機制</b>的多模態圍堵情感識別<b class='flag-5'>模型</b>](https://file.elecfans.com/web1/M00/E8/BE/pIYBAGBlPKaAZS7lAAHe07YjtJY267.png)
基于多層CNN和注意力機制的文本摘要模型
![基于多層CNN和<b class='flag-5'>注意力</b><b class='flag-5'>機制</b>的文本摘要<b class='flag-5'>模型</b>](https://file.elecfans.com/web1/M00/E9/AD/pIYBAGBtKnSAQwZNAAJC8wqBACw976.png)
聯合評論文本層級注意力和外積的推薦方法
![聯合評論文本層級<b class='flag-5'>注意力</b>和外積的推薦<b class='flag-5'>方法</b>](https://file.elecfans.com/web1/M00/EA/7D/pIYBAGBzsgaAQHDOAAJvmyChBQI866.png)
基于循環卷積注意力模型的文本情感分類方法
![基于循環卷積<b class='flag-5'>注意力</b><b class='flag-5'>模型</b>的文本情感分類<b class='flag-5'>方法</b>](https://file.elecfans.com/web1/M00/EA/F2/pIYBAGB2j-yATMekAAGdos038Lk617.png)
評論