近年來很多研究將nlp中的attention機制融入到視覺的研究中,得到很不錯的結果,於是,論文側重於從理論和實驗去驗證self-attention可以代替卷積網絡獨立進行類似卷積的操作,給self-attention在圖像領域的應用奠定基礎
論文: On the Relationship between Self-Attention and Convolutional Layers
Introduction
transformer的提出對NLP領域的研究有很大的促進作用,得益於attention機制,特別是self-attention,會考慮詞間的相似性,對當前詞進行加權輸出。受到詞間關系學習的啟發,self-attention也開始用於視覺任務中,但大都是attention和convonlution的結合。Ramachandran在19年的研究中,用full attention model達到了resnet baseline的精度,模型參數和計算量相比卷積網絡減輕了不少
因此,論文主要研究self-attention layer在圖片處理上是否能達到convolutional layer的效果,貢獻如下:
- 在理論層面,論文通過構造性證明self-attention layers能夠替代任何卷積層
- 在實際層面,論文通過構造multi-head self-attention layer進行實驗,證明attention-only架構的前幾層的確學習到了關注query pixel附近的g網格區域特征
Background on attention mechanisms for vision
The multi-head self-attention layer
定義$X\in \mathbb{R}^{T\times D_{in}}$為輸入矩陣,包含$T$個$D_{in}$維的token,在NLP中,token對應着序列化的詞,同樣地也可以對應序列化的像素
self-attention layer從$D_{in}$到$D_{out}$的計算如公式1,2所示,$A$為attention scores,softmax將score轉換為attention probabilities,該層的參數包含查詢矩陣(query matrix)$W_{qry}\in \mathbb{R}^{D_{in}\times D_k}$,關鍵詞矩陣(key matrix)$W_{key}\in \mathbb{R}^{D_{in}\times D_k}$,值矩陣(value matrix)$W_{val}\in \mathbb{R}^{D_{in}\times D_{out}}$,都用於對輸入進行變化,基本跟NLP中的self-attention一致
因為只考慮相關性,self-attention一個很重要的屬性是,不管輸入的順序如何改變,輸出都是不變的,這對於希望順序對結果有影響的case影響很大,因此在self-attention基礎上為每個token學習一個positional encoding參數,$P\in \mathbb{R}^{T\times D_{in}}$為包含位置信息的embedding向量,可以有多種形式
這里采用multiple heads版本的self-attention,每個head的參數矩陣都不一樣,能夠提取不同的特征,$N_h$個head輸出$D_h$維結果concat后映射成$D_{out}$維的最終輸出,兩個新參數,映射矩陣(projection matrix)$W_{out}\in \mathbb{R}^{N_hD_h\times D_{out}}$,偏置$b_{out}\in \mathbb{R}^{D_{out}}$
Attention for images
卷積是最適合神經網絡的圖片操作方法,給予圖片$X\in \mathbb{R}^{W\times H\times D_{in}}$,卷積在$(i,j)$的操作如公式5,$W\in \mathbb{R}^{K\times K\times D_{in}\times D_{out}}$,$b\in \mathbb{R}^{D_{out}}$,K為卷積核的大小
在圖片上應用self-attention,定義查詢像素和關鍵詞像素$q,k\in[W]\times [H]$,輸入的向量大小為$X\in \mathbb{R}^{W\times H\times D_{in}}$為了保持一致性,用1D的符號來代表2D坐標,比如$p=(i,j)$,用$X_p$代表$X_{ij}$,用$A_p$代表$A_{ij}$
Positional encoding for images
位置編碼目前主要有兩種,分別是絕對位置(absolute)編碼和相對(relative)位置編碼
在絕對位置編碼中,每個像素擁有一個位置向量$P_p$(學習的或固定的),於是公式2可以轉換為公式7
相對位置編碼的核心是只考慮查詢像素和查詢像素之間的位置差異,如公式8,大體是將公式7的每一項的絕對位參數改為相對位置參數。attention scores只跟偏移$\delta:=k-q$,$u$和$v$是learnable參數,每個head都不一樣,而每個偏移的相對位置編碼$r_\delta\in \mathbb{R}^{D_p}$是head共享的。關鍵詞權重分成了兩部分,$W_{key}$屬於輸入,$\widehat {W}_{key}$屬於偏移
公式9稱為二次編碼(quadratic encoding),參數$\Delta{(h)}=(\Delta_1{(h)},\Delta_2{(h)})$和$\alpha{(h)}$分別代表中心點以及attention區域的大小,都是通過學習得來的,而$\delta=(\delta_1,\delta_2)$則是固定的,代表查詢像素和關鍵詞像素的相對位移
Self-attention as a convolutional layer
定理1,對於multi-head self-attention,$N_h$個head,每個head輸出$D_h$維,整體最終輸出$D_{out}$,相對位置編碼$D_p\ge 3$維,可以表示任何卷積,核大小為$\sqrt{N_h}\times \sqrt{N_h}$,output channel為$min(D_h,D_{out})$
對於output channel不是固定$D_{out}$,論文認為當$D_h<D_{out}$時,$W_{out}$相當於一個升維操作,這個操作的特征提取不能代表原始卷積的屬性,實際中,一般采用$D_h=D_{out},$這里是我的個人理解,可能有錯誤
上面的定理表明,在選擇適當的參數后,multi-head self-attention layer可以表現得跟卷積層一樣,每個head的attention score關注不同偏移距離的像素,偏移值分別在集合$\Delta_K={-\lfloor K/2\rfloor,...,\lfloor K/2\rfloor}$內,這樣整體就類似於$K\times K$核,如圖1所示
卷積神經網絡不止卷積核大小這個超參,還有很多其它超參,這里論文對輸出的數值的一致性上進行了解釋:
- Padding: multi-head self-attention layer默認使用"SAME"的填充模式,而卷積層會減小K-1個像素的圖片大小,因此,為了減少邊界影響,可以對卷積圖片進行$\lfloor K/2\rfloor$的零填充
- Stride: 卷積神經網絡的步長可以認為是在卷積后面加入一個pooling操作,而Theorem 1默認步長為1,但可以在后面接個pooling達到相同的結果
- Dilation: 因為multi-head self-attention可以設置任意的偏移值,因此也可以代表空洞卷積
Experiments
實驗的主要目的在於驗證self-attention進行類似卷積的操作,以及self-attention在實際中是否學習到了類似卷積的屬性,包含3種類似的attention,分別為quadratic embedding,learned embedding和learnded embedding + content,具體可以看作者開源代碼的attention score計算部分。根據作者的解答,前兩種都對應於代碼的第一種注釋,區別在前者按照公式9來計算$r_{\delta}$,后者則是完全隨機學習來的,最后一種則對應注釋的第三種
Implementation details
搭建一個包含6層multi-head self-attention的神經網絡,實驗主要和標准ResNet18對比,固定的圖片輸入,最后使用average pooling將結果送給分類器
結果如圖2和Table1所示,ResNet收斂更快,但不能確定這是卷積固有的屬性還是結構優化帶來的結果,由於實驗的結構還是很naive的,所以會存在差距,通過一些優化手段應該可以解決
Quadratic encoding
論文進行實驗驗證公式9的相對位置編碼$r_{\delta}$是否學習到了類似卷積的操作,實驗使用9個head來模擬$3\times 3$卷積操作
從圖3可以看出, 網絡第四層中各head的位置變化,在經過優化后,各head關注的pixel形式類似於grid的分布,可見的確學到了類似卷積核的操作
圖4則展示了不同層的head分布,可以看到層1和2更關注local區域,而層3-6更關注更大的區域
Learned relative positional encoding
首先,論文去除了與輸入數據相關的attention內容,僅考慮公式8的最后一項進行統計,結果如圖5所示,層1-3非常接近查詢區域,而深層數據則更關注整圖的信息
接着使用論文對positional attention和content-based attention進行了分析$(q^\intercal r+q^\intercal k)$,將100張圖的attention probabilities進行了平均結果如圖6所示。在層2和3中,盡管輸入的數據不一樣,但一些head學到了去關注查詢像素附近的特定區域的像素這一行為,與卷積操作十分類似,而其它的head則使用了更多的content-based attention。在實際中,圖6中的localized attention patterns是隨着查詢像素移動的,這與卷積操作更加類似,想請可以看 https://epfml.github.io/attention-cnn/
CONCLUSION
論文展示了self-attention layers可以表示任意convolutional layer的行為,以及full-attentional模型能夠學會如何結合local behavior和基於輸入內容global attention。在未來,可以將卷積網絡的優化方法遷移到full-attention模型上,應用於不同數據領域的模型,例如圖像,文字和時間序列
感謝
在論文閱讀期間遇到了很多問題,給作者發了郵件后,很耐心地回答了我的問題,在這里十分感謝作者Jean-Baptiste Cordonnier
參考內容
寫作不易,未經允許不得轉載~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】