Deep Learning-TensorFlow (12) CNN卷積神經網路_ Network in Network 學習筆記

Deep Learning-TensorFlow (12) CNN卷積神經網路_ Network in Network 學習筆記

環境:Win8.1 TensorFlow1.0.1

軟體:Anaconda3 (整合Python3及開發環境)

TensorFlow安裝:pip install tensorflow (CPU版) pip install tensorflow-gpu (GPU版)

TFLearn安裝:pip install tflearn

參考:

1. Network In Network, Min Lin, Qiang Chen, Shuicheng Yan

2. Github: tflearn

3. Network in Network-讀後筆記

1. 前言

回憶之前介紹的 Google Inception V1,採用分支級聯的卷積層、MLPConv 層和全域性平均池化層,構建了22層網路結構,使得很好地控制計算量和引數量的同時( AlexNet 引數量的1/12),獲得了非常好的分類效能——top-5 錯誤率6.67%,在 ILSVRC
2014
的比賽中(和VGGNet 同年)以較大優勢取得了第一名

其網路結構設計很大程度上借鑑了2014年 ICLR 的paper,Network In Network(以下簡稱 NIN )。這篇 paper 改進了傳統的CNN
網路,採用了少量引數進一步提高了 CIFAR-10、CIFAR-100 等資料集上的準確率,其提出的網路結構是對傳統CNN 網路的改進:

  • 多層感知卷積層(Mlpconv Layer):使用 Conv MLP 代替傳統卷積層,增強網路提取抽象特徵和泛化的能力;
  • 全域性平均池化層(Global Average Pooling):使用平均池化代替全連線層,很大程度上減少引數空間,便於加深網路和訓練,有效防止過擬合。

本文將針對這兩點貢獻展開,細節內容可以參考鳴祥簡書 Network in Network-讀後筆記,介紹地更為詳細。

2. Mlpconv

CNN 一般由卷積層與池化層以棧的形式交替組成,卷積層通過使用非線性啟用函式(如:ReLu)的線性組合產生特徵圖,其計算過程可表示為

一般來說,所要提取的特徵是高度非線性的,在傳統的 CNN 中嘗試使用超完備的濾波器來提取各種潛在的特徵,具體來說,當需要提取某個抽象特徵時,我們初始化大量的濾波器去提取儘可能多的特徵,將我們期望的特徵也覆蓋到。如此產生的結果是網路結構複雜,引數空間過大

事實上,CNN 高層特徵其實是低層特徵通過某種運算的組合。於是作者就根據這個想法,提出在每個區域性感受野中進行更加複雜的運算,提出了對卷積層的改進演算法:MLP卷積層。相對傳統的卷積層過程,Mlpconv
層可以看成是每個卷積的區域性感受野中還包含了一個微型的多層網路:

利用多層 MLP 的微型網路,對每個區域性感受野的神經元進行更加複雜的運算,提高非線性,其計算過程為:

選擇多層感知器 MLP 作為微網路結構,作者作出以下兩點說明:

  1. MLP 使用 BP 演算法訓練,與 CNN 高度整合;
  2. MLP 可自行深度化,作為深層結構包含了特徵重用的思想。

NIN 級聯的跨特徵圖(Feature Map)整合過程,可以使得網路學習到複雜和有用的跨特徵圖特徵,細看 NIN 的 caffe 實現,在每個傳統卷積層後面接了兩個 cccp 層(cascaded cross channel parametric pooling),實際上為兩個1×1的卷積層,因此跨通道的引數化感知層等效於一個卷積核為1*1
的卷積層:




在 tflearn 的 network_in_network.py 中,第一層 Mlpconv 的節點為:

network = input_data(shape=[None, 32, 32, 3])
network = conv_2d(network, 192, 5, activation='relu')
network = conv_2d(network, 160, 1, activation='relu')
network = conv_2d(network, 96, 1, activation='relu')
network = max_pool_2d(network, 3, strides=2)

這裡採用 1*1 卷積層 作為 MLP 對卷積後的 Feature Map 進行跨通道資訊整合,然後 ReLu,最後 Maxpooling。

1*1 卷積層 對往後的網路設計產生了深遠的影響,同期的 VGG 也在網路中用於線性變換,但輸入通道數和輸出通道數不變,沒有發生降維;在
GoogleNetResNet 上也使用了1*1 卷積層,不僅可以跨通道組織資訊,提高網路的表達能力,同時可以對輸出通道升維和降維。

3. Global Average Pooling

對於分類問題,最後一個卷積層的 Feature Map 通常與全連線層連線,最後通過 softmax 邏輯迴歸分類。全連線層帶來的問題就是引數空間過大,容易過擬合。早期 Alex 採用了Dropout 的方法,來減輕過擬合,提高網路的泛化能力,但依舊無法解決引數過多問題。

NIN 提出採用全域性均值池化的方法,替代傳統 CNN 中的全連線層。與傳統的全連線層不同,對每個特徵圖一整張圖片進行全域性均值池化,這樣每張特徵圖都可以得到一個輸出。這樣採用均值池化,去除了構建全連線層的大量引數,大大減小網路規模,有效避免過擬合;另一方面的重要意義是,每張特徵圖相當於一個輸出特徵。例如 CIFAR-100分類任務,可直接將最後一層 Mlpconv 輸出通道設為100,對每個 Feature Map 進行全域性平均池化得到100維的輸出向量。

因此使用全域性平均 pooling 代替全連線層,使得最後一個多層感知卷積層獲得的每一個特徵圖能夠對應於一個輸出類別,優點如下:

  1. 全域性平均池化更原生的支援於卷積結構,通過加強特徵對映與相應分(種)類的對應關係,特徵對映可以很容易地解釋為分類對映;
  2. 全域性平均池化一層沒有需要優化的引數,減少大量的訓練引數有效避免過擬合;
  3. 全域性平均池化彙總(求和)空間資訊,因此其對空間變換是健壯的。


4. 總結

作者利用 Mlpconv 和 全域性平均 pooling 建立了 Network in Network 網路結構:

同時在 CIFAR-10, CIFAR-100, SVHN and MNIST 資料集上取得了較好的實驗效果,作者還視覺化部分實驗結果說明了 NIN 的效果,NIN 模型通過使用 MLPconv 可以接收一個更為強烈的區域性感受野模型:

從網路結構設計和實驗結果可以看出,NIN 的優勢主要有下面三點:

  1. 更好的區域性抽象;
  2. 更小的全域性Overfitting;
  3. 更小的引數空間。