全域平均池化
全域平均池化把每一整張特徵圖塌縮成單一數字——它在所有空間位置上的平均值。如果一張特徵圖是「特徵 X 出現在哪裡」的熱度圖,那麼它的全域平均就是「整張影像中存在多少特徵 X」。經過 GAP 後,形狀為 (C, H, W) 的張量變成長度為 C 的向量:每個特徵一個分數,所有空間佈局都被丟棄。它是從網路卷積主體(具空間性)銜接到最終逐類別決策的標準做法。
精確地說,GAP 對每個通道 c 輸出 (1/(H*W)) 乘以所有 (i,j) 的 x[c,i,j] 之總和。它沒有參數、沒有超參數,且可在任何輸入解析度上運作,因為它總是把空間維度縮成 1x1——這正是為何以 GAP 為 head 的網路(不同於先攤平再接全連接的網路)能接受可變尺寸的影像。它由 Network in Network(Lin 等人,2013)提出,並被 GoogLeNet 與 ResNet 採用,取代了 AlexNet/VGG 那些占去模型多數參數的龐大全連接層。
GAP 一次做到兩件有價值的事。它大幅削減參數量,並作為對抗過擬合的結構性正則化器,因為 head 裡沒有任何可以「死記訓練集」的權重。又因為每個通道的最終分數就只是它的平均激活,GAP 讓網路的推理更可詮釋——這正是類別激活映射(Class Activation Mapping, CAM)背後的機制,它利用連接 GAP 輸出到某類別的權重,來標示出哪些空間區域驅動了預測。其代價是 GAP 丟棄了所有位置資訊,因此它用於整張影像的分類,而非必須定位的任務。
一個以 7x7x2048 特徵體積收尾的骨幹網路,經 GAP 變成長度 2048 的向量,再用單一層 2048x1000 權重的全連接映射到 1000 個類別——相較於 VGG 風格的攤平(7*7*512=25088)接上 4096 寬的全連接層、約 1 億個參數。
為何重要:GAP 正是為何在 224x224 上訓練的 ResNet 能不重新訓練就在 500x500 影像上運行——head 會自動適應。對比之下,先攤平再接全連接的 head,其第一層全連接是綁死在某個確切特徵圖尺寸上的,一旦解析度改變就會壞掉。