深度學習下海血淚史【1】AlexNet回顧
0 摘要
Hinton大神(BP演算法提出者)的學生Alex提出於2012年,主要創新和貢獻為 【1】首次利用GPU和ReLU加快訓練 【2】 使用dropout減少過擬合 【3】提出LRN層和重疊最大池化(max pooling)
AlexNet一舉奪得視覺領域競賽ILSVRC 2012的桂冠,在ImageNet資料集合上,效果遠超過傳統的方法,從傳統的70%多提升到80%多。
1 網路架構
AlexNet共有八層網路 5層卷積層,3層全連線層,引數數量60M,神經元個數650k,分類數目1000類
網路層 | 感受野 | 卷積核個數 | 卷積核尺寸 | 步長 | padding | feature_map |
---|---|---|---|---|---|---|
conv1 | 227*227 | 48*2 | 11*11*3 | 4 | 2 | 227*227 |
max pooling | 55*55 | 48*2 | 3*3*3 | 2 | - | 56*56 |
conv2 | 27*27 | 48*2 | 5*5*48 | 1 | 2 | 27*27 |
max pooling | 25*25 | 128*2 | 3*3*48 | 2 | - | 27*27 |
conv3 | 12*12 | 192*2 | 3*3*128 | 1 | 1 | 13*13 |
conv4 | 10*10 | 192*2 | 3*3*192 | 1 | 1 | 13*13 |
conv5 | 8*8 | 128*2 | 3*3*192 | 1 | 1 | 13*13 |
max pooling | 6*6 | 128*2 | 3*3*128 | 2 | - | 6*6 |
fc1 | - | 2048*2 | 6*6*256 | - | - | - |
fc2 | - | 2048*2 | 1*1*4096 | - | - | - |
fc3 | - | 1000 | 1*1*4096 | - | - | - |
1.1 ReLU
f(x)= max(0,x) 1、與使用tanh相比ReLUs能以6倍快的速度到達25%的訓練錯誤率(CIFAR-10資料集)。 2、解決了sigmoid在網路層次較深時的梯度彌散問題。
1.2 Overlap Max pooling
f(x)= max(0,x) Pooling的步長stride比Kernel Size要小,重疊池化視窗能夠分別將第一名的錯誤率降低0.4%,第5名的錯誤率降低0.3%
1.3 減少過擬合
1.3.a 資料增強(data augmentation)
方法一:水平翻轉和影象變換 方法二:PCA Jittering
1.3.b Dropout
訓練時使用Dropout隨機忽略一部分神經元,以避免模型過擬合。 樸素思想:以0.5的概率讓隱藏層的輸出為0,失活的神經元不再進行前向傳播且不參與反向傳播 AlexNet:前兩個全連線層使用dropout,會減少過擬合,但會使訓練迭代次數翻一倍
1.4 LRN(區域性響應歸一化)
提出了LRN層,對區域性神經元的活動建立競爭機制,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力。在後來的設計中,這一層已經被諸如Regularization技術,如drop out, batch normalization取代了。
2 後續發展
1)全連線層的替換(使用全卷積來進行替換) 2)卷積核大小的修改(類似inception) 3)通道分組卷積(類似shufflenet) 4)通道、權重剪枝(類似Channel pruing) 5)LRN被batch normalization等泛化增強技術替代
3 附錄
感受野計算公式(不考慮padding,從下往上反推) rfsize = (output - 1) * stride + ksize
Feature Map的尺寸計算公式 fm(output)=(input_size + 2 * padding_size − ksize)/stride+1
卷積核的厚度=被卷積的影象的通道數 (卷積後三通道合為1) 卷積核的個數=卷積操作後輸出的通道數 (即feature map的通道數) 全連線概念 拿第一層全連線層舉例,該操作其實就是用2048個13*13 *256(256是池化層的厚度)的卷積核卷積出來的,對於輸入的每一張特徵圖,都使用一個和影象大小一樣的核卷積進行點積運算,這樣整幅圖就變成了一個數了,如果厚度是256就是那256個核卷積完了之後相加求和。這樣就能把一張圖高度濃縮成一個數了。