在如今的機器學習和深度學習領域,注意力機制絕對是一個熱度居高不下的話題。事實上,注意力機制并不是一個全新的概念,早在多年前就已經被提出并應用。比如在圖像分類任務中,SENet 和 ECA-Net 等模型中都運用了注意力機制,它們通過對圖像特征的篩選和聚焦,提升了模型對圖像的分類準確率,這些模型的成功也初步展示了注意力機制在處理圖像數據時的強大能力。
而真正讓注意力機制火爆起來的,是谷歌發表的那篇具有里程碑意義的論文《Attention Is All You Need》。這篇論文最初是針對自然語言處理(NLP)領域的,它提出的 Transformer 架構以及自注意力機制,徹底改變了 NLP 任務的處理方式,使得模型在文本生成、機器翻譯等任務上取得了顯著的性能提升。有趣的是,這種強大的注意力機制不僅僅局限于 NLP 領域,在計算機視覺(CV)領域也逐漸嶄露頭角。越來越多的研究人員開始將注意力機制引入到 CV 任務中,比如圖像生成、目標檢測等。在這些任務中,注意力機制能夠幫助模型更好地聚焦于圖像中的關鍵信息,忽略無關的噪聲和干擾,從而提高模型的性能和泛化能力。
現在,幾乎在許多不同領域的論文中,我們都能看到注意力機制的身影。很多研究人員為了提高模型的性能,都會選擇加入注意力機制模塊。這些模塊就像是模型的 “眼睛”,讓模型能夠更加智能地處理數據,捕捉到數據中那些重要的特征和模式。
一、注意力機制:Attention
1.1 什么是注意力機制?
在日常生活中,我們時刻都在運用著注意力機制。比如與人見面時,我們往往會第一時間將目光聚焦在對方的臉部,因為臉部包含了大量用于識別身份、解讀情緒的關鍵信息;閱讀文章時,標題會率先吸引我們的視線,它像是文章的 “縮影”,能快速傳遞核心主題;而閱讀段落時,開頭部分通常是作者闡述觀點、引出下文的重要位置,所以我們會著重關注。通過這些例子,我們能對注意力機制有一個初步的感性認識。
從本質上來說,注意力機制的靈感來源于人類處理外部信息的方式。在現實世界中,我們每一刻接收到的信息既龐大又復雜,像視覺上看到的周圍環境、聽覺上捕捉到的各種聲音等,遠遠超出了人腦的即時處理能力。如果大腦試圖對所有信息都進行同等程度的處理,不僅效率低下,還會消耗過多精力。因此,人類在處理信息時,會本能地將注意力集中在那些對當前任務、目標更重要或更相關的信息上,同時對無關緊要的外部信息進行過濾和弱化處理,這種信息篩選和聚焦的方式,就是我們所說的注意力機制。
在深度學習領域,對于人類而言可以理解為 “關注度” 的注意力機制,在機器模型中體現為對不同信息賦予不同的權重,這些權重通常是介于 0 到 1 之間的小數。權重數值越大,意味著模型對該部分信息的 “關注度” 越高,認為其越重要;權重數值越小,則表示該部分信息相對不那么重要,會被模型在處理過程中適當弱化。通過這種方式,機器模型能夠像人類一樣,聚焦關鍵信息,忽略次要信息,從而更高效地完成數據處理和任務執行。
1.2 如何運用注意力機制?
1.2.1 Query&Key&Value
在深入理解注意力機制的運作過程之前,我們需要先掌握三個重要概念:查詢(Query)、鍵(Key)和值(Value)。
查詢(Query)可以看作是我們主動提出的一個 “問題” 或者 “尋找目標” 的依據,它是由我們的主觀意識生成的特征向量。比如我們在思考 “什么樣的電影適合周末放松”,這個思考過程所蘊含的特征信息就是 Query。
鍵(Key)則是被用來與查詢進行比對的信息項,它代表了客觀存在的物體或數據的突出特征信息向量。例如電影的類型、主演、評分等信息,這些都可以作為 Key,用于和我們的查詢需求進行匹配。
值(Value)代表著物體本身完整的特征向量,它通常和 Key 成對出現。就像電影的詳細劇情介紹、完整的視頻資源等,這些就是與電影相關特征 Key 對應的 Value。
在注意力機制中,其核心就是通過 Query 與 Key 之間的交互,也就是注意力匯聚的過程,來實現對 Value 的注意力權重分配,最終生成符合我們需求的輸出結果。具體來說,就是先計算 Query 與 Key 的相關性,根據這個相關性去篩選出最合適的 Value,并為其賦予相應的權重,從而突出重要信息,弱化次要信息。
1.2.2 注意力機制計算過程
注意力機制的計算過程主要分為三個階段,下面我們結合具體的數學表達和計算步驟來詳細說明:
- 輸入 Query、Key、Value:首先,我們將 Query、Key 和 Value 作為輸入數據提供給注意力機制模型。這里的 Query、Key 和 Value 通常都是向量形式的數據,它們的維度可能根據具體任務和數據特點有所不同。
- 階段一:計算相關性或相似性:在這個階段,我們需要根據 Query 和 Key 計算兩者之間的相關性或相似性,從而得到注意力得分。常見的計算方法有點積運算、余弦相似度計算,以及使用多層感知機(MLP)網絡等。
- 點積運算:假設 Query 向量為?
,Key 向量為?
,通過點積運算得到注意力得分? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 點積結果越大,說明 Query 和 Key 的相關性越高。
- 余弦相似度:余弦相似度通過計算兩個向量夾角的余弦值來衡量它們的相似程度,公式為? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 其中?
?和?
?分別是 Query 和 Key 向量的 L2 范數。余弦相似度的值越接近 1,表示兩個向量越相似;越接近 -1,表示越不相似;接近 0 則表示兩者相關性較低。
- MLP 網絡:將 Query 和 Key 拼接或分別輸入到一個多層感知機網絡中,通過網絡的運算輸出一個數值作為注意力得分。這種方式可以學習到更復雜的 Query 和 Key 之間的關系模式。
- 點積運算:假設 Query 向量為?
- 階段二:縮放與 Softmax 處理:得到注意力得分后,為了更好地調整得分分布并突出重要信息的權重,我們會進行縮放(scale)操作,通常是將注意力得分除以維度?
?的平方根,即? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 縮放操作有助于避免在計算 Softmax 時,因得分值過大導致 Softmax 函數梯度消失等問題。
接著,我們對縮放后的得分應用 Softmax 函數,公式為
,
其中?n?是 Key 的數量。Softmax 函數有兩個重要作用:一方面,它對原始的計算分值進行歸一化處理,使得所有元素的權重之和為 1,將其整理成一個概率分布,這樣每個權重值都可以看作是對應 Value 被選中的概率;另一方面,通過 Softmax 函數的指數運算和歸一化特性,能夠更加突出得分較高(即更重要)元素的權重,相對弱化得分較低元素的權重。
? ? ?4.?階段三:加權求和:在得到注意力權重后,我們根據這些權重系數對 Value 值進行加權求和,從而得到最終的 Attention Value。假設 Value 向量為??,注意力權重為:
??,
那么 Attention Value 的計算公式為:
?。
經過這個步驟,生成的 Attention Value 包含了注意力信息,模型對更重要的信息給予了更高的權重關注,而相對不重要的信息則在加權求和過程中被適當弱化,從而實現了對關鍵信息的聚焦和篩選。
這三個階段緊密相連,共同構成了注意力機制從輸入數據到輸出關鍵信息的完整計算過程,使得模型能夠像人類一樣,在大量的數據中捕捉和利用最重要的信息。
二、自注意力機制:Self-Attention
2.1 什么是自注意力機制?
在深度學習領域,當我們處理諸如文本、圖像等數據時,數據往往被表示為多個大小各異的向量。以文本為例,每個單詞都可以被編碼成一個向量,這些向量之間存在著復雜的語義關系;在圖像中,不同區域對應的向量也蘊含著空間和內容關聯。然而,傳統的全連接神經網絡在處理這些相關輸入時,難以充分挖掘和利用向量之間的內在聯系,導致模型訓練效果不佳,無法準確捕捉數據的關鍵特征和模式。
自注意力機制正是為了解決這一問題而誕生的。它是注意力機制的一種特殊變體,同時也是一種獨特的網絡架構設計。其核心目標是讓模型能夠自動關注輸入數據內部不同部分之間的相關性,從而更好地理解數據的整體結構和語義信息。
在自注意力機制中,有一個關鍵特點:查詢(Query)、鍵(Key)和值(Value)這三個重要元素,要么完全相同,要么都來源于同一個輸入數據 ,我們記為X。也就是說,自注意力機制是從輸入數據X自身出發,去尋找其中的關鍵信息,聚焦重要部分,弱化不重要的部分。它與一般注意力機制不同,不是在輸入和輸出數據之間建立注意力關系,而是在輸入數據內部元素之間,或者輸出數據內部元素之間進行注意力計算 。
我們可以通過與一般注意力機制對比,更清晰地理解自注意力機制的特點:
- 一般注意力機制:在常見的 Encoder-Decoder 模型(比如機器翻譯模型)中,查詢(Q)和鍵(K)來自不同的地方。以中譯英模型為例,中文句子經過編碼器(Encoder)處理后,轉化為一組包含語義信息的特征表示,這些就是鍵(K);而解碼器(Decoder)在生成英文句子的過程中,會根據當前生成的英文單詞生成對應的特征表示,作為查詢(Q)。模型通過 Q 和 K 的交互,決定下一個要生成的英文單詞,即注意力機制建立在輸入(中文句子)和輸出(英文句子生成過程)之間 。
- 自注意力機制:查詢(Q)和鍵(K)都來自同一組元素。同樣在 Encoder-Decoder 模型中,在編碼器(Encoder)處理中文句子時,自注意力機制會讓中文句子內部的各個詞向量(即同一組元素)之間相互計算注意力。比如在處理 “我愛中國” 這句話時,自注意力機制會計算 “我”“愛”“中國” 這些詞向量之間的相關性,挖掘句子內部的語義聯系。在圖像領域,也可以理解為同一張圖像中不同圖像塊(patch)之間相互進行注意力計算 。因此,自注意力機制也被稱為內部注意力機制。
2.2 如何運用自注意力機制?
自注意力機制的計算步驟與一般注意力機制類似,但由于其 Q、K、V 的特殊來源,在具體應用中有自身特點,具體過程如下:
第 1 步:得到 Q,K,V 的值
假設我們的輸入數據是一組向量,其中
代表第i個向量,n是向量的總數。對于每一個向量
,我們分別讓它與三個可學習的權重矩陣
、
、
相乘 ,得到對應的查詢(Query)、鍵(Key)和值(Value)向量:
這里的、
、
是我們需要通過模型訓練學習得到的參數矩陣,d是輸入向量
的維度,
和
分別是查詢(Q)、鍵(K)和值(V)向量的維度。通過這樣的矩陣乘法運算,我們為每個輸入向量生成了對應的 Q、K、V 表示 。
第 2 步:Matmul
得到 Q 和 K 后,我們需要計算每兩個輸入向量之間的相關性,通常使用點積運算來計算每個向量的得分(score) :
這里的表示第i個向量的查詢
與第j個向量的鍵
之間的相關性得分。通過這種方式,我們可以得到一個
的得分矩陣,矩陣中的每一個元素都反映了兩個輸入向量之間的關聯程度 。
第 3 步:Scale+Softmax
為了避免點積運算后得分值過大,導致 Softmax 函數梯度消失等問題,我們對得到的得分進行縮放(Scale)操作。具體是將得分除以,
是鍵(K)向量的維度 :
然后,對縮放后的得分應用 Softmax 函數,將其轉化為概率分布形式的權重系數:
?
經過 Softmax 處理后,每個的值都介于 0 到 1 之間,且對于每一行i,所有列的
之和為 1。這些權重系數表示了第i個向量對其他各個向量的關注程度 。
第 4 步:Matmul
最后,我們使用得到的權重矩陣與值(V)向量進行加權求和運算。對于每個向量,其經過自注意力機制后的輸出
計算如下:
通過這個加權求和過程,每個輸出向量都融合了輸入數據中所有向量的信息,并且根據計算得到的注意力權重,重點關注了與自身相關性更高的向量信息 。
以 “Thinking Machines” 這句話為例,經過上述自注意力機制的計算過程,我們會得到兩個新向量和
,分別對應 “Thinking” 和 “Machines” 這兩個詞的新向量表示。其中
雖然依然是 “Thinking” 的詞向量,但它不再僅僅是原始的詞向量,而是融入了 “Thinking Machines” 這句話中各個單詞與 “Thinking” 的相關性信息,突出了在整個句子語境下與 “Thinking” 相關的重要內容 。
2.3 自注意力機制的問題
盡管自注意力機制在捕捉數據內部相關性方面表現出色,但它也存在一些局限性:
- 有效信息抓取能力:自注意力機制的核心是篩選輸入數據中的重要信息,過濾不重要信息。然而,相比卷積神經網絡(CNN),它在利用數據的先驗結構信息方面存在不足。例如在圖像數據中,CNN 能夠天然利用圖像的尺度不變性(圖像縮放后語義不變)、平移不變性(圖像平移后特征不變),以及圖像的特征局部性(相鄰圖像區域往往具有相似特征,同一物體的信息集中在局部)等特性 。而自注意力機制缺乏這種對數據結構的內置理解,只能依賴大量數據進行學習來發現規律。因此,在數據量較小的情況下,自注意力機制難以建立準確的全局關系,其性能往往不如 CNN;只有在大數據支撐下,它才能充分發揮捕捉長距離依賴關系的優勢 。
- 位置信息利用:自注意力機制在計算過程中,平等地考慮了所有輸入向量,沒有顯式地引入向量的位置信息 。但在實際應用中,特別是文字處理問題里,詞語在句子中的位置至關重要。比如在自然語言中,動詞通常很少出現在句首,名詞在不同位置可能有不同的語法和語義角色。由于自注意力機制沒有內置的位置信息處理方式,如果不額外進行位置編碼(如在 Transformer 中加入位置編碼向量),模型就無法區分相同詞語在不同位置的差異,可能影響對數據語義的準確理解 。
三、多頭注意力機制:Multi-Head Self-Attention
通過前面的學習,我們知道自注意力機制存在一定缺陷。在對數據進行處理時,模型在編碼某個位置的信息時,往往會過度聚焦于該位置自身,導致在抓取有效信息方面能力不足,尤其難以全面捕捉數據中不同距離的依賴關系,比如句子中相隔較遠詞匯間的語義關聯。為了解決這些問題,多頭注意力機制應運而生,并且在實際應用中被廣泛使用。
3.1 什么是多頭注意力機制?
在實際的深度學習任務中,當我們向模型輸入相同的查詢(Query)、鍵(Key)和值(Value)集合時,我們期望模型不僅僅以單一的方式處理這些數據,而是能夠從多個角度去理解和學習數據的特征,進而學到不同的 “行為模式” 。這里所說的 “行為模式”,可以理解為模型關注數據不同方面、捕捉不同特征關系的方式。然后,把這些從不同角度學到的 “行為模式” 整合起來,就能夠更全面地捕獲數據序列內部各種范圍的依賴關系,無論是近距離的詞語搭配,還是遠距離的語義呼應。
為了實現這一目標,多頭注意力機制采用了一種巧妙的設計思路:不再僅僅使用一組查詢、鍵和值進行單一的注意力匯聚計算,而是通過獨立學習得到的h組(在實際應用中,通常將h設置為 8)不同的線性投影矩陣,對輸入的查詢、鍵和值進行變換 。每一組線性投影矩陣都會將原始的查詢、鍵和值映射到不同的子空間中,得到h組不同的查詢、鍵和值表示。這h組變換后的查詢、鍵和值會并行地進入各自的注意力匯聚模塊進行計算 。計算完成后,將這h個注意力匯聚的輸出結果拼接在一起,再通過另一個可學習的線性投影矩陣進行變換,最終得到多頭注意力機制的輸出。這種設計就像讓多個 “專家” 從不同角度去分析數據,然后把他們的分析結果整合起來,從而更全面地理解數據的內在信息。
3.2 如何運用多頭注意力機制?
第 1 步:定義多組W,生成多組 Q、K、V
在自注意力機制中,我們知道查詢(Q)、鍵(K)、值(V)是通過輸入向量X分別與三個可訓練的參數矩陣、
、
相乘得到的 ,具體公式為:
?
在多頭注意力機制中,對于同樣的輸入向量X,我們定義h組不同的參數矩陣 。例如,對于第i組參數矩陣,分別記為、
、
。通過這h組不同的參數矩陣,分別與輸入向量X進行矩陣乘法運算,就可以得到h組不同的查詢(
)、鍵(
)和值(
):
這里的每一組參數矩陣都是獨立學習的,它們會在模型訓練過程中不斷調整,從而讓模型學到不同的特征表示和注意力計算方式。
第 2 步:定義 8 組參數
通常情況下,我們會設置,即對應 8 個 “單頭”(single head)注意力機制 。對于這 8 組不同的查詢(
)、鍵(
)和值(
),分別進行自注意力機制計算。根據自注意力機制的計算步驟,對于第i個單頭,經過計算后會得到輸出
。具體計算過程和自注意力機制相同,先計算
與
的相關性得分,經過縮放和 Softmax 處理得到注意力權重,再與
進行加權求和,即:
通過這樣的計算,我們就得到了這 8 個單頭注意力機制的輸出結果。
第 3 步:將多組輸出拼接后乘以矩陣以降低維度
在將多頭注意力機制的輸出傳遞到下一層網絡之前,我們需要對這 8 個輸出進行處理 。首先,將這 8 個輸出沿著特定的維度(通常是特征維度)進行拼接(concat)操作,得到一個維度較大的張量。假設每個
的維度是d,那么拼接后的張量維度就是
?。
然后,我們讓這個拼接后的張量與一個可學習的線性投影矩陣相乘,進行一次線性變換 。這個線性變換的目的是對拼接后的特征進行整合和降維,得到最終的輸出Z,公式為:
,
其中,
表示將進行拼接操作,
是一個維度合適的可訓練參數矩陣,通過調整
的參數,模型可以學習到如何更好地整合這 8 個單頭的輸出信息,得到更具代表性的最終輸出,用于后續的任務處理。
完整流程圖如下:
四、通道注意力機制:Channel Attention
4.1 什么是通道注意力機制?
在利用卷積神經網絡(CNN)處理二維圖像時,圖像數據存在兩個重要維度。其中一個維度是圖像的尺度空間,也就是我們直觀看到的圖像的長和寬,它決定了圖像的大小和形狀;另一個維度則是通道 ,比如常見的 RGB 圖像包含紅(Red)、綠(Green)、藍(Blue)三個通道,每個通道記錄著圖像在對應顏色下的信息。通道注意力機制正是基于圖像的通道維度發揮作用,并且在圖像處理任務中應用十分廣泛。
通道注意力機制的核心目標是明確地構建出圖像不同通道之間的相關性。在圖像中,各個通道所包含的信息對最終的任務(如圖像分類、目標檢測等)貢獻程度是不同的。例如在識別貓的圖像時,某些通道可能更多地包含貓的輪廓信息,而另一些通道可能側重于貓的毛發顏色等細節信息 。通道注意力機制通過網絡學習的方式,自動地評估每個特征通道的重要程度,為每個通道分配不同的權重系數 。對于包含關鍵信息、對任務更有幫助的通道,賦予更高的權重,使其在后續計算中得到強化;而對于那些包含次要信息或對當前任務幫助不大的通道,則賦予較低的權重,起到抑制作用。這樣一來,模型就能更聚焦于重要的圖像特征,從而提升對圖像特征的表示能力,更好地完成各種視覺任務。
4.2 SENet
SENet(Squeeze-and-Excitation Networks,擠壓激勵網絡)是通道注意力機制的經典實現,它在特征圖的通道維度上引入了注意力機制,其核心操作包括 “擠壓(squeeze)” 和 “激勵(excitation)” 兩個步驟 。
在圖像經過一系列卷積等操作得到特征圖后,SENet 通過構建一個額外的小型神經網絡,來自動學習每個特征通道的重要程度。具體過程如下:
- 擠壓(squeeze):在這一步驟中,針對輸入的特征圖,沿著空間維度(即長和寬方向)進行全局平均池化操作 。假設輸入特征圖的尺寸為\(H×W×C\)(H為高度,W為寬度,C為通道數),通過全局平均池化,將每個通道在空間維度上的信息壓縮成一個數值,最終得到一個大小為\(1×1×C\)的向量 。這個向量可以看作是對整個特征圖在每個通道上的全局信息的一種匯總,將空間維度的信息 “擠壓” 到了通道維度上。
- 激勵(excitation):得到\(1×1×C\)的向量后,通過兩個全連接層組成的網絡對其進行處理 。第一個全連接層將通道數從C降維到\(C/r\)(r為降維比例,是一個超參數),然后經過激活函數(如 ReLU)處理;接著進入第二個全連接層,將通道數從\(C/r\)恢復到C?。通過這兩層全連接層的計算,輸出一個大小同樣為\(1×1×C\)的向量,這個向量中的每個元素代表了對應特征通道的重要程度。最后,將該向量與原始的特征圖相乘,使得重要程度高的通道對應的特征得到增強,重要程度低的通道對應的特征被抑制 。
通過 SENet 的這種方式,神經網絡能夠重點關注那些對當前任務有用的特征通道,比如在圖像分類任務中,突出與目標類別相關的圖像特征,而抑制對任務幫助較小的特征通道,從而提升模型的性能。
4.3 ECA
ECA(Efficient Channel Attention,高效通道注意力)機制也是一種應用于視覺模型的通道注意力機制,并且具有 “即插即用” 的特性 。也就是說,在不改變輸入特征圖尺寸的前提下,它能夠增強輸入特征圖的通道特征,方便地集成到各種視覺模型中。
ECA 機制的出現源于對 SENet 的改進。ECA-Net 研究發現,SENet 中采用的降維操作會影響通道注意力的預測準確性,并且在獲取所有通道的依賴關系時,這種方式效率較低,也并非必要 。基于此,ECA 機制進行了針對性的設計: 在 SENet 使用全連接層學習通道注意信息的基礎上,ECA 機制將其替換為 1×1 卷積 。1×1 卷積在神經網絡中可以看作是一種特殊的線性變換,它能夠在不改變特征圖空間尺寸的情況下,對通道維度進行操作 。通過 1×1 卷積,ECA 機制可以捕獲不同通道之間的信息交互,同時避免了像 SENet 那樣因降維操作導致的信息損失,而且 1×1 卷積的參數量相對全連接層要小得多 。這不僅減少了模型的計算量和參數數量,提高了計算效率,還能更有效地學習通道注意力信息,使得模型在處理圖像時能夠更精準地聚焦于重要通道特征。
4.4 CBAM
CBAM(Convolutional Block Attention Module,卷積塊注意力模塊)是一種簡單而有效的前饋卷積神經網絡注意力模塊 。它將傳統的通道注意力機制與空間注意力機制相結合,實現了通道(channel)和空間(spatial)維度上的統一關注。
CBAM 的具體操作流程如下:對于給定的中間特征圖,該模塊會按照順序,在通道和空間這兩個獨立的維度上分別生成注意力圖 。
- 通道注意力計算:首先,在通道維度上,類似于 SENet 等通道注意力機制的操作,通過全局平均池化和全局最大池化等操作,分別獲取特征圖在通道維度上的全局信息,然后經過全連接層等網絡結構處理,計算出每個通道的重要程度,生成通道注意力圖 。這個過程能夠讓模型關注到哪些通道包含更重要的信息。
- 空間注意力計算:在得到通道注意力圖后,將其與原始特征圖相乘,得到經過通道注意力調整后的特征圖 。接著,在空間維度上,對該特征圖進行基于卷積等操作,通過平均池化和最大池化操作,獲取特征圖在空間位置上的信息,再經過卷積層等處理,生成空間注意力圖 。空間注意力圖能夠讓模型關注到圖像中哪些空間位置的信息更重要。
- 特征修飾:最后,將空間注意力圖與經過通道注意力調整后的特征圖相乘,得到經過自適應特征修飾后的最終特征圖 。由于 CBAM 結構簡單、計算開銷小,因此可以輕松地集成到任何 CNN 架構中,并且能夠與基礎 CNN 模型一起進行端到端的訓練,在不顯著增加模型復雜度的情況下,提升模型對圖像特征的提取和處理能力,從而提高模型在各種視覺任務中的性能。
五、空間注意力機制:Spatial Attention
5.1 什么是空間注意力機制?
在前面介紹的內容中,我們看到的圖里就包含了空間注意力機制(例如,綠色長條代表通道注意力機制,而紫色平面則表示空間注意力機制)。在處理圖像的任務中,圖像的不同區域對于完成任務的貢獻程度是不一樣的。比如在圖像分類任務中,圖像里的主體部分(如識別貓的任務中,貓的圖像部分)對確定圖像類別起著關鍵作用,而背景等其他區域的重要性相對較低。空間注意力模型的核心任務就是找出圖像中對于當前任務最重要的部位,并對這些部位進行重點處理。
從本質上講,空間注意力機制的目的是提升圖像中關鍵區域的特征表達能力。它通過一個空間轉換模塊來對原始圖像的空間信息進行處理,將圖像從原始空間變換到另一個空間。在這個過程中,它會為圖像的每個位置生成一個權重掩膜(mask)。權重掩膜中的值表示圖像各個位置的重要程度,值越大說明該位置越重要。然后,根據這些權重對圖像進行加權輸出,增強與任務相關的特定目標區域(如目標物體所在區域)的特征,同時弱化不相關的背景區域的特征,從而使模型能夠更專注于關鍵信息,提升模型在視覺任務中的表現。
5.2 STN
在 2015 年 NIPS(神經信息處理系統大會,Neural Information Processing Systems)上發表的論文中,提出了空間變換器網絡(Spatial Transformer Networks,簡稱 STN),并引入了空間變換器(Spatial Transformer)的概念。STN 的核心是讓模型具備空間不變性,即無論目標物體在圖像中的位置、旋轉角度或縮放比例如何變化,模型都能有效地識別和處理。
STN 是一個可微分的模塊,它可以方便地插入到現有的卷積神經網絡結構中,并且不需要對神經網絡的訓練監督方式或優化過程進行額外修改,就能使神經網絡自動地根據特征圖(Feature Map)的情況對特征進行空間變換。它的主要作用是準確找到圖片中需要被關注的區域,并對這些區域進行旋轉、縮放等操作,最終提取出固定大小的區域,以便后續的處理。
空間采樣器作為 STN 的重要組成部分,其實現主要分為以下三個部分:
- 局部網絡(Localisation Network):局部網絡的作用是對輸入的特征圖進行分析,計算出空間變換所需的參數。它接收特征圖作為輸入,通過一系列的卷積、全連接等操作,輸出空間變換的參數(如旋轉角度、縮放比例、平移量等)。這些參數用于描述如何對特征圖進行空間變換,以突出關鍵區域。例如,在處理包含目標物體的圖像時,局部網絡會根據目標物體在特征圖中的位置和特征,計算出能夠將目標物體變換到合適位置和大小的參數。
- 參數化網格采樣 (Parameterised Sampling Grid):在得到空間變換參數后,參數化網格采樣模塊根據這些參數生成一個采樣網格。采樣網格定義了如何在原始特征圖上進行采樣,以實現空間變換。它會根據變換參數對原始特征圖進行劃分,確定每個位置的新坐標。例如,當需要對圖像進行旋轉時,采樣網格會計算出旋轉后每個位置在原始圖像中的對應位置,從而實現對特征圖的旋轉操作。
- 差分圖像采樣(Differentiable Image Sampling):差分圖像采樣模塊根據參數化網格采樣生成的采樣網格,對原始特征圖進行采樣操作。它會根據采樣網格的坐標信息,從原始特征圖中提取相應的特征,并將這些特征映射到新的空間位置上。這個過程是可微分的,使得在訓練過程中可以通過反向傳播來優化空間變換的參數,從而讓模型能夠學習到最佳的空間變換方式。例如,在目標檢測任務中,差分圖像采樣會根據采樣網格提取出目標物體的特征,并將其變換到合適的位置和大小,以便后續的檢測和識別。
?
?