External Attention:外部注意力機制


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的相關情況。


Top  ---  Bottom

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}\)。則自注意力機制的計算公式為:

\[\begin{align} A = \left ( \alpha _{i,j} \right ) &= softmax\left ( QK^{T} \right )\\ F_{out} &= AV \end{align} \]

簡化版的注意力機制如下:

它的計算公式為:

\[\begin{align} A &= softmax\left (FF^{T} \right )\\ F_{out} &= AF \end{align} \]

基於上面的公式不難發現,注意力特征圖是計算像素級的相似度,輸出是輸入的精確特征表示。

即使公式(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\%\)的計算量,這還只是一層,當然上面的計算方式有待商榷,但這也說明了計算量的增長是非常迅猛的,而且在高級語義特征圖中,通道數會更大,一定程度上幾乎會導致在所有層級上計算量都有很大的提升。當然這個增長是呈現指數倍率增長,所以我們需要提升精度的同時,提升速度、優化資源占用。


Top  ---  Bottom

1.2 外部注意力機制

經過實驗得知:自注意力機制是一個\(N-to-N\)的注意力矩陣,可視化像素之間的關系,可以發現這種相關性是比較稀疏的,即很多是冗余信息。因此清華團隊提出了一個外部注意力模塊。

它的注意力計算是在輸入像素與一個外部記憶單元\(M\in \mathbb{R}^{S\times d}\)之間:

\[\begin{align} A &= Norm\left (FM^{T} \right )\\ F_{out} &= AM \end{align} \]

注意與自注意力機制不同,上式(5)是第\(i\)個像素點與\(M\)\(j\)行的相似度。這里\(M\)是一個輸入Input的可學習相關性參數,作為訓練數據集的全局記憶。\(A\)是從先驗信息得來的注意力特征圖,Norm操作和自注意力一樣。最終,通過\(A\)來更新\(M\)

另外,我們用兩種不同的記憶單元:\(M_{k}\)\(M_{v}\)來增加網絡的建模能力。

最終外部注意力機制的計算公式為:

\[\begin{align} A &= Norm\left (FM^{T}_{k} \right )\\ F_{out} &= AM_{v} \end{align} \]

經過上面的公式,外部注意力機制的復雜度\(O(dSN)\)。這里的\(d\)\(S\)是一個超參數,經過實驗,作者發現\(S\)設置為64效果挺好。因此外部注意力機制比自注意力機制更高效,並且它可以直接應用於大尺寸的輸入。


Top  ---  Bottom

2、思考

  1. 計算量的降低和特征圖的大小關系很大,這里的外部注意力機制的\(S\)設置為64,那么特征圖的像素個數低於64時,實際它的計算量就更大。
  2. Swin Transformer是基於窗口進行自注意力計算的,window size作者使用的是7,像素個數\(N=49\),這也小於\(64\),所以同等情況下,外部注意力會有更大的計算量。

Top  ---  Bottom

完!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM