1. 程式人生 > >NIN 演算法原理解讀

NIN 演算法原理解讀

NIN (Network In Network)

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層的區別如圖所示:

nin-1

nin-1

 

mlpconv中使用ReLU,並未替換掉啟用函式,改變的只是卷積的方式:不再是element-wise形式的乘積,而是用非線性的MLP + ReLU完成。其目的是引入更多的非線性元素。

如下圖的NIN結構:

nin-structure

nin-structure

 

第一個卷積核是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分類.其優點有:

  1. 引數數量減少,減輕過擬合(應用於AlexNet,模型230MB->29MB);
  2. 更符合卷積網路的結構,使feature map和類別資訊直接對映;
  3. 求和取平均操作綜合了空間資訊,使得對輸入的空間變換更魯棒(與卷積層相連的FC按順序對特徵進行了重新編排(flatten),可能破壞了特徵的位置資訊).
  4. FC層輸入的大小須固定,這限制了網路輸入的影象大小.

FC與global average pooling的區別如下圖:

global average pooling

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模型結構的線上工具.


原文: https://www.cnblogs.com/makefile/p/nin.htm © 康行天下