什么是 Seq2Seq ?
Seq2Seq 是一個(gè) Encoder-Decoder 結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),它的輸入是一個(gè)序列(Sequence),輸出也是一個(gè)序列(Sequence),因此而得名 “Seq2Seq”。在 Encoder 中,將可變長(zhǎng)度的序列轉(zhuǎn)變?yōu)楣潭ㄩL(zhǎng)度的向量表達(dá),Decoder 將這個(gè)固定長(zhǎng)度的向量轉(zhuǎn)換為可變長(zhǎng)度的目標(biāo)的信號(hào)序列。*

最基礎(chǔ)的 Seq2Seq模型 包含了三個(gè)部分(上圖有一部分沒有顯示的標(biāo)明),即 Encoder、Decoder 以及連接兩者的中間狀態(tài)向量 C,Encoder通過學(xué)習(xí)輸入,將其編碼成一個(gè)固定大小的狀態(tài)向量 C(也稱為語義編碼),繼而將 C 傳給Decoder,Decoder再通過對(duì)狀態(tài)向量 C 的學(xué)習(xí)來進(jìn)行輸出對(duì)應(yīng)的序列。
Basic Seq2Seq 是有很多弊端的,首先 Encoder 將輸入編碼為固定大小狀態(tài)向量(hidden state)的過程實(shí)際上是一個(gè)“信息有損壓縮”的過程。如果信息量越大,那么這個(gè)轉(zhuǎn)化向量的過程對(duì)信息造成的損失就越大。同時(shí),隨著 sequence length的增加,意味著時(shí)間維度上的序列很長(zhǎng),RNN 模型也會(huì)出現(xiàn)梯度彌散。最后,基礎(chǔ)的模型連接 Encoder 和 Decoder 模塊的組件僅僅是一個(gè)固定大小的狀態(tài)向量,這使得Decoder無法直接去關(guān)注到輸入信息的更多細(xì)節(jié)。由于 Basic Seq2Seq 的種種缺陷,隨后引入了 Attention 的概念以及 Bi-directional encoder layer 等,能夠取得更好的表現(xiàn)。
基本的Attention原理。
https://zhuanlan.zhihu.com/p/137578323
單純的Encoder-Decoder 框架并不能有效的聚焦到輸入目標(biāo)上,這使得像 seq2seq 的模型在獨(dú)自使用時(shí)并不能發(fā)揮最大功效。比如說在上圖中,編碼器將輸入編碼成上下文變量 C,在解碼時(shí)每一個(gè)輸出 Y 都會(huì)不加區(qū)分的使用這個(gè) C 進(jìn)行解碼。而注意力模型要做的事就是根據(jù)序列的每個(gè)時(shí)間步將編碼器編碼為不同 C,在解碼時(shí),結(jié)合每個(gè)不同的 C 進(jìn)行解碼輸出,這樣得到的結(jié)果會(huì)更加準(zhǔn)確,如下所示:

近幾年來,深度學(xué)習(xí)與視覺注意力機(jī)制結(jié)合的研究工作,大多數(shù)是集中于使用掩碼(mask)來形成注意力機(jī)制。掩碼的原理在于
通過另一層新的權(quán)重,將圖片數(shù)據(jù)中關(guān)鍵的特征標(biāo)識(shí)出來,通過學(xué)習(xí)訓(xùn)練,讓深度神經(jīng)網(wǎng)絡(luò)學(xué)到每一張新圖片中需要關(guān)注的區(qū)域,也就形成了注意力。
這種思想,進(jìn)而演化成兩種不同類型的注意力,一種是軟注意力(soft attention),另一種則是強(qiáng)注意力(hard attention)。
軟注意力
的關(guān)鍵點(diǎn)在于,這種注意力更關(guān)注區(qū)域[4]或者通道[5],
而且軟注意力是確定性的注意力,學(xué)習(xí)完成后直接可以通過網(wǎng)絡(luò)生成,
最關(guān)鍵的地方是軟注意力是可微的,這是一個(gè)非常重要的地方。可以微分的注意力就可以通過神經(jīng)網(wǎng)絡(luò)算出梯度并且前向傳播和后向反饋來學(xué)習(xí)得到注意力的權(quán)重[6]。
強(qiáng)注意力[7]
與軟注意力不同點(diǎn)在于,首先強(qiáng)注意力是更加關(guān)注點(diǎn),也就是圖像中的每個(gè)點(diǎn)都有可能延伸出注意力,
同時(shí)強(qiáng)注意力是一個(gè)隨機(jī)的預(yù)測(cè)過程,更強(qiáng)調(diào)動(dòng)態(tài)變化。
當(dāng)然,最關(guān)鍵是強(qiáng)注意力是一個(gè)不可微的注意力,訓(xùn)練過程往往是通過增強(qiáng)學(xué)習(xí)(reinforcement learning)來完成的。
為了更清楚地介紹計(jì)算機(jī)視覺中的注意力機(jī)制,這篇文章將從注意力域(attention domain)的角度來分析幾種注意力的實(shí)現(xiàn)方法。其中主要是三種注意力域,空間域(spatial domain),通道域(channel domain),混合域(mixed domain)。還有另一種比較特殊的強(qiáng)注意力實(shí)現(xiàn)的注意力域,時(shí)間域(time domain),但是因?yàn)閺?qiáng)注意力是使用reinforcement learning來實(shí)現(xiàn)的,訓(xùn)練起來有所不同,所以之后再詳細(xì)分析。
軟注意力的注意力域
每篇文章的介紹分為兩個(gè)部分,首先從想法上來介紹模型的設(shè)計(jì)思路,然后深入了解模型結(jié)構(gòu)(architecture)部分。
3.1 空間域(Spatial Domain)
設(shè)計(jì)思路:
Spatial Transformer Networks(STN)模型[4]通過注意力機(jī)制,將原始圖片中的空間信息變換到另一個(gè)空間中并保留了關(guān)鍵信息。
這篇文章的思想非常巧妙,因?yàn)榫矸e神經(jīng)網(wǎng)絡(luò)中的池化層(pooling layer)直接用一些max pooling 或者average pooling 的方法,將圖片信息壓縮,減少運(yùn)算量提升準(zhǔn)確率。這篇文章認(rèn)為之前pooling的方法太過于暴力,直接將信息合并會(huì)導(dǎo)致關(guān)鍵信息無法識(shí)別出來,所以提出了一個(gè)叫空間轉(zhuǎn)換器(spatial transformer)的模塊,將圖片中的的空間域信息做對(duì)應(yīng)的空間變換,從而能將關(guān)鍵的信息提取出來與池化層不同,在池化層中,接收fields是固定的和局部的,空間轉(zhuǎn)換器模塊是一種動(dòng)態(tài)機(jī)制,可以通過為每個(gè)輸入樣本生成適當(dāng)?shù)淖儞Q來主動(dòng)對(duì)圖像(或特征圖)進(jìn)行空間變換。
(a)列是原始的圖片信息,其中第一個(gè)手寫數(shù)字7沒有做任何變換,第二個(gè)手寫數(shù)字5,做了一定的旋轉(zhuǎn)變化,而第三個(gè)手寫數(shù)字6,加上了一些噪聲信號(hào);
(b)列中的彩色邊框是學(xué)習(xí)到的spatial transformer的框盒(bounding box),每一個(gè)框盒其實(shí)就是對(duì)應(yīng)圖片學(xué)習(xí)出來的一個(gè)spatial transformer;
(c)列中是通過spatial transformer轉(zhuǎn)換之后的特征圖,可以看出7的關(guān)鍵區(qū)域被選擇出來,5被旋轉(zhuǎn)成為了正向的圖片,6的噪聲信息沒有被識(shí)別進(jìn)入。
最終可以通過這些轉(zhuǎn)換后的特征圖來預(yù)測(cè)出(d)列中手寫數(shù)字的數(shù)值。
這是空間變換網(wǎng)絡(luò)(spatialtransformer network)中最重要的空間變換模塊,這個(gè)模塊可以作為新的層直接加入到原有的網(wǎng)絡(luò)結(jié)構(gòu),比如ResNet中。
來仔細(xì)研究這個(gè)模型的輸入:神經(jīng)網(wǎng)絡(luò)訓(xùn)練中使用的數(shù)據(jù)類型都是張量(tensor),H是上一層tensor的高度(height),W是上一層tensor的寬度(width),而C代表tensor的通道(channel),比如圖片基本的三通道(RGB),或者是經(jīng)過卷積層(convolutional layer)之后,不同卷積核(kernel)都會(huì)產(chǎn)生不同的通道信息。 之后這個(gè)輸入進(jìn)入兩條路線,一條路線是信息進(jìn)入定位網(wǎng)絡(luò)(localisation net),另一條路線是原始信號(hào)直接進(jìn)入采樣層(sampler)。其中定位網(wǎng)絡(luò)會(huì)學(xué)習(xí)到一組參數(shù)
,而這組參數(shù)就能夠作為網(wǎng)格生成器(grid generator)的參數(shù),生成一個(gè)采樣信號(hào),這個(gè)采樣信號(hào)其實(shí)是一個(gè)變換矩陣
,與原始圖片相乘之后,可以得到變換之后的矩陣
就是變換之后的圖片特征了,變換之后的矩陣大小是可以通過調(diào)節(jié)變換矩陣來形成縮放的。
通過這張轉(zhuǎn)換圖片,可以看出空間轉(zhuǎn)換器中產(chǎn)生的采樣矩陣是能夠?qū)⒃瓐D中關(guān)鍵的信號(hào)提取出來,(a)中的采樣矩陣是單位矩陣,不做任何變換,(b)中的矩陣是可以產(chǎn)生縮放旋轉(zhuǎn)變換的采樣矩陣
最右邊式子左邊的θ矩陣就是對(duì)應(yīng)的采樣矩陣。
這個(gè)模塊加進(jìn)去最大的好處就是能夠?qū)ι弦粚有盘?hào)的關(guān)鍵信息進(jìn)行識(shí)別(attention),并且該信息矩陣是一個(gè)可以微分的矩陣,因?yàn)槊恳粋€(gè)目標(biāo)(target)點(diǎn)的信息其實(shí)是所有源(source)點(diǎn)信息的一個(gè)組合,這個(gè)組合可以是一個(gè)線性組合,復(fù)雜的變換信息也可以用核函數(shù)(kernel)來表示:
V是轉(zhuǎn)換后的信息,U是轉(zhuǎn)換前的信息,k是一個(gè)核函數(shù)。
理論上來說,這樣的模塊是可以加在任意層的,因?yàn)槟K可以同時(shí)對(duì)通道信息和矩陣信息同時(shí)處理。但是由于文章提出對(duì)所有的通道信息進(jìn)行統(tǒng)一處理變換,我認(rèn)為這種模塊其實(shí)更適用于原始圖片輸入層之后的變化,因?yàn)榫矸e層之后,每一個(gè)卷積核(filter)產(chǎn)生的通道信息,所含有的信息量以及重要程度其實(shí)是不一樣的,都用同樣的transformer其實(shí)可解釋性并不強(qiáng)。也由此,我們可以引出第二種注意域的機(jī)制——通道域(channel domain)注意力機(jī)制。
3.2 通道域(Channel Domain)
通道域[5]的注意力機(jī)制原理很簡(jiǎn)單,我們可以從基本的信號(hào)變換的角度去理解。信號(hào)系統(tǒng)分析里面,任何一個(gè)信號(hào)其實(shí)都可以寫成正弦波的線性組合,經(jīng)過時(shí)頻變換<一般是使用傅里葉變換,也是卷積變化>之后,時(shí)域上連續(xù)的正弦波信號(hào)就可以用一個(gè)頻率信號(hào)數(shù)值代替了。
在卷積神經(jīng)網(wǎng)絡(luò)中,每一張圖片初始會(huì)由(R,G,B)三通道表示出來,之后經(jīng)過不同的卷積核之后,每一個(gè)通道又會(huì)生成新的信號(hào),比如圖片特征的每個(gè)通道使用64核卷積,就會(huì)產(chǎn)生64個(gè)新通道的矩陣(H,W,64),H,W分別表示圖片特征的高度和寬度。每個(gè)通道的特征其實(shí)就表示該圖片在不同卷積核上的分量,類似于時(shí)頻變換,而這里面用卷積核的卷積類似于信號(hào)做了傅里葉變換,從而能夠?qū)⑦@個(gè)特征一個(gè)通道的信息給分解成64個(gè)卷積核上的信號(hào)分量。
既然每個(gè)信號(hào)都可以被分解成核函數(shù)上的分量,產(chǎn)生的新的64個(gè)通道對(duì)于關(guān)鍵信息的貢獻(xiàn)肯定有多有少,如果我們給每個(gè)通道上的信號(hào)都增加一個(gè)權(quán)重,來代表該通道與關(guān)鍵信息的相關(guān)度的話,這個(gè)權(quán)重越大,則表示相關(guān)度越高,也就是我們?cè)叫枰プ⒁獾耐ǖ懒恕?br> 模型結(jié)構(gòu):
論文[5]中提出了一個(gè)非常重要的SENet的模型結(jié)構(gòu),靠著這個(gè)模型獲得了ImageNet的冠軍,這個(gè)模型是非常有創(chuàng)造力的設(shè)計(jì)。
首先最左邊是原始輸入圖片特征X,然后經(jīng)過變換,比如卷積變換,產(chǎn)生了新的特征信號(hào)U。U有C個(gè)通道,我們希望通過注意力模塊來學(xué)習(xí)出每個(gè)通道的權(quán)重,從而產(chǎn)生通道域的注意力。中間的模塊就是SENet的創(chuàng)新部分,也就是注意力機(jī)制模塊。這個(gè)注意力機(jī)制分成三個(gè)部分:擠壓(squeeze),激勵(lì)(excitation),以及注意(attention)。
擠壓函數(shù):
很明顯這個(gè)函數(shù)做了一個(gè)全局平均值,把每個(gè)通道內(nèi)所有的特征值相加再平均,也是全局平均池化(global average pooling)的數(shù)學(xué)表達(dá)式。
激勵(lì)函數(shù):
函數(shù)是ReLU,而
是一個(gè)sigmoid激活函數(shù)。W1和W2的維度分別是
![]()
尺度函數(shù):
這一步其實(shí)就是一個(gè)放縮的過程,不同通道的值乘上不同的權(quán)重,從而可以增強(qiáng)對(duì)關(guān)鍵通道域的注意力。
3.3 混合域
了解前兩種注意力域的設(shè)計(jì)思路后,簡(jiǎn)單對(duì)比一下。首先,空間域的注意力是忽略了通道域中的信息,將每個(gè)通道中的圖片特征同等處理,這種做法會(huì)將空間域變換方法局限在原始圖片特征提取階段,應(yīng)用在神經(jīng)網(wǎng)絡(luò)層其他層的可解釋性不強(qiáng)。
而通道域的注意力是對(duì)一個(gè)通道內(nèi)的信息直接全局平均池化,而忽略每一個(gè)通道內(nèi)的局部信息,這種做法其實(shí)也是比較暴力的行為。所以結(jié)合兩種思路,就可以設(shè)計(jì)出混合域的注意力機(jī)制模型[8]。
設(shè)計(jì)思路:
[8]這篇文章中提出的注意力機(jī)制是與深度殘差網(wǎng)絡(luò)(Deep Residual Network)相關(guān)的方法,基本思路是能夠?qū)⒆⒁饬C(jī)制應(yīng)用到ResNet中,并且使網(wǎng)絡(luò)能夠訓(xùn)練的比較深。
文章中注意力的機(jī)制是軟注意力基本的加掩碼(mask)機(jī)制,但是不同的是,這種注意力機(jī)制的mask借鑒了殘差網(wǎng)絡(luò)的想法,不只根據(jù)當(dāng)前網(wǎng)絡(luò)層的信息加上mask,還把上一層的信息傳遞下來,這樣就防止mask之后的信息量過少引起的網(wǎng)絡(luò)層數(shù)不能堆疊很深的問題。
正如之前說的,[8]中提出的注意力mask,不僅僅只是對(duì)空間域或者通道域注意,這種mask可以看作是每一個(gè)特征元素(element)的權(quán)重。通過給每個(gè)特征元素都找到其對(duì)應(yīng)的注意力權(quán)重,就可以同時(shí)形成了空間域和通道域的注意力機(jī)制。
很多人看到這里就會(huì)有疑問,這種做法應(yīng)該是從空間域或者通道域非常自然的一個(gè)過渡,怎么做單一域注意力的人都沒有想到呢?原因有:
- 如果你給每一個(gè)特征元素都賦予一個(gè)mask權(quán)重的話,mask之后的信息就會(huì)非常少,可能直接就破壞了網(wǎng)絡(luò)深層的特征信息;
- 另外,如果你可以加上注意力機(jī)制之后,殘差單元(Residual Unit)的恒等映射(identical mapping)特性會(huì)被破壞,從而很難訓(xùn)練。
首先,使用mask重復(fù)地從0到1的點(diǎn)產(chǎn)生會(huì)降低深層特征的值。其次,軟mask可能會(huì)破壞主干分支的良好特性,例如殘差單元的相同映射。
所以該文章的注意力機(jī)制的創(chuàng)新點(diǎn)在于提出了殘差注意力學(xué)習(xí)(residual attention learning),不僅只把mask之后的特征張量作為下一層的輸入,同時(shí)也將mask之前的特征張量作為下一層的輸入,這時(shí)候可以得到的特征更為豐富,從而能夠更好的注意關(guān)鍵特征。
模型結(jié)構(gòu):
文章中模型結(jié)構(gòu)是非常清晰的,整體結(jié)構(gòu)上,是三階注意力模塊(3-stage attention module)。每一個(gè)注意力模塊可以分成兩個(gè)分支(看stage2),上面的分支叫主分支(trunk branch),是基本的殘差網(wǎng)絡(luò)(ResNet)的結(jié)構(gòu)。而下面的分支是軟掩碼分支(soft mask branch),而軟掩碼分支中包含的主要部分就是殘差注意力學(xué)習(xí)機(jī)制。通過下采樣(down sampling)和上采樣(up sampling),以及殘差模塊(residual unit),組成了注意力的機(jī)制。
模型結(jié)構(gòu)中比較創(chuàng)新的殘差注意力機(jī)制是:
H是注意力模塊的輸出,F(xiàn)是上一層的圖片張量特征,M是軟掩碼的注意力參數(shù)。這就構(gòu)成了殘差注意力模塊,能將圖片特征和加強(qiáng)注意力之后的特征一同輸入到下一模塊中。F函數(shù)可以選擇不同的函數(shù),就可以得到不同注意力域的結(jié)果:
是對(duì)圖片特征張量直接sigmoid激活函數(shù),就是混合域的注意力;
是對(duì)圖片特征張量直接做全局平均池化(global average pooling),所以得到的是通道域的注意力(類比SENet[5]);
是求圖片特征張量在通道域上的平均值的激活函數(shù),類似于忽略了通道域的信息,從而得到空間域的注意力。
4 時(shí)間域注意力
這個(gè)概念其實(shí)比較大,因?yàn)橛?jì)算機(jī)視覺只是單一識(shí)別圖片的話,并沒有時(shí)間域這個(gè)概念,但是[7]這篇文章中,提出了一種基于遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)的注意力機(jī)制識(shí)別模型。
RNN模型比較適合的場(chǎng)景是數(shù)據(jù)具有時(shí)序特征,比如使用RNN產(chǎn)生注意力機(jī)制做的比較好的是在自然語言處理的問題上。因?yàn)樽匀徽Z言處理的是文本分析,而文本產(chǎn)生的背后其實(shí)是有一個(gè)時(shí)序上的關(guān)聯(lián)性,比如一個(gè)詞之后還會(huì)跟著另外一個(gè)詞,這就是一個(gè)時(shí)序上的依賴關(guān)聯(lián)性。
而圖片數(shù)據(jù)本身,并不具有天然的時(shí)序特征,一張圖片往往是一個(gè)時(shí)間點(diǎn)下的采樣。但是在視頻數(shù)據(jù)中,RNN就是一個(gè)比較好的數(shù)據(jù)模型,從而能夠使用RNN來產(chǎn)生識(shí)別注意力。
特意將RNN的模型稱之為時(shí)間域的注意力,是因?yàn)檫@種模型在前面介紹的空間域,通道域,以及混合域之上,又新增加了一個(gè)時(shí)間的維度。這個(gè)維度的產(chǎn)生,其實(shí)是基于采樣點(diǎn)的時(shí)序特征。
Recurrent Attention Model [7]中將注意力機(jī)制看成對(duì)一張圖片上的一個(gè)區(qū)域點(diǎn)的采樣,這個(gè)采樣點(diǎn)就是需要注意的點(diǎn)。而這個(gè)模型中的注意力因?yàn)椴辉偈且粋€(gè)可以微分的注意力信息,因此這也是一個(gè)強(qiáng)注意力(hard attention)模型。這個(gè)模型的訓(xùn)練是需要使用增強(qiáng)學(xué)習(xí)(reinforcementlearning)來訓(xùn)練的,訓(xùn)練的時(shí)間更長(zhǎng)。
這個(gè)模型更需要了解的并不是RNN注意力模型,因?yàn)檫@個(gè)模型其實(shí)在自然語言處理中介紹的更詳細(xì),更需要了解的是這個(gè)模型的如何將圖片信息轉(zhuǎn)換成時(shí)序上的采樣信號(hào)的:
這個(gè)是模型中的關(guān)鍵點(diǎn),叫Glimpse Sensor,我翻譯為掃視器,這個(gè)sensor的關(guān)鍵點(diǎn)在于先確定好圖片中需要關(guān)注的點(diǎn)(像素),這時(shí)候這個(gè)sensor開始采集三種信息,信息量是相同的,一個(gè)是非常細(xì)節(jié)(最內(nèi)層框)的信息,一個(gè)是中等的局部信息,一個(gè)是粗略的略縮圖信息。
這三個(gè)采樣的信息是在位置中產(chǎn)生的圖片信息,而下一個(gè)時(shí)刻,隨著
的增加,采樣的位置又開始變化,至于
隨著
該怎么變化,這就是需要使用增強(qiáng)學(xué)習(xí)來訓(xùn)練的東西了。
有關(guān)RNN做attention的,還是應(yīng)該去了解自然語言處理,如機(jī)器翻譯中的做法,這里就不再繼續(xù)深入介紹,想深入了解的,推薦閱讀Attention模型方法綜述。






