雖然 Self-Attention 最初在 Transformer 中被使用的時候,是用來解決 NLP 的問題,但後來也有人把 Self-Attention 的機制用在 image 上面,並且在 CV 的一些 task 中,transformer-based 的 model 甚至能打敗 ResNets 成為 SOTA。
於是開始有人研究 self-attention 是否能取代 CNN 呢?
比方說,我們在 image 上的每個 pixel 使用 self-attention 的 KQV 計算方法,假如我們使用的 9 個 attention head 每個都能 attend 在 query pixel 周圍的單個 pixel 上,那它做的事情就像是 3*3 的 CNN filter 一樣。
2020 年一篇發表在 ICLR 的 paper: ON THE RELATIONSHIP BETWEEN SELF-ATTENTION AND CONVOLUTIONAL LAYERS,就從理論以及實驗上證明 Multi-head self-attention 可以看成 CNN 的強化版本。
如果說 Convolution layer 中的 filter 是人為劃定出一個固定大小和形狀的 receptive field(ex: 33),並且每個 pixel 都只考慮自己這個 receptive field 裡面的資訊;Self-attention 就是在考慮整張圖片的 pixel 後,跟每個 pixel 計算 querykey 的值,以找出與自己相關的 pixel,可以說是由模型自己學出 receptive filed 應該要是什麼形狀、範圍應該要有多大多小。所以基本上,self-attention 只要設定合適的參數,CNN 能做到的事情他都可以做到。
但是雖然理論上是這樣,實際上在 CV 任務中使用 self-attention,model 的行為還會跟 CNN 一樣嗎?
這篇 paper 的作者 implement 兩個分別有 6 層和 9 層的 fully-attentional model,並 train 在 CIFAR-10 做圖像分類的任務,也提供 demo web 來視覺化每個 query pixel 在各 layer 的 attention map。
我在他們的 demo web 上,選擇鯊魚那張圖片的任意一個 pixel 當成 query pixel。
可以發現基本上下面 9 個 attention head 都會各司其職,各自關注在圖片中不同的區域,且隨著 layer 逐漸加深,後面幾層 attention head 都是關注比較 global 的 patch,相較前幾層通常只關注在局部特徵,後面幾層被賦予較高的 attention probability 的 pixel 幾乎都分散在整張圖片上。
確實發現 self-attention 表現出一些和 CNN 相似的特性,