卷積神經網絡的一些經典網絡(Lenet,AlexNet,VGG16,ResNet)

LeNet – 5網絡

網絡結構爲:

輸入圖像是:32x32x1的灰度圖像

卷積核:5x5,stride=1

得到Conv1:28x28x6

池化層:2x2,stride=2

(池化之後再經過激活函數sigmoid)

得到Pool1:14x14x6

卷積核:5x5,stride=1

得到Conv2:10x10x16

池化層Pool2:2x2,stride=2

(池化之後再經過激活函數sigmoid)

得到Pool2:5x5x16

 

然後將Pool2展開,得到長度爲400的向量

經過第一個全連接層,得到FC1,長度120

經過第二個全連接層,得到FC2,長度84

最後送入softmax迴歸,得到每個類的對應的概率值。

 

網絡結構圖如下:

 

 

LeNet大約有6萬個參數

可以看出,隨着網絡的加深,圖像的寬度和高度在縮小,與此同時,圖像的通道卻在不斷的變大。

 

注:LeNet論文中的一些細節與現在的網絡處理方式有些不同。閱讀原始論文時,建議精讀Section2,泛讀Section3。不同點有以下幾點:

1)論文中使用Sigmoid函數作爲激活函數,而現在我們一般使用ReLU等作爲激活函數;

2)現在我們使用的每個卷積核的通道數都與其上一層的通道數相同,但是LeNet受限於當時的計算機的運算速度,爲了減少計算量和參數,LeNet使用了比較複雜的計算方式;

3)LeNet網絡在池化層之後再進行非線性處理(即激活函數),現在的操作是經過卷積之後就經過非線性處理(激活函數),然後再進行池化操作;

 

 

AlexNet

輸入圖像:227x227x3的RGB圖像(實際上原文中使用的圖像是224x224x3,推導的時候使用227x227x3會好一點)

Filter1:11x11,stride=4

得到Conv1:55x55x96

Max-POOL1:3x3,stride=2

得到Conv2:27x27x96

Filter2: 5x5,padding=same

得到Conv3: 27x27x256

Max-Pool2: 3x3,stride=2

得到Conv4: 13x13x256

Filter3: 3x3,padding=same

得到Conv5: 13x13x384

Filter4: 3x3,padding=same

得到Conv6: 13x13x384

Filter5: 3x3,padding=same

得到Conv6: 13x13x256

Max-Pool3: 3x3,stride=2

得到Conv7: 6x6x256

 

然後將Conv7展開,得到一個長度爲6x6x256=9216的向量

經過第一個全連接層

得到FC1: 4096

經過第二個全連接層

得到FC2: 4096

 

最後使用softmax函數輸出識別的結果

 

 

       AlexNet包含大約6000萬個參數。

       AlexNet使用了ReLU激活函數;

  AlexNet也使用了LRN層(Local Response Normalization,局部響應歸一化層),但是由於LRN可能作用並不大,應用的比較少,在此不再詳述。

 

 

VGG-16

VGG16網絡包含了16個卷積層和全連接層。

VGG網絡的一大優點是:簡化了神經網絡結構。

VGG網絡使用的統一的卷積核大小:3x3,stride=1,padding=same,統一的Max-Pool: 2x2,stride=2。

 

 

 

  VGG16是一個很大的網絡,總共包含1.38億個參數。因此其主要缺點就是需要訓練的特徵數量非常巨大。

       另外也有VGG19網絡,由於VGG16表現幾乎和VGG16不分高下,所以很多人還是會使用VGG16。

 

 

殘差網絡(Residual Networks,ResNet)

  因爲存在梯度消失和梯度爆炸(vanishing and exploding gradients),非常深的網絡是很難訓練的。

       ResNet由殘差塊(Residual block)組成,

       信息流從a[l]到a[l+2],普通的網絡需要經過以下幾個步驟,稱爲主路徑。

Shortcut/skip connection指a[l]跳過一層或者好幾層,從而將信息傳遞到神經網絡的更深層。

 

Shortcut/skip connection在進行ReLU非線性激活之前加上,如下圖所示:

 

 

如果我們使用標準的優化算法訓練一個普通網絡,憑經驗,你會發現隨着網絡深度的加深,訓練錯誤會先減少,然後增多。而理論上,隨着網絡深度的加深,應該訓練的越來越好纔對,但是實際上,如果沒有殘差網絡,對於一個普通的網絡來說,深度越深意味着用優化算法越難訓練。但是有了ResNet就不一樣了,即使網絡再深,訓練的表現卻不錯,比如說錯誤會減少,就算訓練深度達到100層的網絡也不例外。 這種方式確實有助於解決梯度消失和梯度爆炸問題,讓我們在訓練更深網絡的同時,又能保證良好的性能。

注:上圖中,Plain network指的是沒有加上藍色單箭頭線的網絡;ResNet指的是畫上藍色箭頭線的網絡。

 

爲什麼ResNet能有如此好的表現?

  上面講到,一個網絡越深,它在訓練集上訓練網絡的效率會有所減弱,這也是有時候我們不希望加深網絡的原因,但是ResNet卻能克服這個問題。

       假設有一個大型的神經網絡,其輸入爲X,輸出激活值a[l],如果你想增加這個神經網絡的深度,比如下圖,在原網絡後面再加上兩層全連接層,得到新的激活函數a[l+2]。

 

 

  Shortcut使得我們很容易得出a[l+2]=a[l],這意味着即使給神經網絡增加了這兩層,它的效率也並不遜色於更簡單的神經網絡。因爲只要使得新添加的兩層的權重和偏置爲0,那麼新網絡就跟原始網絡效果是一樣的。但是如果新添加的這些隱層單元學到一些有用信息,那麼它可能比學習恆等函數表現更好。

       具體可以看這篇文章:http://www.cnblogs.com/hejunlin1992/p/7751516.html

 

       假設z[l+2]與a[l]具有相同維度,所以ResNet使用了許多相同卷積

       如果輸入與輸出有不同的維度,比如說輸入的維度是128,a[l]的維度是256,再增加一個矩陣Ws,Ws是一個256x128維度的矩陣,所以Ws乘以a[l]的維度是256,你不需要對Ws做任何操作,它是通過學習得到的矩陣或參數,它是一個固定的矩陣,padding的值爲0 

 

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