您當前的位置:首頁 > 攝影

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

作者:由 AI科技評論 發表于 攝影時間:2020-02-18

作者 | VincentLee

​責編 | 賈偉

本文來源於公眾號:曉飛的演算法工程筆記

近年來很多研究將NLP中的attention機制融入到視覺的研究中,得到很不錯的結果。這篇發表於 ICLR 2020 的論文側重於從理論和實驗去驗證self-attention可以代替卷積網路獨立進行類似卷積的操作,給self-attention在影象領域的應用奠定基礎。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

論文地址:

https://

arxiv。org/abs/1911。0358

4

論文程式碼:

https://

github。com/epfml/attent

ion-cnn

Transformer的提出對NLP領域的研究有很大的促進作用,這主要得益於attention機制,特別是自注意力(self-attention),它會考慮詞間的相似性,對當前詞進行加權輸出。受到詞間關係學習的啟發,自注意力也開始用於視覺任務中,但大都是注意力和卷積的結合。Ramachandran 在2019年的研究中,用完全注意力模型(full attention model)達到了ResNet baseline的精度,模型引數和計算量相比卷積網路減輕了不少。

這篇論文主要研究自注意力層在圖片處理上是否能達到卷積層的效果。貢獻​有兩點:

在理論層面,論文透過構造性證明自注意力層能夠替代任何卷積層。

在實際層面,論文透過構造多頭自注意力曾進行實驗,證明attention-only架構的前幾層的確學習到了關注query pixel附近的 g網格區域特徵。

背景

多頭自注意力層

定義

X \in R^{T\times D_{in}}

為輸入矩陣,包含

T

D_{in}

維的token,在NLP中,token對應著序列化的詞,同樣地也可以對應序列化的畫素

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

自注意力層從

D_{in}

D_{out}

的計算如公式1, 2所示,

A

為attention scores,softmax將score轉換為注意力機率,該層的引數包含查詢矩陣(query matrix)

W_{qry}\in R^{D_{in}\times D_k}

,關鍵詞矩陣(key matrix)

W_{key} \in R^{D_{in}\times D_{k}}

,值矩陣(value matrix)

W_{val} \in R^{D_{in}\times D_{out}}

,都用於對輸入進行變化,基本跟NLP中的自注意力一致:

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

因為只考慮相關性,自注意力一個很重要的屬性是,不管輸入的順序如何改變,輸出都是不變的,這對於希望順序對結果有影響的case影響很大,因此在自注意力基礎上為每個token學習一個positional encoding引數,

P\in R^{T\times D_{in}}

為包含位置資訊的嵌入向量,可以有多種形式

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

這裡採用multiple heads版本的自注意力,每個head的引數矩陣都不一樣,能夠提取不同的特徵,

N_h

個head輸出

D_h

維結果concat後對映成

D_{out}

維的最終輸出,兩個新引數,對映矩陣(projection matrix)

W_{out} \in R^{N_h D_h \times D_{out}}

,偏置

b_{out}\in R^{D_{out}}

圖注意力

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

卷積是最適合神經網路的圖片操作方法,給予圖片

X\in R^{W\times H \times D_{in}}

,卷積在

(i,j)

的操作如公式5,

W\in R^{K\times K \times D_{in } \times D_{out}}

b\in R^{D_{out}}

,K為卷積核的大小。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

在圖片上應用自注意力,定義查詢畫素和關鍵詞畫素

q

k\in [W]\times [H]

輸入的向量大小為

X\in R^{W\times H \times D_{in}}

為了保持一致性,用1D的符號來代表2D座標,比如

p=(i,j)

,用

X_p

代表

X_{ij}

,用

A_p

代表

A_{ij}

圖位置編碼

位置編碼目前主要有兩種,分別是絕對位置(absolute)編碼和相對(relative)位置編碼。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

在絕對位置編碼中,每個畫素擁有一個位置向量

P_p

(學習的或固定的),於是公式2可以轉換為公式(7)。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

相對位置編碼的核心是隻考慮查詢畫素和查詢畫素之間的位置差異,如公式(8),大體是將公式(7)的每一項的絕對位引數改為相對位置引數。attention scores只跟偏移

\delta := k-q

u

v

是learnable引數,每個head都不一樣,而每個偏移的相對位置編碼

r_{\delta} \in R^{D_{p}}

是head共享的。關鍵詞權重分成了兩部分,

W_{key}

屬於輸入,

\hat{W}_{key}

屬於偏移。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

公式(9)稱為二次編碼(quadratic encoding),引數

\Delta^{(h)} = (\Delta^{(h)}_1, \Delta^{(h)}_2)

\alpha^{(h)}

分別代表中心點以及attention區域的大小,都是透過學習得來的,而

\delta =(\delta _1 , \delta _2)

則是固定的,代表查詢畫素和關鍵詞畫素的相對位移。

作為卷積層的自注意力

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

定理1:

對於多頭自注意力,

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}

,這裡是我的個人理解,可能有錯誤。小於

d_{out}

時,

w_{out}

相當於一個升維操作,這個操作的特徵提取不能代表原始卷積的屬性,實際中,一般採用

d_h=d_{out}

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

上面的定理表明,在選擇適當的引數後,多頭自注意力層可以表現得跟卷積層一樣,每個head 的 attention score 關注不同偏移距離的畫素,偏移值分別在集合

\Delta_K = - \lfloor K/2 \rfloor, ...,  \lfloor K/2 \rfloor

內,這樣整體就類似於

K\times K

核,如圖1所示。

卷積神經網路不止卷積核大小這個超參,還有很多其它超參,這裡論文對輸出的數值的一致性上進行了解釋:

Padding:多頭自注意力層預設使用“SAME”的填充模式,而卷積層會減小K-1個畫素的圖片大小,因此,為了減少邊界影響,可以對卷積圖片進行的零填充;

Stride:卷積神經網路的步長可以認為是在卷積後面加入一個pooling操作,而定理 1 預設步長為1,但可以在後面接個pooling達到相同的結果;

Dilation: 因為多頭自注意力可以設定任意的偏移值,因此也可以代表空洞卷積。

實驗

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

實驗的主要目的在於驗證自注意力進行類似卷積的操作,以及自注意力在實際中是否學習到了類似卷積的屬性,包含 3 種類似的注意力,分別為quadratic embedding,learned embedding和learnded embedding + content,具體可以看作者開原始碼的attention score計算部分。根據作者的解答,前兩種都對應於程式碼的第一種註釋,區別在前者按照公式9來計算

r_{\delta}

,後者則是完全隨機學習來的,最後一種則對應註釋的第三種。

實現細節

搭建一個包含6層多頭自注意力的神經網路,實驗主要和標準ResNet18對比,固定的圖片輸入,最後使用average pooling將結果送給分類器。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

結果如圖2和Table1所示,ResNet收斂更快,但不能確定這是卷積固有的屬性還是結構最佳化帶來的結果,由於實驗的結構還是很naive的,所以會存在差距,透過一些最佳化手段應該可以解決。

二次編碼

論文進行實驗驗證公式(9)的相對位置編碼

r_{\delta}

是否學習到了類似卷積的操作,實驗使用 9 個head來模擬

3\times 3

卷積操作。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

從圖3可以看出, 網路第四層中各head的位置變化,在經過最佳化後,各head關注的pixel形式類似於grid的分佈,可見的確學到了類似卷積核的操作。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

圖4則展示了不同層的head分佈,可以看到層1和2更關注local區域,而層3-6更關注更大的區域。

學習相對位置編碼

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

首先,論文去除了與輸入資料相關的注意力內容,僅考慮公式(8)的最後一項進行統計,結果如圖5所示,層1-3非常接近查詢區域,而深層資料則更關注整圖的資訊。

ICLR 2020 | 拋開卷積,多頭自注意力能夠表達任何卷積操作

接著使用論文對位置注意力和基於內容的注意力進行了分析

(q^{\top} r + q^{\top} k)

,將100張圖的注意力機率進行了平均結果如圖 6 所示。在層 2 和 3 中,儘管輸入的資料不一樣,但一些head學到了去關注查詢畫素附近的特定區域的畫素這一行為,與卷積操作十分類似,而其它的head則使用了更多的content-based attention。在實際中,圖6中的localized attention patterns是隨著查詢畫素移動的,這與卷積操作更加類似,詳情可以看

https://

epfml。github。io/attenti

on-cnn/

結論

論文展示了自注意力層可以表示任意卷積層的行為,以及完全注意力模型能夠學會如何結合區域性行為和基於輸入內容全域性注意力。在未來,可以將卷積網路的最佳化方法遷移到完全注意力模型上,應用於不同資料領域的模型,例如影象,文字和時間序列。

感謝

在論文閱讀期間遇到了很多問題,給作者發了郵件後,很耐心地回答了我的問題,在這裡十分感謝作者Jean-Baptiste Cordonnier。

標簽: 卷積  注意力  Attention  head  畫素