1. 程式人生 > >深度學習下海血淚史【1】AlexNet回顧

深度學習下海血淚史【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個核卷積完了之後相加求和。這樣就能把一張圖高度濃縮成一個數了。