日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > pytorch >内容正文

pytorch

深度学习(二十六)Network In Network学习笔记-ICLR 2014

發(fā)布時(shí)間:2025/3/21 pytorch 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(二十六)Network In Network学习笔记-ICLR 2014 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Network In Network學(xué)習(xí)筆記

原文地址:http://blog.csdn.net/hjimce/article/details/50458190

作者:hjimce

一、相關(guān)理論

本篇博文主要講解2014年ICLR的一篇非常牛逼的paper:《Network In Network》,過(guò)去一年已經(jīng)有了好幾百的引用量,這篇paper改進(jìn)了傳統(tǒng)的CNN網(wǎng)絡(luò),采用了少量的參數(shù)就松松擊敗了Alexnet網(wǎng)絡(luò),Alexnet網(wǎng)絡(luò)參數(shù)大小是230M,采用這篇paper的算法才29M,減小了將近10倍啊。這篇paper提出的網(wǎng)絡(luò)結(jié)構(gòu),是對(duì)傳統(tǒng)CNN網(wǎng)絡(luò)的一種改進(jìn)(這種文獻(xiàn)少之又少,所以感覺(jué)很有必要學(xué)習(xí))。

傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)一般來(lái)說(shuō)是由:線性卷積層、池化層、全連接層堆疊起來(lái)的網(wǎng)絡(luò)。卷積層通過(guò)線性濾波器進(jìn)行線性卷積運(yùn)算,然后在接個(gè)非線性激活函數(shù),最終生成特征圖。以Relu激活函數(shù)為例,特征圖的計(jì)算公式為:

?

其中(i,j)表示圖片像素點(diǎn)的位置索引,xij表示我們卷積窗口中的圖片塊,k則表示我們要提取的特征圖的索引。

一般來(lái)說(shuō),如果我們要提取的一些潛在的特征是線性可分的話,那么對(duì)于線性的卷積運(yùn)算來(lái)說(shuō)這是足夠了。然而一般來(lái)說(shuō)我們所要提取的特征一般是高度非線性的。在傳統(tǒng)的CNN中,也許我們可以用超完備的濾波器,來(lái)提取各種潛在的特征。比如我們要提取某個(gè)特征,于是我就用了一大堆的濾波器,把所有可能的提取出來(lái),這樣就可以把我想要提取的特征也覆蓋到,然而這樣存在一個(gè)缺點(diǎn),那就是網(wǎng)絡(luò)太恐怖了,參數(shù)太多了。

我們知道CNN高層特征其實(shí)是低層特征通過(guò)某種運(yùn)算的組合。于是作者就根據(jù)這個(gè)想法,提出在每個(gè)局部感受野中進(jìn)行更加復(fù)雜的運(yùn)算,提出了對(duì)卷積層的改進(jìn)算法:MLP卷積層。另一方面,傳統(tǒng)的CNN最后一層都是全連接層,參數(shù)個(gè)數(shù)非常之多,容易引起過(guò)擬合(如Alexnet),一個(gè)CNN模型,大部分的參數(shù)都被全連接層給占用了,故這篇paper提出采用了:全局均值池化,替代全連接層。因此后面主要從這兩個(gè)創(chuàng)新點(diǎn)進(jìn)行講解。

二、MLP卷積層(文獻(xiàn)創(chuàng)新點(diǎn)1)

這個(gè)是文獻(xiàn)的大創(chuàng)新點(diǎn),也就是提出了mlpconv層。Mlpconv層可以看成是每個(gè)卷積的局部感受野中還包含了一個(gè)微型的多層網(wǎng)絡(luò)。其實(shí)在以前的卷積層中,我們局部感受野窗口的運(yùn)算,可以理解為一個(gè)單層的網(wǎng)絡(luò),如下圖所示:


線性卷積層

CNN層的計(jì)算公式如下:


然而現(xiàn)在不同了,我們要采用多層的網(wǎng)絡(luò),提高非線性,于是mlpconv層的網(wǎng)絡(luò)結(jié)構(gòu)圖如下::

?

Mlpconv層

從上面的圖可以看到,說(shuō)的簡(jiǎn)單一點(diǎn)呢,利用多層mlp的微型網(wǎng)絡(luò),對(duì)每個(gè)局部感受野的神經(jīng)元進(jìn)行更加復(fù)雜的運(yùn)算,而以前的卷積層,局部感受野的運(yùn)算僅僅只是一個(gè)單層的神經(jīng)網(wǎng)絡(luò)罷了。對(duì)于mlpconv層每張?zhí)卣鲌D的計(jì)算公式如下:

一般來(lái)說(shuō)mlp是一個(gè)三層的網(wǎng)絡(luò)結(jié)構(gòu)。 下面是一個(gè)單層的mlpconv網(wǎng)絡(luò)的caffe網(wǎng)絡(luò)結(jié)構(gòu)文件,源碼來(lái)自于:https://gist.github.com/mavenlin/d802a5849de39225bcc6?: [python]?view plaincopy
  • <span?style="font-size:18px;">layers?{??
  • ??bottom:?"data"??
  • ??top:?"conv1"??
  • ??name:?"conv1"??
  • ??type:?CONVOLUTION??
  • ??blobs_lr:?1??
  • ??blobs_lr:?2??
  • ??weight_decay:?1??
  • ??weight_decay:?0??
  • ??convolution_param?{??
  • ????num_output:?96??
  • ????kernel_size:?11??
  • ????stride:?4??
  • ????weight_filler?{??
  • ??????type:?"gaussian"??
  • ??????mean:?0??
  • ??????std:?0.01??
  • ????}??
  • ????bias_filler?{??
  • ??????type:?"constant"??
  • ??????value:?0??
  • ????}??
  • ??}??
  • }??
  • layers?{??
  • ??bottom:?"conv1"??
  • ??top:?"conv1"??
  • ??name:?"relu0"??
  • ??type:?RELU??
  • }??
  • layers?{??
  • ??bottom:?"conv1"??
  • ??top:?"cccp1"??
  • ??name:?"cccp1"??
  • ??type:?CONVOLUTION??
  • ??blobs_lr:?1??
  • ??blobs_lr:?2??
  • ??weight_decay:?1??
  • ??weight_decay:?0??
  • ??convolution_param?{??
  • ????num_output:?96??
  • ????kernel_size:?1??
  • ????stride:?1??
  • ????weight_filler?{??
  • ??????type:?"gaussian"??
  • ??????mean:?0??
  • ??????std:?0.05??
  • ????}??
  • ????bias_filler?{??
  • ??????type:?"constant"??
  • ??????value:?0??
  • ????}??
  • ??}??
  • }??
  • layers?{??
  • ??bottom:?"cccp1"??
  • ??top:?"cccp1"??
  • ??name:?"relu1"??
  • ??type:?RELU??
  • }??
  • layers?{??
  • ??bottom:?"cccp1"??
  • ??top:?"cccp2"??
  • ??name:?"cccp2"??
  • ??type:?CONVOLUTION??
  • ??blobs_lr:?1??
  • ??blobs_lr:?2??
  • ??weight_decay:?1??
  • ??weight_decay:?0??
  • ??convolution_param?{??
  • ????num_output:?96??
  • ????kernel_size:?1??
  • ????stride:?1??
  • ????weight_filler?{??
  • ??????type:?"gaussian"??
  • ??????mean:?0??
  • ??????std:?0.05??
  • ????}??
  • ????bias_filler?{??
  • ??????type:?"constant"??
  • ??????value:?0??
  • ????}??
  • ??}??
  • }??
  • layers?{??
  • ??bottom:?"cccp2"??
  • ??top:?"cccp2"??
  • ??name:?"relu2"??
  • ??type:?RELU??
  • }??
  • </span>??

  • 三、全局均值池化(文獻(xiàn)創(chuàng)新點(diǎn)2)

    傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)卷積運(yùn)算一般是出現(xiàn)在低層網(wǎng)絡(luò)。對(duì)于分類問(wèn)題,最后一個(gè)卷積層的特征圖通過(guò)量化然后與全連接層連接,最后在接一個(gè)softmax邏輯回歸分類層。這種網(wǎng)絡(luò)結(jié)構(gòu),使得卷積層和傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)層連接在一起。我們可以把卷積層看做是特征提取器,然后得到的特征再用傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)進(jìn)行分類。

    然而,全連接層因?yàn)閰?shù)個(gè)數(shù)太多,往往容易出現(xiàn)過(guò)擬合的現(xiàn)象,導(dǎo)致網(wǎng)絡(luò)的泛化能力不盡人意。于是Hinton采用了Dropout的方法,來(lái)提高網(wǎng)絡(luò)的泛化能力。

    本文提出采用全局均值池化的方法,替代傳統(tǒng)CNN中的全連接層。與傳統(tǒng)的全連接層不同,我們對(duì)每個(gè)特征圖一整張圖片進(jìn)行全局均值池化,這樣每張?zhí)卣鲌D都可以得到一個(gè)輸出。這樣采用均值池化,連參數(shù)都省了,可以大大減小網(wǎng)絡(luò),避免過(guò)擬合,另一方面它有一個(gè)特點(diǎn),每張?zhí)卣鲌D相當(dāng)于一個(gè)輸出特征,然后這個(gè)特征就表示了我們輸出類的特征。這樣如果我們?cè)谧?000個(gè)分類任務(wù)的時(shí)候,我們網(wǎng)絡(luò)在設(shè)計(jì)的時(shí)候,最后一層的特征圖個(gè)數(shù)就要選擇1000,下面是《Network In Network》網(wǎng)絡(luò)的源碼,倒數(shù)一層的網(wǎng)絡(luò)相關(guān)參數(shù):

    [python]?view plaincopy
  • layers?{??
  • bottom:?"cccp7"??
  • top:?"cccp8"??
  • name:?"cccp8-1024"??
  • type:?CONVOLUTION??
  • blobs_lr:?1??
  • blobs_lr:?2??
  • weight_decay:?1??
  • weight_decay:?0??
  • convolution_param?{??
  • num_output:?1000??
  • kernel_size:?1???
  • stride:?1??
  • weight_filler?{??
  • type:?"gaussian"??
  • mean:?0??
  • std:?0.01??
  • }??
  • bias_filler?{??
  • type:?"constant"??
  • value:?0??
  • }??
  • }??
  • }??
  • 全局均值池化層的相關(guān)參數(shù)如下:

    [python]?view plaincopy
  • layers?{??
  • bottom:?"cccp8"??
  • top:?"pool4"??
  • name:?"pool4"??
  • type:?POOLING??
  • pooling_param?{??
  • pool:?AVE??
  • kernel_size:?6??
  • stride:?1??
  • }??
  • }??
  • 因?yàn)樵贏lexnet網(wǎng)絡(luò)中,最后一個(gè)卷積層輸出的特征圖大小剛好是6*6,所以我們pooling的大小選擇6,方法選擇:AVE。

    四、總體網(wǎng)絡(luò)架構(gòu)

    根據(jù)上面的作者對(duì)傳統(tǒng)CNN的兩個(gè)改進(jìn),利用其進(jìn)行1000物體分類問(wèn)題,于是作者最后設(shè)計(jì)了一個(gè):4層的NIN+全局均值池化,網(wǎng)絡(luò)如下:


    個(gè)人總結(jié):個(gè)人感覺(jué)這篇文獻(xiàn)很有價(jià)值,實(shí)現(xiàn)方式也很簡(jiǎn)單,一開(kāi)始我還以為需要caffe的c++源碼來(lái)實(shí)現(xiàn)NIN網(wǎng)絡(luò),結(jié)果發(fā)現(xiàn)實(shí)現(xiàn)NIN的源碼實(shí)現(xiàn)方式其實(shí)就是一個(gè)1*1的卷積核,實(shí)現(xiàn)卷積運(yùn)算,所以實(shí)現(xiàn)起來(lái)相當(dāng)容易,不需要自己寫(xiě)源碼,只需要簡(jiǎn)簡(jiǎn)單單的把卷積核的大小變一下,然后最后一層的全連接層直接用avg pooling替換一下就ok了。個(gè)人評(píng)價(jià):網(wǎng)絡(luò)淺顯易懂,簡(jiǎn)單實(shí)現(xiàn),卻可以改進(jìn)原來(lái)的網(wǎng)絡(luò),提高精度,減小模型大小,所以是一篇很值得學(xué)習(xí)的文獻(xiàn)。后續(xù)即將講解另外幾篇2015年,也是對(duì)CNN網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)的牛逼文獻(xiàn):《Spatial Transformer Networks》、《Striving For Simplicity:The All Convolutional Net》、《Stacked What-Where Auto-encoders》,敬請(qǐng)期待,畢竟這樣的文章敢于挑戰(zhàn)傳統(tǒng)的CNN結(jié)構(gòu),對(duì)其不知做出改進(jìn),所以我們需要一篇一篇的學(xué)。

    參考文獻(xiàn):

    1、《Network In Network》

    2、https://github.com/BVLC/caffe/wiki/Model-Zoo

    3、https://gist.github.com/mavenlin/d802a5849de39225bcc6?

    4、《Maxout Networks》

    **********************作者:hjimce ? 時(shí)間:2016.1.4 ?聯(lián)系QQ:1393852684 ? 地址:http://blog.csdn.net/hjimce? ?原創(chuàng)文章,版權(quán)所有,轉(zhuǎn)載請(qǐng)保留本行信息(不允許刪除)

    總結(jié)

    以上是生活随笔為你收集整理的深度学习(二十六)Network In Network学习笔记-ICLR 2014的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。