Network in Network(2013),1x1卷積與Global Average Pooling


博客:blog.shinelee.me | 博客園 | CSDN

寫在前面

《Network in Network》簡稱NIN,出自顏水成老師團隊,首次發表在arxiv的時間為2013年12月,至20190921引用量為2871(google scholar)。

citations

NIN的網絡結構仍是在AlexNet基礎上修改而來,其主要創新點如下:

  • 提出了mlpconv layer:mlpconv layer中使用小的多層全連接神經網絡(multilayer perceptron, MLP)“micro network”替換掉卷積操作,micro network的權重被該層輸入feature map的所有local patch共享。卷積操作可以看成線性變換,而micro network可以擬合更復雜的變換,相當於增強了conv layer的能力。多個mlpconv layer堆疊構成整個網絡,這也是Network in Network名稱的由來。
  • 提出了global average pooling(GAP)NIN不再使用全連接層,最后一層mlpconv layer輸出的feature map數與類別數相同,GAP對每個feature map求全圖均值,結果直接通過softmax得到每個類別的概率。GAP在減少參數量的同時,強行引導網絡把最后的feature map學習成對應類別的confidence map
  • \(1\times 1\) convolution:在mlpconv layer中首次使用了\(1\times 1\)卷積,\(1\times 1\)卷積可以在不改變尺寸和感受野的情況下,靈活調整feature map的channel數,廣泛影響了后續網絡的設計,如Inception系列等。

本文將依次介紹上面的創新點,同時順帶介紹 全連接 與 卷積的關系、全連接與GAP的關系,最后給出NIN的網絡結構。

mlpconv layer實現

mlpconv

論文中講,mlpconv layer使用一個小的全連接神經網絡替換掉卷積,convolution layer與mlpconv layer對比示意圖如下,

Comparison of linear convolution layer and mlpconv layer

對於convolution layer,假設有N個kernel,每個kernel的尺寸為\(k \times k\),卷積操作將每個\(k \times k\)大小的local recptive field / local patch線性映射為N個輸出,匯總所有local patch的卷積結果得到N個feature map。

對於mlpconv layer,使用micro network替換掉卷積,通過micro network將每個\(k \times k\)的local patch非線性映射為N個輸出,匯總后仍得到N個feature map。文中說micro network為小的全連接神經網絡,但在實現時,這個全連接神經網絡卻是通過幾個卷積層實現的,為什么呢?因為全連接可以轉化成卷積

下面為《Dive into Deep Learning》中提供一個NIN block(mlpconv layer)的mxnet實現,

NIN block

from mxnet import gluon, nd
from mxnet.gluon import nn

def nin_block(num_channels, kernel_size, strides, padding):
    blk = nn.Sequential()
    blk.add(nn.Conv2D(num_channels, kernel_size, strides, padding, ctivation='relu'),
            nn.Conv2D(num_channels, kernel_size=1, activation='relu'),
            nn.Conv2D(num_channels, kernel_size=1, activation='relu'))
    return blk

一個NIN block通過1個卷積層和2個\(1 \times 1\)卷積層堆疊而成,這3個卷積層的輸出channel數相同。對於第1個卷積層,因為kernel_size與local patch大小相同,所以對每一個local patch而言,這個卷積等價於全連接,共num_channels個輸出,每個輸出與local patch全連接的權重就是對應的整個卷積核,卷積核的數量也為num_channels。對於后面2個\(1\times 1\)的卷積層,輸入都是num_channels維的向量,即num_channels個\(1\times 1\)的feature map,kernel_size與整個feature map的尺寸相同,這個\(1\times 1\)的卷積也就相當於全連接了。通過\(1\times 1\)的卷積實現了不同卷積核結果間的信息交流。

實際上,通過調整\(1\times 1\)卷積核的數量,可以在不改變輸入feature map尺寸和感受野的情況下,靈活地增加或減少feature map的channel數量,引入更多的非線性,表達能力更強,在實現feature map間信息交流的同時,獲得信息的壓縮或增廣表示

Global Average Pooling

卷積神經網絡的經典做法是 數個卷積層+幾個全連接層,典型視角是將前面的卷積層視為特征提取器,將全連接層視為分類器。卷積層的計算量高但參數少,全連接層的計算量少但參數多,一種觀點認為全連接層大量的參數會導致過擬合。作者提出了Global Average Pooling(GAP),取代全連接層,最后一層mlpconv layer輸出的feature map數與類別數相同,對每一個feature map取平均,全連接層與GAP的對比如下圖所示,圖片來自Review: NIN — Network In Network (Image Classification),GAP的結果直接輸給softmax得到每個類別的概率。

FC vs GAP

去掉全連接的GAP強制將feature map與對應的類別建立起對應關系,softmax相當於分數的歸一化,GAP的輸出可以看成是與每個類別相似程度的某種度量,GAP的輸入feature map可以解釋為每個類別的置信度圖(confidence map)——每個位置為與該類別的某種相似度,GAP操作可以看成是求取每個類別全圖置信度的期望。因為只有卷積層,很好地保留了空間信息,增加了可解釋性,沒有全連接層,減少了參數量,一定程度上降低了過擬合。

最后一層mlpconv layer輸出的feature map如下,可以看到圖片label對應的feature map響應最強,強響應基本分布在目標主體所在的位置。

Visualization of the feature maps from the last mlpconv layer

此外,作者還做將GAP與全連接層、全連接+dropout對比,在CIFAR-10庫上的測試結果如下,

GAP comparison

GAP可以看成是一種正則,全連接層的參數是學習到的,GAP可以看成是權值固定的全連接層。上面的實驗說明,這種正則對改善性能是有效的。

網絡結構

論文中給出的整體網絡結構如下,

NIN architecture

論文中沒有給出具體的參數配置,實際上,NIN仍是在AlexNet基礎上修改而來,相當於在AlexNet的每個卷積層后插入2個\(1\times 1\)卷積層,移除了Local Response Norm,同時用GAP替換掉全連接層。在這里,mlpconv layer既可以看成是增強了原conv layer的表達能力,也可以看成增加了網絡深度。

NIN architecture in d2l

參考


免責聲明!

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



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