目錄
- 寫在前面
- mlpconv layer實作
- Global Average Pooling
- 網路結構
- 參考
博客:blog.shinelee.me | 博客園 | CSDN
寫在前面
《Network in Network》簡稱NIN,出自顏水成老師團隊,首次發表在arxiv的時間為2013年12月,至20190921參考量為2871(google scholar),
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 layer使用一個小的全連接神經網路替換掉卷積,convolution layer與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實作,
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得到每個類別的概率,
去掉全連接的GAP強制將feature map與對應的類別建立起對應關系,softmax相當于分數的歸一化,GAP的輸出可以看成是與每個類別相似程度的某種度量,GAP的輸入feature map可以解釋為每個類別的置信度圖(confidence map)——每個位置為與該類別的某種相似度,GAP操作可以看成是求取每個類別全圖置信度的期望,因為只有卷積層,很好地保留了空間資訊,增加了可解釋性,沒有全連接層,減少了引數量,一定程度上降低了過擬合,
最后一層mlpconv layer輸出的feature map如下,可以看到圖片label對應的feature map回應最強,強回應基本分布在目標主體所在的位置,
此外,作者還做將GAP與全連接層、全連接+dropout對比,在CIFAR-10庫上的測驗結果如下,
GAP可以看成是一種正則,全連接層的引數是學習到的,GAP可以看成是權值固定的全連接層,上面的實驗說明,這種正則對改善性能是有效的,
網路結構
論文中給出的整體網路結構如下,
論文中沒有給出具體的引數配置,實際上,NIN仍是在AlexNet基礎上修改而來,相當于在AlexNet的每個卷積層后插入2個\(1\times 1\)卷積層,移除了Local Response Norm,同時用GAP替換掉全連接層,在這里,mlpconv layer既可以看成是增強了原conv layer的表達能力,也可以看成增加了網路深度,
參考
- arxiv: Network in Network
- 7.3. Network in Network (NiN)
- Review: NIN — Network In Network (Image Classification)
- Network In Network architecture: The beginning of Inception
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/71983.html
標籤:其他
上一篇:TensorFlow object detectio api安裝問題求助!!!!!!各種方法都試過了,還是不行,求大神告知方法!!!
