Network In Network
論文Network In Network(Min Lin, ICLR2014).
傳統CNN使用的線性濾波器是一種廣義線性模型(Generalized linear model,GLM)。所以用CNN進行特征提取時,其實就隱含地假設了特征是線性可分的,可實際問題往往是難以線性可分的。CNN中通過堆加卷積過濾器來產生更高層的特征表示,作者想到了除了像之前一樣堆加網絡卷積層之外,還可以在卷積層里邊做特殊的設計,使得網絡能夠在每個感受域提取更好的特征.
mlpconv
maxout能夠擬合任何凸函數,也就能夠擬合任何的激活函數(默認了激活函數都是凸的),而NIN想表明它不僅能夠擬合任何凸函數,而且能夠擬合任何函數,因為它本質上可以說是一個小型的全連接神經網絡.
NIN使用多層感知器的原因是MLP的結構與CNN兼容,都可以使用反向傳播訓練,並且也是個深度模型,與特征重用的理念一致.將MLP構成的網絡層稱為一個mlpconv層.MLP
可以擬合任意形式的函數,線性、非線性的都可以.
線性卷積層和mlpconv層的區別如圖所示:
mlpconv中使用ReLU,並未替換掉激活函數,改變的只是卷積的方式:不再是element-wise
形式的乘積,而是用非線性的MLP + ReLU
完成。其目的是引入更多的非線性元素。
如下圖的NIN結構:
第一個卷積核是11x11x3x96,因此在一個patch塊上卷積的輸出是1x1x96的feature map(一個96維的向量).在其后又接了一個MLP層,輸出仍然是96.因此這個MLP層就等價於一個1 x 1 的卷積層,這樣工程上任然按照之前的方式實現,不需要額外工作.
Global Average Pooling
傳統的cnn是在較低層使用卷積,如分類任務中,最后的卷積層所得feature map被矢量化進行全連接層,然后使用softmax 回歸進行分類。一般來說,在卷積的末端完成的卷積與傳統分類器的橋接。全連接階段易於過擬合,妨礙整個網絡的泛化能力,一般應有一些規則方法來處理過擬合。
在傳統CNN中很難解釋最后的全連接層輸出的類別信息的誤差怎么傳遞給前邊的卷積層.而global average pooling更容易解釋.另外,全連接層容易過擬合,往往依賴於dropout等正則化手段.
global average pooling的概念非常簡單,分類任務有多少個類別,就控制最終產生多少個feature map.對每個feature map的數值求平均作為某類別的置信度,類似FC層輸出的特征向量,再經過softmax分類.其優點有:
- 參數數量減少,減輕過擬合(應用於AlexNet,模型230MB->29MB);
- 更符合卷積網絡的結構,使feature map和類別信息直接映射;
- 求和取平均操作綜合了空間信息,使得對輸入的空間變換更魯棒(與卷積層相連的FC按順序對特征進行了重新編排(flatten),可能破壞了特征的位置信息).
- FC層輸入的大小須固定,這限制了網絡輸入的圖像大小.
FC與global average pooling的區別如下圖:
可用於圖像分類,目標檢測等任務.
global average pooling實現使用Average Pooling,kernel_size是特征圖的大小. caffe prototxt定義如下:
layers {
bottom: "cccp8"
top: "pool4"
name: "pool4"
type: POOLING
pooling_param {
pool: AVE
#kernel_size: 6
#stride: 1
#--舊版caffe需指定kernel_size&stride--
global_pooling: true
}
}
caffe在該論文之后加入了對global_pooling的支持,在pooling_param中指定global_pooling: true
即可,不需要指定kernel大小,pad和stride大小(pad = 0 , stride = 1,否則會報錯).kernel_size自動使用特征圖的大小,代碼:
if (global_pooling_) {
kernel_h_ = bottom[0]->height();
kernel_w_ = bottom[0]->width();
}
論文的caffe模型參數定義gist.
模型結構圖源於繪制caffe prototxt模型結構的在線工具.