1. 數據集ImageNet
- 數據特徵:15 million張,22000類,分辨率高且多樣
- 預處理:降採樣到256
× 256固定分辨率,對矩形邊框的圖像,先讓短邊縮小到256,然後剪裁出中心的256× 256的部分。使用中心化的原始RGB像素,即每張圖片剪掉訓練集中所有像素點的均值。
2. 結構
1. ReLU 非線性
tanh
和logistic
函數都是飽和非線性激活函數,梯度下降的速度明顯慢於ReLU
非飽和非線性激活函數。
2. 多GPU並行
- 多個GPU可以不用經過主機的內存而直接相互讀取對方的內存。
- 在兩個GPU上各放置一半的神經元,並且只在特定的層進行通信。相對於MCDNN來說,兩個GPU上的網絡並不是獨立的。
3. 局部響應歸一化
- ReLU不需要將輸入歸一化來防止激活函數飽和
- 如果一個訓練樣本產生了一個正值輸入到ReLU,對應的神經元就進行了學習。
- 在特定的層使用局部歸一化的方法幫助泛化。將某個濾波器在一個位置上對特徵圖卷積的結果,除以上下相鄰的幾個濾波器在同一個位置上卷積結果之和。歸一化作用爲,在使用不同濾波器卷積結果中,較大的卷積結果會產生競爭。
4. 重疊池化
池化窗口爲3
5. 總體結構
- 8層
⟶ 5個卷積層,3個全連接層。 - 2,4,5卷積層只連接同一GPU中之前層的特徵圖,3卷積層連接2卷積層2個GPU中所有特徵圖。全連接層也是連接2個GPU中所有神經元。
- 局部歸一化只在1、2兩個卷積層。
- 重疊最大池化只在1、2兩個卷積層歸一化之後和在5卷積層之後。
- 卷積層和全連接層所有激活函數都使用ReLU。
操作 | 結果 |
---|---|
輸入訓練集 | (batchSize,3,224,224) |
卷積層(96,3,11,11)stride(4,4)無pad | (batchSize,96,54,54) |
歸一化和最大池化(3,3)stride(2,2) | (batchSize,96,27,27) |
卷積層(256,96,5,5)stride(1,1)無pad | (batchSize,256,23,23) |
歸一化最大池化(3,3)stride(2,2) | (batchSize,256,11,11) |
卷積層(384,256,3,3)stride(1,1)pad(1,1) | (batchSize,384,11,11) |
卷積層(384,384,3,3)stride(1,1)pad(1,1) | (batchSize,384,11,11) |
卷積層(256,384,3,3)stride(1,1)pad(1,1) | (batchSize,256,11,11) |
最大池化(3,3)stride(2,2) | (batchSize,1024,5,5) |
展開 | (batchSize,1024 |
全連接層(25600,4096) | (batchSize,4096) |
全連接層(4096,4096) | (batchSize,4096) |
softmax層(4096,1000) | (batchSize,1000) |
3. 減少過擬合
1. 數據集人工擴充
使用保留標籤的變換方法,使用計算量小的方法可以不用將變換後的數據保存在磁盤上。
- 圖片平移和水平翻轉,提取 256
× 256圖片中的224× 224的區域和其水平翻轉,可以將數據集增大32× 32× 2 = 2048倍。測試的時候選用4個角落和中心的5個區域以及水平翻轉對應的區域,一共10個區域,在softmax層對10個預測結果取平均。 - 改變訓練圖片RGB通道的強度,對訓練集中所有圖片每個像素位置上的RGB三個通道值構成的N
× 3維矩陣做PCA,即得到3× 3協方差矩陣的主特徵值,在每張訓練圖片該像素位置上RGB通道分別加上大小正比於特徵值乘以N(0,0.1) 高斯隨機數的值。隨機數只在數據集重新使用的時候再次生成。這樣做保證了物體對於光強和顏色的不變性。
2. Dropout模型組合
將不同的模型的預測進行組合的代價太高。使用dropout模型組合,就是把隱層神經元輸出以0.5概率置零,該神經元不參與前向和反向傳播。每次輸入數據模型都會有不同的結構,而所有的權重都是共享的。測試的時候使用所有的神經元但是把它們的輸出乘以0.5。
這樣減少了神經元複雜的互適應關係,能夠學習到更魯棒的特徵。
在前兩個全連接層使用dropout 0.5
3. 細節
- batch size=128
- momentum=0.9
- weight decay=0.0005
- 全部權重初始化爲0均值0.01標準差高斯分佈,2、4、5卷積層和全連接層偏置爲1,1和3卷積層偏置爲0。
- 學習率在驗證誤差停止降低的時候除以10,除以3次之後停止訓練。