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)接受輸入維度
(2)需要四個超引數
卷積核的個數 卷積核的個數一般是2的次冪,比如32, 64, 128, 512
卷積核長寬
步長
0填充的個數
(3)計算輸出維度
(4)引數,和個偏置
補:
1x1的卷積層真的很有意義
56x56x64 32個1x1x64 執行64維點乘 56x56x32
池化層
使卷積核更小,更易於管理。
獨立地執行每個啟用層。
池化層的卷積核2x2並且步長為2
小結
(1)接受輸入維度
(2)需要三個超引數:
卷積核空間擴充套件
步長
(3)輸出大小:
(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)最近的研究趨向於深度對的必要性與廣度,殘差連線之間的較量;