博客:blog.shinelee.me | 博客園 | CSDNpython
《Network in Network》簡稱NIN,出自顏水成老師團隊,首次發表在arxiv的時間爲2013年12月,至20190921引用量爲2871(google scholar)。網絡
NIN的網絡結構還是在AlexNet基礎上修改而來,其主要創新點以下:ide
本文將依次介紹上面的創新點,同時順帶介紹 全鏈接 與 卷積的關係、全鏈接與GAP的關係,最後給出NIN的網絡結構。post
論文中講,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實現,google
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\)的卷積實現了不一樣卷積核結果間的信息交流。spa
實際上,經過調整\(1\times 1\)卷積核的數量,能夠在不改變輸入feature map尺寸和感覺野的狀況下,靈活地增長或減小feature map的channel數量,引入更多的非線性,表達能力更強,在實現feature map間信息交流的同時,得到信息的壓縮或增廣表示。
卷積神經網絡的經典作法是 數個卷積層+幾個全鏈接層,典型視角是將前面的卷積層視爲特徵提取器,將全鏈接層視爲分類器。卷積層的計算量高但參數少,全鏈接層的計算量少但參數多,一種觀點認爲全鏈接層大量的參數會致使過擬合。做者提出了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的表達能力,也能夠當作增長了網絡深度。