Network In Network學習筆記html
原文地址:http://blog.csdn.net/hjimce/article/details/50458190c++
做者:hjimcegit
1、相關理論github
本篇博文主要講解2014年ICLR的一篇很是牛逼的paper:《Network In Network》,過去一年已經有了好幾百的引用量,這篇paper改進了傳統的CNN網絡,採用了少許的參數就鬆鬆擊敗了Alexnet網絡,Alexnet網絡參數大小是230M,採用這篇paper的算法才29M,減少了將近10倍啊。這篇paper提出的網絡結構,是對傳統CNN網絡的一種改進(這種文獻少之又少,因此感受頗有必要學習)。算法
傳統的卷積神經網絡通常來講是由:線性卷積層、池化層、全鏈接層堆疊起來的網絡。卷積層經過線性濾波器進行線性卷積運算,而後在接個非線性激活函數,最終生成特徵圖。以Relu激活函數爲例,特徵圖的計算公式爲:網絡
其中(i,j)表示圖片像素點的位置索引,xij表示咱們卷積窗口中的圖片塊,k則表示咱們要提取的特徵圖的索引。架構
通常來講,若是咱們要提取的一些潛在的特徵是線性可分的話,那麼對於線性的卷積運算來講這是足夠了。然而通常來講咱們所要提取的特徵通常是高度非線性的。在傳統的CNN中,也許咱們能夠用超完備的濾波器,來提取各類潛在的特徵。好比咱們要提取某個特徵,因而我就用了一大堆的濾波器,把全部可能的提取出來,這樣就能夠把我想要提取的特徵也覆蓋到,然而這樣存在一個缺點,那就是網絡太恐怖了,參數太多了。maven
咱們知道CNN高層特徵實際上是低層特徵經過某種運算的組合。因而做者就根據這個想法,提出在每一個局部感覺野中進行更加複雜的運算,提出了對卷積層的改進算法:MLP卷積層。另外一方面,傳統的CNN最後一層都是全鏈接層,參數個數很是之多,容易引發過擬合(如Alexnet),一個CNN模型,大部分的參數都被全鏈接層給佔用了,故這篇paper提出採用了:全局均值池化,替代全鏈接層。所以後面主要從這兩個創新點進行講解。函數
2、MLP卷積層(文獻創新點1)post
這個是文獻的大創新點,也就是提出了mlpconv層。Mlpconv層能夠當作是每一個卷積的局部感覺野中還包含了一個微型的多層網絡。其實在之前的卷積層中,咱們局部感覺野窗口的運算,能夠理解爲一個單層的網絡,以下圖所示:
線性卷積層
CNN層的計算公式以下:
然而如今不一樣了,咱們要採用多層的網絡,提升非線性,因而mlpconv層的網絡結構圖以下::
Mlpconv層
從上面的圖能夠看到,說的簡單一點呢,利用多層mlp的微型網絡,對每一個局部感覺野的神經元進行更加複雜的運算,而之前的卷積層,局部感覺野的運算僅僅只是一個單層的神經網絡罷了。對於mlpconv層每張特徵圖的計算公式以下:
傳統的卷積神經網絡卷積運算通常是出如今低層網絡。對於分類問題,最後一個卷積層的特徵圖經過量化而後與全鏈接層鏈接,最後在接一個softmax邏輯迴歸分類層。這種網絡結構,使得卷積層和傳統的神經網絡層鏈接在一塊兒。咱們能夠把卷積層看作是特徵提取器,而後獲得的特徵再用傳統的神經網絡進行分類。
然而,全鏈接層由於參數個數太多,每每容易出現過擬合的現象,致使網絡的泛化能力不盡人意。因而Hinton採用了Dropout的方法,來提升網絡的泛化能力。
本文提出採用全局均值池化的方法,替代傳統CNN中的全鏈接層。與傳統的全鏈接層不一樣,咱們對每一個特徵圖一整張圖片進行全局均值池化,這樣每張特徵圖均可以獲得一個輸出。這樣採用均值池化,連參數都省了,能夠大大減少網絡,避免過擬合,另外一方面它有一個特色,每張特徵圖至關於一個輸出特徵,而後這個特徵就表示了咱們輸出類的特徵。這樣若是咱們在作1000個分類任務的時候,咱們網絡在設計的時候,最後一層的特徵圖個數就要選擇1000,下面是《Network In Network》網絡的源碼,倒數一層的網絡相關參數:
全局均值池化層的相關參數以下:
由於在Alexnet網絡中,最後一個卷積層輸出的特徵圖大小恰好是6*6,因此咱們pooling的大小選擇6,方法選擇:AVE。
4、整體網絡架構
根據上面的做者對傳統CNN的兩個改進,利用其進行1000物體分類問題,因而做者最後設計了一個:4層的NIN+全局均值池化,網絡以下:
我的總結:我的感受這篇文獻頗有價值,實現方式也很簡單,一開始我還覺得須要caffe的c++源碼來實現NIN網絡,結果發現實現NIN的源碼實現方式其實就是一個1*1的卷積核,實現卷積運算,因此實現起來至關容易,不須要本身寫源碼,只須要簡簡單單的把卷積核的大小變一下,而後最後一層的全鏈接層直接用avg pooling替換一下就ok了。我的評價:網絡淺顯易懂,簡單實現,卻能夠改進原來的網絡,提升精度,減少模型大小,因此是一篇很值得學習的文獻。後續即將講解另外幾篇2015年,也是對CNN網絡結構改進的牛逼文獻:《Spatial Transformer Networks》、《Striving For Simplicity:The All Convolutional Net》、《Stacked What-Where Auto-encoders》,敬請期待,畢竟這樣的文章勇於挑戰傳統的CNN結構,對其不知作出改進,因此咱們須要一篇一篇的學。
參考文獻:
一、《Network In Network》
二、https://github.com/BVLC/caffe/wiki/Model-Zoo
三、https://gist.github.com/mavenlin/d802a5849de39225bcc6
四、《Maxout Networks》
**********************做者:hjimce 時間:2016.1.4 聯繫QQ:1393852684 原創文章,版權全部,轉載請保留本行信息***************