一、背景
最早圖像領域,后面應用到NLP領域


人類視覺注意力機制,掃描全局圖像,獲得重點關注區域,投入更多經歷,抑制其它無用信息,提高視覺信息處理的效率與准確性。
在深度神經網絡的結構設計中,attention所要分配的資源基本上就是權重了。
視覺注意力分為幾種,核心思想是基於原有的數據找到其之間的關聯性,然后突出其某些重要特征,有通道注意力,像素注意力,多階注意力等,也有把NLP中的自注意力引入。
二、注意力定義
2.1 序列編碼
第一個思路是
RNN層遞歸
RNN結構本身比較簡單,也很適合序列建模,但RNN的明顯缺點之一就是無法並行,因此速度較慢,這是遞歸的天然缺陷。另外我個人覺得RNN無法很好地學習到全局的結構信息,因為它本質是一個馬爾科夫決策過程。
第二個思路是
CNN層,其實CNN的方案也是很自然的,窗口式遍歷。CNN方便並行,而且容易捕捉到一些全局的結構信息。
第三個即為
self-attention,它的意思是直接將xt與原來的每個詞進行比較,最后算出yt。一步到位獲取了全局信息
2.2 定義
它的基礎是Scaled-Dot Attention,定義如下:


其中Q∈ℝn×dk,K∈ℝm×dk,V∈ℝm×dv,softmax則是在m的那一維進行歸一化。而自注意力,則是對於同一個X∈ℝn×d,通過不同的投影矩陣Wq,Wk,Wv∈ℝd×d′得到Q=XWq,K=XWk,V=XWv,然后再做Attention,即


至於Multi-Head Attention,則不過是Attention運算在不同的參數下重復多次然后將多個輸出拼接起來,屬於比較朴素的增強。
本質上來看,
自注意力就是通過一個n×n的矩陣A和d×d′的矩陣Wv,將原本是n×d的矩陣X,變成了n×d′的矩陣AXWv。其中矩陣A是動態生成的,即


對於矩陣B,本質上來說它就是X里邊兩兩向量的內積組合,所以我們稱它為“token對token”的Attention。幾種類型


Attention層的好處是能夠一步到位捕捉到全局的聯系,因為它直接把序列兩兩比較(代價是計算量變為𝒪(n2),當然由於是純矩陣運算,這個計算量相當也不是很嚴重);相比之下,RNN需要一步步遞推才能捕捉到,而CNN則需要通過層疊來擴大感受野,這是Attention層的明顯優勢。然而自注意力機制需要生成一個巨大的注意力圖,其空間復雜度和時間復雜度巨大。其瓶頸在於,每一個像素的注意力圖都需要對全圖計算。
具體使用,可以把Attention作為一個單獨的層來看,跟CNN、RNN等結構混合使用,應該能更充分融合它們各自的優勢,
三、視覺中的注意力機制
計算機視覺(computer vision)中的注意力機制(attention)的基本思想就是想讓系統學會注意力——能夠忽略無關信息而關注重點信息。注意力機制一種是軟注意力(soft attention),另一種則是強注意力(hard attention)。
3.1 軟注意力(soft-attention)
軟注意力是一個[0,1]間的連續分布問題,更加關注區域或者通道,軟注意力是確定性注意力,學習完成后可以通過網絡生成,並且是可微的,可以通過神經網絡計算出梯度並且可以前向傳播和后向反饋來學習得到注意力的權重。
軟注意力的關鍵點在於,這種注意力更關注區域或者通道,而且軟注意力是確定性的注意力,學習完成后直接可以通過網絡生成,最關鍵的地方是軟注意力是可微的,這是一個非常重要的地方。可以微分的注意力就可以通過神經網絡算出梯度並且前向傳播和后向反饋來學習得到注意力的權重。
1、空間域注意力(spatial transformer network)
空間區域注意力可以理解為讓神經網絡在看哪里。通過注意力機制,將原始圖片中的空間信息變換到另一個空間中並保留了關鍵信息.
2、通道注意力(Channel Attention,CA)
通道注意力可以理解為讓神經網絡在看什么,典型的代表是SENet。卷積網絡的每一層都有好多卷積核,每個卷積核對應一個特征通道,相對於空間注意力機制,通道注意力在於分配各個卷積通道之間的資源,分配粒度上比前者大了一個級別。
Squeeze操作:將各通道的全局空間特征作為該通道的表示,使用全局平均池化生成各通道的統計量
Excitation操作:學習各通道的依賴程度,並根據依賴程度對不同的特征圖進行調整,得到最后的輸出,需要考察各通道的依賴程度
3、混合域模型(融合空間域和通道域注意力)
(1)論文:Residual Attention Network for image classification(CVPR 2017 Open Access Repository)
文章中注意力的機制是軟注意力基本的加掩碼(mask)機制,但是不同的是,這種注意力機制的mask借鑒了殘差網絡的想法,不只根據當前網絡層的信息加上mask,還把上一層的信息傳遞下來,這樣就防止mask之后的信息量過少引起的網絡層數不能堆疊很深的問題。
該文章的注意力機制的創新點在於提出了殘差注意力學習(residual attention learning),不僅只把mask之后的特征張量作為下一層的輸入,同時也將mask之前的特征張量作為下一層的輸入,這時候可以得到的特征更為豐富,從而能夠更好的注意關鍵特征。同時采用三階注意力模塊來構成整個的注意力。
4、Non-Local
Local這個詞主要是針對感受野(receptive field)來說的。它們只考慮局部區域,因此都是local的運算。同理,池化(Pooling)也是。相反的,non-local指的就是感受野可以很大,而不是一個局部領域。如果在某些層能夠引入全局的信息,就能很好地解決local操作無法看清全局的情況,為后面的層帶去更豐富的信息。
5、位置注意力(position-wise attention)
本篇文章的亮點在於用了巧妙的方法減少了參數量。在上面的DANet中,attention map計算的是所有像素與所有像素之間的相似性,空間復雜度為(HxW)x(HxW),而本文采用了criss-cross思想,只計算每個像素與其同行同列即十字上的像素的相似性,通過進行循環(兩次相同操作),間接計算到每個像素與每個像素的相似性,將空間復雜度降為(HxW)x(H+W-1)
3.2 強注意力(hard attention)
0/1問題,哪些被attention,哪些不被attention。更加關注點,圖像中的每個點都可能延伸出注意力,同時強注意力是一個隨機預測的過程,更加強調動態變化,並且是不可微,所以訓練過程往往通過增強學習。
- 強注意力與軟注意力不同點在於,首先強注意力是更加關注點,也就是圖像中的每個點都有可能延伸出注意力,同時強注意力是一個隨機的預測過程,更強調動態變化。當然,最關鍵是強注意力是一個不可微的注意力,訓練過程往往是通過增強學習(reinforcement learning)來完成的。
這些方法共同的部分都是利用相關特征學習權重分布,再用學出來的權重施加在特征之上進一步提取相關知識。 不過施加權重的方式略有差別,可以總結如下:
- 加權可以作用在原圖上;
- 加權可以作用在空間尺度上,給不同空間區域加權;
- 加權可以作用在Channel尺度上,給不同通道特征加權;
- 加權可以作用在不同時刻歷史特征上,結合循環結構添加權重,例如機器翻譯,或者視頻相關的工作。
3.3 在語義分割中的應用
語義分割網絡,由骨干網絡和語義分割頭組成。全卷積網絡受制於較小的有效感知域,無法充分捕獲長距離信息。為彌補這一缺陷,諸多工作提出提出了高效的多尺度上下文融合模塊,例如全局池化層、Deeplab[3] 的空洞空間卷積池化金字塔、PSPNet[4] 的金字塔池化模塊等。
僅2018年,在語義分割領域就有多篇高影響力文章出爐,如 PSANet[3],DANet[4],OCNet[5],CCNet[6],以及今年的Local Relation Net[7]。此外,針對 Attention 數學形式的優化,又衍生出A2Net[8],CGNL[9]。而 A2Net 又開啟了本人稱之為“低秩”重建的探索,同一時期的SGR[10],Beyonds Grids[11],GloRe[12],LatentGNN[13] 都可以此歸類。
上述四文皆包含如下三步:1.像素到語義節點映射 2.語義節點間推理 3.節點向像素反映射。其中,step 2的意義尚未有對比實驗驗證,目前來看,step 1 & 3 構成的對像素特征的低秩重建發揮了關鍵作用。關於如何映射和反映射,又有了 APCNet[14] 和筆者的 EMANet[15] 等相關工作。
1、Non Local


Self-attention結構自上而下分為三個分支,分別是query、key和value。計算時通常分為三步:
第一步是將query和每個key進行相似度計算得到權重,常用的相似度函數有點積,拼接,感知機等;
第二步一般是使用一個softmax函數對這些權重進行歸一化;
第三步將權重和相應的鍵值value進行加權求和得到最后的attention。
核心操作為


詳細對比分析了這些細節在不同任務中的影響。筆者認為此處最關鍵的是加權平均,而非轉換。
這里f 計算時,只考慮了像素的特征,而沒有考慮相對位置。倘若也將像素坐標位置 (x,y)考慮進來,其實就是全圖版的 MeanShift Filter,一種經典的保邊濾波算法。Nonlocal 還可以溯源到經典的 Non-local means 和 BM3D。其功效也來源於此,即高維 feature map 里存在大量的冗余信息,該類算法可以消除大量噪音。
2、Other Attention Models
另一種減少計算量的方法,是將 attention 的全圖計算改為窗口內計算。
NUS 的 A2Net[8] 和 百度的 CGNL[9] 另辟蹊徑,從另一個角度優化了 Nonlocal 的復雜度。
· EMANet
本文認為,映射的關鍵,在於尋找一組“最合適”的描述子,即論文中的“基”。這組基最好具有如下的幾條性質:1. 具有代表性 2. 數量少 3. 互不相似。
性質1能保證重構后的 feature map 能夠最大限度地還原有效信息;性質2則可以保證重構的低秩性,使重構后的特征處在高維空間中的低維流形中;性質3則是在性質2的約束下,盡可能達到性質1的保證。使用池化,即簡單下采樣的,得到的基充分滿足性質2;但互相之間仍十分相似,因此性質3不滿足;小物體下采樣后可能會信息丟失,因此性質1也僅僅能對大物體滿足。
四、其它相關文獻
· Recurrent Models of Visual Attention
提出了在傳統的RNN中加入Attention機制,通過Attention去學習圖像要處理的部分。該RAM模型能夠順序處理輸入,在一個時刻根據一張圖片內部的不同位置,把這些定位下的信息結合起來生成這個場景的動態內部表示。在每一步,該模型選擇下一個位置,基於過去的信息和任務的需求。RAM的優勢在於更少的像素需要處理,減少了任務的復雜度。
· how, Attend and Tell: Neural Image Caption Generation with Visual Attention
· ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs
提出了3種方法在CNN中使用Attention機制:卷積前,池化時,兩種方法一起
· Attention is all you need
提出self-attention機制,不使用RNN或CNN等復雜的模型,僅僅依賴於Attention模型可以使訓練並行化且擁有全局信息,該模型在NLP上表現良好。
參考
https://kexue.fm/archives/4765 #《Attention is All You Need》淺讀(簡介+代碼)
https://kexue.fm/archives/6853 #從標准Attention到稀疏Attention
https://mp.weixin.qq.com/s/t6IboWbX5ztdscDqUjdxXg #Attention綜述:基礎原理、變種和最近研究
https://zhuanlan.zhihu.com/cvattention #機器視覺Attention機制的研究
https://mp.weixin.qq.com/s/EXVdjF6_Ik20uecfeB7uuQ #視覺注意力機制 | Non-local模塊與Self-attention的之間的關系與區別