[Converge] Gradient Descent - Several solvers [Converge] Weight Initialiser [Converge] Backpropagation Algorithm 【BP實現細節】 [Converge] Feature Selection in training of Deep Learning 【特性相關性的影響】 [Converge] Training Neural Networks 【cs231n-lec5&6,推薦】 [Converge] Batch Normalisation
卷積神經網絡結構變化——Maxout Networks,Network In Network,Global Average Poolinghtml
順便理解下相關的概念。node
參考資料 [1] Maxout Networks, 2013 [2] http://www.jianshu.com/p/96791a306ea5 [3] Deep learning:四十五(maxout簡單理解) [4] 論文筆記 《Maxout Networks》 && 《Network In Network》 [5] Fully convolutional networks for semantic segmentation, 2015 [6] http://blog.csdn.net/u010402786/article/details/50499864 [7] 深度學習(二十六)Network In Network學習筆記 [8] Network in Nerwork, 2014 [9] Improving neural networks by preventing co-adaptation of feature detectors
提出了一個概念——線性變化+Max操做能夠擬合任意的的凸函數,包括激活函數 (such as Relu)。git
(1)github
若是激活函數採用sigmoid函數的話,在前向傳播過程當中,隱含層節點的輸出表達式爲:算法
W是2維,這裏表示取出的是第i列(對應第i個輸出節點),下標i前的省略號表示對應全部行中的第i列中的。express
(2)網絡
若是是maxout激活函數,則其隱含層節點的輸出表達式爲:dom
W是3維,尺寸爲d*m*k,ide
參考一個日文的maxout ppt 中的一頁ppt以下:函數
這張圖的意識是說,紫圈中的隱藏節點展開成了5個黃色節點,取max。Maxout的擬合能力是很是強的,它能夠擬合任意的的凸函數。
從左往右,依次擬合出了ReLU,abs,二次曲線。
做者從數學的角度上也證實了這個結論,即只需2個maxout節點就能夠擬合任意的凸函數了(相減),前提是中間節點的個數能夠任意多,以下圖所示,具體能夠翻閱paper[1]。
maxout的一個強假設是輸出是位於輸入空間的凸集中的….這個假設是否必定成立呢?雖然ReLU是Maxout的一個特例——其實是得不到ReLU正好的狀況的,咱們是在學習這個非線性變換,用多個線性變換的組合+Max操做。
Jeff: 是否具備必定的實戰價值?仍是叫好不叫座?感受是無關一樣的改進,稍微瞭解下。
本文的一些概念,包括1*1卷積,global average pooling都已經成爲後來網絡設計的標準結構,有獨到的看法。
看第一個NIN,原本11*11*3*96(11*11的卷積kernel,輸出map 96個)對於一個patch輸出96個點,是輸出feature map同一個像素的96個channel,可是如今多加了一層MLP,把這96個點作了一個全鏈接,又輸出了96個點
很巧妙,這個新加的MLP層就等價於一個1 * 1 的卷積層,
這樣在神經網絡結構設計的時候就很是方便了,只要在原來的卷積層後面加一個1*1的卷積層,而不改變輸出的size。
注意,每個卷積層後面都會跟上ReLU。因此,至關於網絡變深了,我理解其實這個變深是效果提高的主要因素。
意義在於:成了一個不一樣特徵提取器的綜合效果,節省NN空間,但保證效果,這對網絡的簡化頗有意義。
【舉例解釋,見原文】
這裏創建了一個概念,全鏈接網絡能夠等價轉換到1*1的卷積,這個idea在之後不少網絡中都有用到,好比FCN[5]。
在Googlenet網絡中,也用到了Global Average Pooling,實際上是受啓發於Network In Network。
Global Average Pooling通常用於放在網絡的最後,用於替換全鏈接FC層,爲何要替換FC?由於在使用中,例如alexnet和vgg網絡都在卷積和softmax之間串聯了fc層,發現有一些缺點:
(1)參數量極大,有時候一個網絡超過80~90%的參數量在最後的幾層FC層中;
(2)容易過擬合,不少CNN網絡的過擬合主要來自於最後的fc層,由於參數太多,卻沒有合適的regularizer;過擬合致使模型的泛化能力變弱;
(3)實際應用中很是重要的一點,paper中並無提到:FC要求輸入輸出是fix的,也就是說圖像必須按照給定大小,而實際中,圖像有大有小,fc就很不方便;
做者提出了Global Average Pooling,作法很簡單,是對每個單獨的feature map取全局average。要求輸出的nodes和分類category數量一致,這樣後面就能夠直接接softmax了。
做者指出,Global Average Pooling的好處有:
舉個例子:
假如,最後的一層的數據是10個6*6的特徵圖,global average pooling是將每一張特徵圖計算全部像素點的均值,輸出一個數據值,
這樣10 個特徵圖就會輸出10個數據點,將這些數據點組成一個1*10的向量的話,就成爲一個特徵向量,就能夠送入到softmax的分類中計算了
From: https://alexisbcook.github.io/2017/global-average-pooling-layers-for-object-localization/
In mid-2016, researchers at MIT demonstrated that CNNs with GAP layers (a.k.a. GAP-CNNs) that have been trained for a classification task can also be used for object localization.
That is, a GAP-CNN not only tells us what object is contained in the image - it also tells us where the object is in the image, and through no additional work on our part! The localization is expressed as a heat map (referred to as a class activation map), where the color-coding scheme identifies regions that are relatively important for the GAP-CNN to perform the object identification task.