1. 程式人生 > >Network In Network——卷積神經網絡的革新

Network In Network——卷積神經網絡的革新

gin src center log 感知 eat line pro bsp

Network In Network 是13年的一篇paper

引用:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013.

文章的新點:

1. 采用 mlpcon 的結構來代替 traditional 卷積層;

2. remove 卷積神經網絡最後的 全連接層,采用 global average pooling 層代替;

mplconv 結構的提出:

conventional 的卷積層 可以認為是linear model , 為什麽呢,因為 局部接收域上的每每一個tile 與 卷積核進行加權求和,然後接一個激活函數;它的 abstraction 的能力不夠, 對處理線性可分的的 concept 也許是可以的,但是更復雜的 concepts 它有能力有點不夠了,所以呢,需要引入 more potent 的非線性函數;

基於此,提出了 mlpcon 結構,它用多層的感知器(其實就是多層的全連接層)來替代單純的卷積神經網絡中的 加 權求和; mlpcon 指的是: multilayer perceptron + convolution;

兩者的結構如下所示:其中下圖的 Mlpconv 的有兩層的隱含層;

技術分享

說明:在mlpconv中的每一層的後面都跟著一個 ReLU激活函數;用於加入更多的nonlinearity;

global average pooling 結構:

卷積神經網絡最後的全連接層可以說作為了一個分類器,或者作為了一個 feature clustering. 它把卷積層學習到的特征進行最後的分類; intuitively, 根本不了解它是怎麽工作的, 它就像一個黑盒子一樣,並且它也引入了很多的參數,會出現 overfitting 現象; (我認為其實最後的 全接層就是一個分類器)

本文,remove掉了 全連接層, 使用 global average pooling 來代替; 舉個例子更容易說明白: 假設分類的任務有100 classes, 所以設置網絡的最後的 feature maps 的個數為 100, 把每一個feature map 看作成 對應每一類的 概率的相關值 ,然後對每一個 feature map 求平均值(即 global average pooling), 得到了 100維的向量, 把它直接給 softmax層,進行分類;(其實100個數中最大值對應的類別即為預測值, 之所以再送給 softmax層是為了求 loss,用於訓練時求梯度)

網絡的整體結構:

技術分享

(原 paper 中的圖)

技術分享

(該圖來自:http://blog.csdn.net/hjimce/article/details/50458190 ,加入了相關的參數。我怎麽找到這個圖呢???? 難道 樓主自己 根據 caffe 中的 .prototxt 文件的加上的??)

mlpconv 的細節:

輸入為一個feature map, 輸出為一個feature map 時:

技術分享

輸入為多個feature map, 輸出為一個feature map 時:

技術分享

輸入為多個feature map, 輸出為多個feature map 時:

技術分享

發現了什麽 ?

在 卷積神經網絡中,無論是輸入還是輸出,不同的 feature map 之間的卷積核是不相同的;

在mlpconv中,不同的 feature map 之間的開頭與能結尾之間的權值不一樣,而在 隱含層之間的權值是共享的;

另外:

全連接層之間可以看作一特殊的卷積層,其中卷積核的大小為 1*1, feature maps的 個數即為全連接層中的每一層的units的數目;

所以呢,假設上面的第三個圖中的輸入為2*(4 *4), 輸出為2 * (3*3)時:

第一層的卷積核大小為2*2, 步長為1, 輸入為2*(4 *4), 輸出為 4*(3*3);

第二層的卷積核大小為1*1, 步長為1, 輸入為4*(3 *3), 輸出為 3*(3*3);

第三層的卷積核大小為1*1, 步長為1, 輸入為3*(3 *3), 輸出為 2*(3*3);

global average pooling 的細節:

當分類的類別有4種時,則最後的 global average pooling 應該是這樣的:

技術分享

NIN結構的caffe實現:

因為我們可以把全連接層當作為特殊的卷積層,所以呢, NIN在caffe中是非常 容易實現的:

https://github.com/BVLC/caffe/wiki/Model-Zoo#network-in-network-model

這是由BVLC(Berkeley Vision Learning Center)維護的一個caffe的各種model及訓練好的參數權值,可以直接下載下來用的;

其它:

文中的觀點:通過實驗說明了 global average pooling 也可以起到很好的 regular的作用。

另外,一個比較有趣地地方就是:在 可視化最後一層 feature maps時,它的激活區域與原始圖片中目標所在的區域竟然相似;amazing!

補充:

文中大量用到了文獻:Maxout networks. (引用:Goodfellow I J, Warde-Farley D, Mirza M, et al. Maxout networks[J]. arXiv preprint arXiv:1302.4389, 2013.)

文中也說明了 NIN比 maxout networks 更 non-linearity;

後續很有必要看一下 文獻 maxout networks 這個paper, 它具有很好的價值;

參考文獻:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013.

Network In Network——卷積神經網絡的革新