1. 程式人生 > >cs231n-學習筆記-05卷積神經網路

cs231n-學習筆記-05卷積神經網路

卷積神經網路

1 簡介

全連線網路層

32x32x3的影象->伸展成3072x1

輸入x (3072,1)

計算Wx (10,3072) x (3072,1) = (10,1)

輸出y (10,1)

卷積網路層

卷積核的深度總是和輸出體的深度相同。

卷積網路由一些卷積層組成,中間穿插啟用函式。

一個卷積核->一個啟用層

步長一定要匹配

一般情況下,我們看到的卷積層的步長是1,卷積核的大小是FxF,補零為(F-1)/2。這將保留空間大小。

32x32的卷積輸入用5x5的卷積核提取特徵,使得在空間上體積減小。(32->28->24…)大小縮小的太快並不好,不能很好地提取影象特徵。

小結

(1)接受輸入維度W1×H1×D1

(2)需要四個超引數

卷積核的個數K 卷積核的個數一般是2的次冪,比如32, 64, 128, 512

卷積核長寬F

步長S

0填充的個數P

(3)計算輸出維度W2×H2×D2

W2=(W1F+2P)/S+1

H2=(H1F+2P)/S+1

D2=K

(4)引數,F×F×D1×KK個偏置

補:

1x1的卷積層真的很有意義

56x56x64 32個1x1x64 執行64維點乘 56x56x32

池化層

使卷積核更小,更易於管理。

獨立地執行每個啟用層。

池化層的卷積核2x2並且步長為2

小結

(1)接受輸入維度W1×H1×D1

(2)需要三個超引數:

卷積核空間擴充套件F

步長S

(3)輸出大小:

W2=(W1F)/S+1

H2=(H1F)/S+1

D1=D2

(4)引入引數0,因為它計算輸出的固定函式

(5)池化層一般不使用0邊距

全連線層

包含連線輸出單元的神經元,就像之前學過的神經網路。

總結

(1)卷積網路包括卷積層、池化層和全連線層

(2)更喜歡更小的卷積核大小,更深的網路結構

(3)希望沒有池化層或者全連線層,僅僅包含卷積層

(4)典型的卷積網路結構是 [(卷積-relu)xN-池化?]xm-(全連線-relu)xK,softmax

其中N大約是5,M相對較大,K在0-2之間,但是這種經典架構逐漸在發生輕微的變化。

2 架構學習

AlexNet

VGG

GoogleNet

ResNet

回顧

LeNet-5結構

卷積核5x5,步長為1,池化層2x2,步長為2,結構[卷積1-池化1-卷積2-池化2-全連線1-全連線2]

2.1 AlexNet

結構[卷積1-池化1-歸一化1-卷積2-池化2-歸一化2-卷積3-卷積4-卷積5-池化3-全連線1-全連線2-全連線3]

輸入227x227x3=

卷積1:96個11x11的卷積核,步長為4 (引數,11x11x3x96)

輸出55x55x96([55x55x48]x2)

池化1:3x3過濾器,步長為2(引數,0)

輸出27x27x96

歸一化1:(引數,0)

輸出27x27x96

卷積2:256個5x5的卷積核,步長為1,邊距為2(引數,5x5x96x256)

輸出27x27x256

池化2:3x3過濾器,步長為2(引數,0)

輸出13x13x256

歸一化2:(引數,0)

輸出13x13x256

卷積3:384個3x3的卷積核,步長為1,邊距為1(引數,3x3x256x384)

輸出13x13x384

卷積4:384個3x3的卷積核,步長為1,邊距為1(引數,3x3x384x384)

輸出13x13x384

卷積5:256個3x3的卷積核,步長為1,邊距為1(引數,3x3x384x256)

輸出13x13x256

池化3:3x3的過濾器,步長為2(引數,0)

輸出6x6x256

全連線1:4096神經元

全連線2:4096神經元

全連線3:1000神經元

細節引數:

① 首先使用relu;

② 使用歸一化,使資料不再普通;

③ 資料增廣

④ dropout概率設定為0.5

⑤ 批大小設定為128

⑥ SGD動量設定為0.9

⑦ 學習率設定為0.01,每次較小10

⑧ 當驗證集的精確度穩定之後,L2權重衰減設定為5e-4,7個CNN整合誤差從18.2%下降到15.4%

注:

① 在GTX580的GPU上僅僅用3GB的記憶體訓練,網路分佈在兩個GPU上,每個GPU上有一半的神經元(特徵對映)

② 卷積1,2,4,5通過特徵對映在同樣的的GPU上連線

③ 卷積3,全連線6,7,8根據所有的特徵對映與前面的層連線,他們之間通過GPU通訊

2.2 VGGNet

更小的卷積核,更深的網路

Q:為什麼使用更小的卷積核?(3x3的卷積核)

3x3的卷積核步長為1的層與7x7的卷積層有同樣的有效感受區域

結構[卷積1-卷積2-池化1-卷積3-卷積4-池化2-卷積5-卷積6-卷積7-池化3-卷積8-卷積9-卷積10-池化4-卷積11-卷積12-卷積13-池化5-全連線1-全連線2-全連線3-softmax]

輸入224x224x3

卷積1:224x224x64(引數,3x3x3x64)

卷積2:224x224x64(引數,3x3x64x64)

池化1:112x112x64(引數,0)

卷積3:112x112x128(引數,3x3x64x128)

卷積4:112x112x128(引數,3x3x128x128)

池化2:56x56x128(引數,0)

卷積5:56x56x256(引數,3x3x128x256)

卷積6:56x56x256(引數,3x3x256x256)

卷積7:56x56x256(引數,3x3x256x256)

池化3:28x28x256(引數,0)

卷積8:28x28x512(引數,3x3x256x512)

卷積9:28x28x512(引數,3x3x512x512)

卷積10:28x28x512(引數,3x3x512x512)

池化4:14x14x512(引數,0)

卷積11:14x14x512(引數,3x3x512x512)

卷積12:14x14x512(引數,3x3x512x512)

卷積13:14x14x512(引數,3x3x512x512)

池化5:7x7x512(引數,0)

全連線1:1x1x4096(引數,7x7x512x4096)

全連線2:1x1x4096(引數,4096x4096)

全連線3:1x1x1000(引數,4096x1000)

2.3 GoogleNet

更深的網路,計算更高效

22層,開始的模組很高效,沒有全連線層,只有500萬個引數(比AlexNet少了12倍)

2.4 ResNet

越深的網路越難優化

ResNet的結構:

(1)堆積殘差快;

(2)每個殘差快有兩個3x3的卷積層;

(3)使卷積核的數量變為原來的2倍,在空間上向下取樣,步長為2(每個維度除以2)

(4)在一開始新增額外的卷積層

(5)在結束出不使用全連線層,(僅僅包含1000的全連線到輸出分類)

引數:

(1)在每個卷積層後面進行歸一化處理;

(2)Xavier/2初始化;

(3)SGD+Momentum(引數0.9)

(4)學習率,0.1,當驗證集誤差趨於平穩的時候除以10;

(5)小批大小,256;

(6)權重衰退,1e-5;

(7)沒有使用dropout

實驗結果:

(1)能夠在不退化的情況下,訓練非常深的網路;

(2)如期望的一樣,更深的網路得到更低的訓練誤差;

3 總結

(1)VGG,GoogleNet,ResNet使用的都很廣泛,在模型庫都能夠輕鬆的得到;

(2)殘差網路是目前最好的,通常將其設定為預設;

(3)有向更深的網路演化的趨勢;

(4)重要的研究方向主要在層的設計、跳過連線和提高梯度流;

(5)最近的研究趨向於深度對的必要性與廣度,殘差連線之間的較量;