深度學習經典網絡,AlexNet,NIN,OverFeat,VGG,ResNet

1.AlexNet [2012]

論文: ImageNet Classification with Deep Convolutional Neural Networks [2012年ImageNet競賽冠軍]
主要內容:訓練了一個很深的卷積神經網絡在ImageNet實現1000類圖片分類,top-1和top-5的錯誤率分別達到了37.5%和17%,比當時最好的方法(SIFT+FVs 分別爲45.7%和25.7%)降低了8.2%和8.7%。
網絡結構:五個卷積層,三個全連接層。使用上下兩欄的網絡結構,在第三個卷積層和全卷積層中,對來自上一層輸入數據進行共享。其它處僅使用來自本欄的上一層的數據。
輸入圖片大小爲224X224,由ImageNet上的256X256圖片隨機裁剪得到,輸出維度爲1000的向量,表示1000個類別的分類結果。
AlexNet網絡結構

主要貢獻
(1)使用整流線性單元ReLU代替雙曲正切函數tanh作爲激活函數,提高了訓練的速度;
(2)局部相應歸一化(LRN)提高模型泛化能力。對得到的feature map臨近的以當前feature map位置爲中心的左右各n/2個(若有)feature map 計算同一位置上的激活值的平方和sum的指數函數(K+a*sum)^B 值,以此值作爲分母進行歸一化。 局部相應歸一化的主要思想來自真實神經元之間的相互抑制機制,使具有較大的激活值的神經元能夠往後有效傳遞信息。

(3)重疊池化(Overlaping Pooling)。作者進行了重疊pooling,即使pooling的步長小於pooling核的邊長。作者發現使用重疊池化能夠降低top-1和top-5的誤差0.4%和3%。另外使用重疊池化更不容易過擬合。

防止過擬合策略:
(1)數據集擴增,主要包括兩個方面:1)圖像的隨機裁剪和水平翻轉。2)圖像RGB通道強度值的調整。
(2)Dropout:作者在前兩個全連接層使用了dropout方法,即強制神經元以0.5的概率失火,不輸出。 訓練多個模型並在預測時使用多個模型平均的結果有利於提高預測的準確度,dropout在訓練的過程中隨機關閉一些神經元,起到了類似訓練了多個模型的效果,有一種類似bagging的作用。同時,使用dropout較少了神經元之間的“複雜合作”,迫使單個的神經元獨自學習一種魯棒的表示能力,減輕對其它神經元的依賴。

訓練策略:
(1)weight decay 權值衰減,作者認爲這不僅是一個正則化項,同時能減小訓練誤差
一般的SGD權值更新爲:
g=▽θ
wi=wi-εg
帶動量的SGD
g=▽θ
v←αV-εg
wi←wi+v
本文中的帶權值衰減動量SGD
g=▽θ
v←αv-εg-βεWi(權值衰減部分)
Wi←Wi+v

總結:這篇文章提出了一種深的卷積神經網絡結構,通過使用GPU高效訓練,使用了一些諸如局部響應歸一化、重疊池化、ReLU、權值衰減、dropout等技術,成功訓練了深的卷積神經網絡,並在ImageNet圖片分類上取得了不錯的效果。作者同時也通過實驗表明網絡深度的重要性,減少任何一個卷積層,誤差會增加2%。

2.Network In Network [2013]

論文:Network In Network
主要內容:提出了一種稱爲Network In Network的網絡結構,這種結構使用多層感知機連接卷積層,實現上使用1*1的卷積,已達到擬合複雜激活函數的目的。另外相對於一些卷積神經網絡的全連接層,使用全局平均池化(Global Average Pooling)代替。這種代替的好處減少了很多參數,並且相比於全連接不容易過擬合。
網絡結構:三個mlpconv(multi layer perceptron convolution)連接, 到n(n是分類數)個feature map做global average pooling,得到一個n維的向量,然後送入softmax做分類。
Network in Network

主要貢獻
(1)mlpconv: 優勢:1)和傳統卷積是兼容,實際上它的實現也是通過11的卷積來實現的;2)本身容易進行深度化。這裏11 的卷積實際上是在前一層的feature maps 上做一個非線性的組合,可以使不同通道之間進行復雜交互。 另外1*1的卷積可以用來做升維或降維。
(2)global average pooling: 實際上是將feature map轉換成了對每一個類的confidence map。優勢有二:一是相比於全連接,更與卷積的結構相適應,這樣很容易將這裏的feature map視作爲confidence map.另外一個優勢就是這裏沒有需要優化的參數,去除了全連接中的大量參數,也很好地避免了過擬合。

結論:提出了新的結構,效果也很好,這種1*1的卷積方式和global average pooling 對以後的文章也有影響。

3.Maxout [2013]

論文:Maxout Network
主要內容:maxout實際上是一種多層感知機或者是神經網絡,作爲類似激活函數的功能存在,具有擬合任意凸函數的能力。
maxout結構:

h1和h2即爲maxout的輸出,其中Z1和Z2可以看做是隱隱層,通過maxout,可以近似任意的凸函數,充當激活函數。
激活函數的作用:若沒有激活函數,即相當於激活函數是f(x)=wx,那麼不管網絡有多深,都是輸入的線性函數,擬合能力有限,激活函數的引入爲網絡引入了非線性,則網絡可以近似任意函數,才擁有很強的表示能力。神經網絡中早期使用sigmoid函數,後來使用ReLU,主要原因有:1)sigmoid函數中的指數部分在前向計算和後向傳播中計算量較大;2)sigmoid函數容易產生飽和,在兩端接近0,1的部分梯度很小,容易產生梯度消失現象,無法傳遞信息;3)ReLU計算簡單,單向抑制使一些神經元輸出爲0,起到網絡稀疏作用,另外這種單向抑制更符合生物神經元的作用。
Maxout

4.OverFeat [2013]

論文:OverFeat:integrated recognition,localization and detection using convolutional network
主要內容:使用同一個網絡進行識別(分類:是什麼),定位(是什麼,在哪裏)和檢測(有些什麼,在哪裏)。
作者定義OverFeat爲一種特徵提取器(feature extractor),將網絡的前面五層視爲特徵提取層,對於不同的任務將後面的層修改後重新訓練,就可以得到很好地效果。這也充分展示了網絡的遷移能力。

5.devil [2014]

論文:return of the devil, the details delving the deep into convolutional networks
主要內容:比較了卷積神經網絡爲代表的深度網絡和傳統的淺層特徵(如BoVW,IFV)等在圖像分類識別之間的差異。主要有有三種實驗場景:1)使用pre-trained模型,2)使用pre-train的模型進行fine-tuning,3)使用淺層特徵。
結論:使data augmentation技術可以使淺層表示的效果有提升,但是即使提升之後和深度網絡之間還是有很大差距。使用fine-tuning的方式比使用深度模型+SVM效果要好。

6.VGG [2014]

論文:very deep convolutional network for large scale image recognition
主要內容:探索了使用小的卷積核尺寸(3X3)構建深的網路,並取得了很好的結果,14年ImageNet定位和分類的1,2名。
VGG network
VGG19結構-22444+3 VGG16: 22333+3
主要發現:文章採用的3X3的卷積核的堆疊代替大尺寸的卷積核(如77)。兩個33的卷積核的感受野與55的卷積核等同。3個33的卷積核的感受野與77的卷積核等同。有點在於:1)增加非線性,1個77使用了一個非線性激活單元,3個33 使用三個非線性激活函數,增加了網絡的非線性,使網絡的識別能力更強。 2)減少了參數:假設輸入輸出通道數目爲C,3個33: 3*(33)CC , 而一個77: 77CC。比例爲0.55:1。這可以看做是對77卷積核的一種正則化。
1*1的卷積核可以用來在不影響感受野的前提下對增加的網絡的非線性,這在NIN文章閱讀中有說明,VGG中用的是線性的。
總結:VGG在沒有改變LeNet的基本結構的基礎上,大大加深的網絡的深度,展示了深度對於網絡的重要性和好處。其在圖像分類,物體定位等方面效果都很多,很多在VGG基礎上進行fine-tuning的文章也展示了VGG網絡強大的特徵學習能力和應對多種應用的能力。

7.Inception_V1 (GoogLeNet) [2015]

intro: multi-scale conv filter
論文:going deeper with convolutions

主要內容:這篇文章主要介紹了一種稱爲Inception的網絡結構,在保證計算量不變的情況下,使網絡變得更深,更寬,並且取得比較好的效果。主要的想法是:1)根據Hebbian 原則,突觸之間的合作和能取得更好的神經傳遞效果,2)多尺度處理的直覺。
主要動機:縱觀網絡深度不斷加深,效果不斷提升的發展過程,希望神經網絡取得更好的結果的一個直接方法就是加深網絡深度和增加每層的節點數目。但是這樣做會帶來兩個問題:1)網絡參數增加,使得網絡更容易過擬合,2)計算量增加。
解決這個問題的一個方案是爲網絡引進稀疏性,不僅是在全連接層,甚至是在卷積層。稀疏網絡可以有效避免過擬合,之前的dropout的使用也證明了這一點,另外稀疏網絡可以是具有相關性的神經元聚類,相互刺激增強了突觸的連接(Hebbian principle),增強了神經元的連接。
但是在計算上如果稀疏僅僅很多單元的輸出爲0,那麼實際的計算量沒有減少,並造成了計算的浪費。如果轉爲不均勻的稀疏數據結構,計算量雖然會大大減小,但是因查找和cache miss問題造成的時間消耗可能使轉爲稀疏矩陣的策略得不償失。從LeNet開始,神經網絡就有利用隨機和稀疏特性打破網絡對稱性並提高學習的傳統,後來在Alex中使用全連接是爲了利用並行計算能力。當前的網絡的結構都比較統一,大量的濾波器和大的batch size充分利用了計算設備的密集計算能力。
那麼現在的問題是如何在引入filter level的稀疏性的同時充分利用計算設備的密集矩陣計算能力。

Inception結構
主要想法是找到一個卷積網絡的局部稀疏結構,然後重複此結構,得到網絡。
1)首先,從NIN中可以學習到利用11 的卷積核可以覆蓋(聯合,增加非線性)上一層的多個feature map;
2)然後,使用更大一點的patch,可以獲取更多的更大的patch信息,同時減少patch數目;
3)最後,池化在卷積網絡中很重要,所以有必要再加上一個池化操作。
所以,最後的結果就是,1
1,33,55 的卷積 + 33 的池化(stride:1X1),構成inception的最初模型。實際上就是不同卷積的組合。 另外更高層的網絡一般提取的特徵更抽象,層次更高,然後33,55 的大卷積核有利於提取高層特徵,所以在更高層的網絡層中,33和55 的feature map數目的比例提高。
由於使用了多種卷積和池化,最後的feature map整合(concatenated,級聯)到一起,隨着層數增加,輸出map是在不斷增加的,這樣雖然局部是稀疏的,但是隨着層數增加,計算量陡增。 所以這裏的解決方案是在3
3和55 的卷積之前以及33 的池化之後分別加一個11 的卷積,減少通道數目。同時由於其包含了ReLU單元使得其具備了增加網絡非線性的作用。
在這裏插入圖片描述
在這裏插入圖片描述
GoogLeNet 結構
網絡輸入圖片大小224x224x3, 零均值。輸出1000維 softmax結果。
一共有27層(包括pooling層)。有9個inception模塊。開始使用了 2
conv + 2pooling,中間用了 9Inception + 2*pooling,最後用了一個average pooling + FC + softmax.
在這裏插入圖片描述

one implementation: https://hacktilldawn.com/2016/09/25/inception-modules-explained-and-implemented/
訓練:SGD,momentum=0.9 , input_size:224x224 zero mean
測試:1)7 model embeding prediction
2)image crop: 4sale *3squareCrop 6crop(224224) *2mirror=144
3)所有crop所有模型結果平均

總結:這篇文章提出了inception的結構,證明了通過密集單元逼近的稀疏結構來提高神經網絡在計算機視覺方面的能力是可行的。主要優點是在適當增加計算的情況下顯著提高性能。總之,網絡朝着稀疏的方向發展是有效,有用的想法。

注:文章中也指出,儘管Inception結構在計算機視覺上是成功的,但是這能否將其歸因於Inception結構的設計原則,依然是存疑的,尚需更多的分析與驗證。

8.ResNet [2016]

intro: residual structure
論文: deep residual learning for image recognition
arXiv:https://arxiv.org/pdf/1512.03385.pdf (submitted v1: 2015.12)
github: https://github.com/tensorflow/models/blob/master/official/resnet/resnet_model.py
背景:更深的網絡越來越不容易訓練。

主要內容:提出了一種殘差網絡結構,這種網絡結構易於訓練,並能從網絡的深度中獲得準確率的增加。 網絡輸入爲x, 傳統網絡的一些層學習映射H(x),現在要學習的殘差爲F(x)=H(x)-x,那麼H(x)=F(x)+x,在殘差網絡中,不改變網絡基本結構的情況下,加一個從輸入x到輸出F(x)之間的相加連接,就可以得到H(x); 這樣學習到的就是F(x).

主要問題(驅動):
有這樣一個問題,即是否可以通過堆疊更多的層來訓練得到更好的模型呢?要回答這個問題,首先要解決的一個障礙就是梯度消失/爆炸,它會導致網絡在訓練的初始階段難以收斂,不過有了標準化的初始化和標準化中間層(batch norm)等方法後,這個障礙得到了很大程度上的解決。 但是隨着網絡的加深,出現了一個degradation的問題:就是隨着深度的加深,準確率會先達到飽和,然後會迅速降低。這種degradation的問題還不是由於過擬合造成的,因爲訓練誤差也增大了。
理論上對於一個已經構建好的較淺的網絡,對於該網絡,在它的後面增加一些恆等映射層,通過這樣的方式構建出來的模型的訓練誤差應該不會比淺層網絡大,但是實驗發現,這樣的解決方案無法做到與原來的淺層網絡性能差不多甚至更好。在ResNet的文章中,作者提出一個深度殘差學習框架,即讓網絡去學習一個殘差函數,比如輸入是x,原來的要學習的輸出是H(x),現在就讓它學習H(x)-x; 這樣做基於的假設是優化殘差映射比優化原來的映射更容易。舉個極端情況的例子,如果恆等映射就是尋求的最優映射關係,那麼在這種多個非線性層堆疊的情況下,讓網絡學習輸出0作爲殘差比讓它擬合一個恆等映射要簡單。

網絡結構
在這裏插入圖片描述
這種跨層連接中間有兩到三層,一層的話還是個線性映射,沒有效果。F(x)+x是通過逐元素的相加(element-wise addition)完成的,對應通道的feature map相加。當x和F(x)的尺寸,通道數不一樣的時候,加上一個線性投影矩陣WsW_s 來實現兩個變量的維度匹配。具體實現可以使用111*1的卷積來實現,通過卷積核的個數控制通道數變化,卷積的步長控制feature map寬高的變化。
在這裏插入圖片描述

網絡中使用步長爲2的卷積代替pooling, 每次feature map的尺寸減小一半,使feature map的數量增加一倍。對於feature map數目變化後的F(x)+x, 1)增加值爲0的額外通道(x)feature map, 2)使用1*1 的卷積覈對x做卷積得到同樣數目的feature map. 對於尺寸變化的情況,相加的時候都是按照步長爲2進行相加。

Implemetation details
SGD momentum:0.9
batch_size=256
learning rate:0.1 devided by 10 when error plateaus
weight decay=0.0001
trainining up to 60*10^4 iteration
使用BN,也有兩種方式,一種是在weight層之前(arXiv: 1603.05027 identity mapping in deep residual networks) 是在之後(arXiv:1512.03385 Deep residual learning for image recognition)

兩種shortcut : identity & projection

兩種resnet buiding block:
在這裏插入圖片描述
關於resnet中關於深度網絡難以訓練不是由於梯度消失的表述:
在這裏插入圖片描述

9. Inception_v2 : Batch Normalization (2015)

intro: batch normalization
論文:Batch Normalization:accelerating deep network training by reducing internal covariate shift
arXiv: https://arxiv.org/pdf/1502.03167.pdf
github: https://github.com/udacity/cn-deep-learning/blob/master/tutorials/batch-norm/Batch_Normalization_Lesson.ipynb
Andrew Ng lesson about batch norm:
https://www.youtube.com/watch?v=tNIpEZLv_eg
https://www.youtube.com/watch?v=em6dfRxYkYU
https://www.youtube.com/watch?v=nUUqwaxLnWs
https://www.youtube.com/watch?v=5qefnAek8OA

主要內容:深度網絡在訓練的過程中,每一層的輸入分佈都在變化導致深度網絡難以訓練,通常需要使用很小的學習率和精心設置的初始化方法,通常訓練過程複雜,而且速度很慢。文章稱這種現象爲internal covariate shift,文章提出的解決方法是對網絡層的輸入進行標準化(normalization)。 這種方法讓我們能夠使用較大的學習率並且不用精心設計變量初始化。 另外batch normalization 還能起到正則化的作用,在一些案例中,可以起到drop out的作用。
文章中使用batch normalization 訓練模型在達到原來模型同樣精度的情況下,訓練step減少14倍.
兩個概念:
Internal Covariate Shift: 文中指的是深度網絡內部節點的分佈的變化。
Batch Normalization:通過一個normalization步驟來固定網絡層的輸入的均值和方差,達到減少internal covariate shift, 並加速訓練過程的目的。
兩個算法
(1) batch normalization [normalize + scale&shift]
在這裏插入圖片描述
在這裏插入圖片描述
(2) training BN network
在這裏插入圖片描述
alg1. 對於一個mini-batch 的輸入X的Batch Borm Transform :
對於輸入的激活{x1,…xm}, (1)計算均值,(2)計算方差,(3)計算標準化值,(4)計算scale(gamma)和shift(beta)之後的值y作爲輸出。
alg2. 訓練一個BN network:
(1)對所有的BN層,用算法1計算BN輸出y,並用y代替x;
(2)訓練網絡,優化網絡參數theta以及BN參數gamma和beta;
(3)處理多個mini-batch,average over them ,計算E(x)和Var[x];
(4)替換y, 使用(3)中計算的E(x)和Var[x]重新計算得到。

10. Inception_v3 : rethinking Inception (2016)

intro: factorized conv
論文:rethinking the Inception architecture for computer vision
https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Szegedy_Rethinking_the_Inception_CVPR_2016_paper.pdf
model(TF) :https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v3.py
主要內容:主要闡述通過卷積分解(factorized convolution)和正則化(regressive regularization)來scale up網絡來充分利用增加的計算能力。
文章根據不同結構的卷積網絡的大量實驗,總結了一些深度模型設計的通用的方法和優化思路。
通用的設計準則
(1)避免表達bottleneck。網絡的表達尺寸不應急劇減小,尤其在網絡的前面部分(接近輸入的部分),防止對信息過度壓縮,造成大量信息的丟失;
(2)大尺寸的表示在網絡中更適合局部處理?;
(3)在較低的維度上進行空間聚集,不會造成表達損失?;
(4)注意網絡深度和寬度的平衡。

改進方案
(1)在inception V1的基礎上進一步將3X3的卷積核用1X3 +3X1 的代替,並進一步推廣到1Xn+nX1的卷積核, 進一步減少參數
(2)inception V1中的引出的輔助分類結果並不能提高最終層的判別能力,只有在加了BN或者drop out的時候纔有效果;
(3)efficient grid size reduction 通常爲了避免bottlenecks 會先將feature map的數目擴增,然後池化,但是這樣計算量又增加了。所以可以用一個並行的策略,一個帶步長的卷積和一個池化並行進行,然後得到的結果進行contact,這樣既能減少計算量,又能避免bottlenecks.
在這裏插入圖片描述

12. ResNeXt

paper: Aggregated Residual Transformations for Deep Neural Networks
arXiv: https://arxiv.org/abs/1611.05431 (v1 submitted time: 2016.11)
intro: aggregated residual transformation ( resnet+inception+group conv.)

主要內容: 提出了ResNeXt網絡結構(next dimension),吸收了VGG/ResNet的重複block,residual connection以及Inception的多尺度split-transform-merge的網絡設計特點。同時對split-transform-merge做了改進,每個分支使用相同的拓撲結構,使之更簡單,通用。另外使用group convolution(32個group)完成不同的分支的卷積。

13. Xception

paper: Xception: deep learning with depthwise seperable convolutions
arXiv: https://arxiv.org/abs/1610.02357 (v1 submitted time: 2016.10 )
intro: depthwise separable conv & residual connection

主要內容:提出Xception網絡結構(extreme inception),主要使用了depthwise separable conv和殘差連接。In short, the Xception architecture is a linear stack of depthwise separable convolution layers with residual connections。
在這裏插入圖片描述
mobileNet與Xception在卷積順序上的區別:Xception先用1x1卷積,然後使用depthwise separable conv. 在mobileNet中先用depthwise separable conv. 然後用1x1卷積。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章