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