External Attention:外部注意力機制
作者: elfin
最近Transformer在CV領域的研究非常熱,如ViT、BoTNet、External Attention等。使用Transformer的傳統印象就是慢,這種慢還往往是我們不能接受的推理速度。在最近的實驗中,基於單張2080TI,使用ResNet-34實現了batch_size為\(288\),圖片大小為\(32\times200\),每個epoch的訓練用時大約為:5個小時;同樣的實驗環境下,我實驗了Swin Transformer的結構,在stage1實驗卷積進行下采樣(實現embedding的效果),stage2~stage4使用Swin block,block的數量分別為[2, 8, 2],stage5使用兩層卷積進行簡單的任務適配。這個結構在訓練時,batch_size設置到\(42\),圖片大小修改為\(32\times240\),每個epoch的訓練用時大約為17個小時。Swin Transformer原作者聲稱其比卷積網絡性能好,速度快,經過實驗,實際上CNN的推理速度要比Transformer快,性價比方面Transformer確實是更高一些,但是其龐大的參數量也導致模型不太好訓練。經過實驗對比,在我的數據集上,Swin Transformer提升了將近7個百分點(epoch較少)。
雖然自注意力有那么多優點,但是這推理速度慢,耗資源的特點讓我們這些缺硬件的渣渣很難受,然后就在前幾天,突然看見清華、谷歌等大佬團隊在做\(Transformer\rightarrow MLP\)的操作,當然這里不是指簡單返祖現象,以清華的工作為例,它將二次復雜度降到線性復雜度,這個特性有成功吸引到我,所以,下面是清華的External Attention的相關情況。
1、External Attention
1.1 自注意力機制
首先回顧 self-attention機制,常見的自注意力如圖所示:

對於給定的輸入特征圖\(F\in \mathbb{R}^{N\times d}\),其中\(N\)是像素個數,\(d\)是特征維度;自注意力產生了查詢矩陣\(Q\in \mathbb{R}^{N\times {d}'}\),鍵矩陣\(K\in \mathbb{R}^{N\times {d}'}\),和值矩陣\(V\in \mathbb{R}^{N\times d}\)。則自注意力機制的計算公式為:
簡化版的注意力機制如下:

它的計算公式為:
基於上面的公式不難發現,注意力特征圖是計算像素級的相似度,輸出是輸入的精確特征表示。
即使公式(3)(4)簡化了,但是其計算復雜度仍然是\(O\left ( dN^{2} \right )\)。我們注意到隨着特征圖的增大,計算量的增大往往是我們無法接受的。以我上面的實驗為例:
- \(32\times200\)的計算量為:\(192\times\left ( 32\times200 \right )^{2}=7864320000\)
- \(32\times240\)的計算量為:\(192\times\left ( 32\times240 \right )^{2}=11324620800\)
大約增加了\(40\%\)的計算量,這還只是一層,當然上面的計算方式有待商榷,但這也說明了計算量的增長是非常迅猛的,而且在高級語義特征圖中,通道數會更大,一定程度上幾乎會導致在所有層級上計算量都有很大的提升。當然這個增長是呈現指數倍率增長,所以我們需要提升精度的同時,提升速度、優化資源占用。
1.2 外部注意力機制
經過實驗得知:自注意力機制是一個\(N-to-N\)的注意力矩陣,可視化像素之間的關系,可以發現這種相關性是比較稀疏的,即很多是冗余信息。因此清華團隊提出了一個外部注意力模塊。
它的注意力計算是在輸入像素與一個外部記憶單元\(M\in \mathbb{R}^{S\times d}\)之間:
注意與自注意力機制不同,上式(5)是第\(i\)個像素點與\(M\)第\(j\)行的相似度。這里\(M\)是一個輸入Input的可學習相關性參數,作為訓練數據集的全局記憶。\(A\)是從先驗信息得來的注意力特征圖,Norm操作和自注意力一樣。最終,通過\(A\)來更新\(M\)。
另外,我們用兩種不同的記憶單元:\(M_{k}\)和\(M_{v}\)來增加網絡的建模能力。
最終外部注意力機制的計算公式為:
經過上面的公式,外部注意力機制的復雜度是\(O(dSN)\)。這里的\(d\)、\(S\)是一個超參數,經過實驗,作者發現\(S\)設置為64效果挺好。因此外部注意力機制比自注意力機制更高效,並且它可以直接應用於大尺寸的輸入。
2、思考
- 計算量的降低和特征圖的大小關系很大,這里的外部注意力機制的\(S\)設置為64,那么特征圖的像素個數低於64時,實際它的計算量就更大。
- Swin Transformer是基於窗口進行自注意力計算的,window size作者使用的是7,像素個數\(N=49\),這也小於\(64\),所以同等情況下,外部注意力會有更大的計算量。
完!