一、基本信息
標題:ImageNet Classification with Deep Convolutional Neural Networks
時間:2012
出版源:Neural Information Processing Systems (NIPS)
論文領域:深度學習,計算機視覺
引用格式:Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
鏈接:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networ
二、研究背景
- 數據集:出現imageNet這樣的大數據集,可以用來訓練更復雜的模型 。
- CNN:而CNNs它們的能力可以通過改變深度和廣度來控制,它們還對圖像的本質(即統計的平穩性和像素依賴性的局部性)做出了強有力且基本正確的假設。與具有類似大小層的標準前饋神經網絡相比,CNNs具有更少的連接和參數,因此更容易訓練,而其理論上最好的性能可能只會稍微差一些。
- GPU: GPU和卷積操作結合,使得訓練大型CNN網絡成爲可能
三、創新點
貢獻點:
- 對ImageNet的子集進行了迄今爲止最大的卷積神經網絡訓練,並取得了最好效果
- 開高度優化GPU實現2D卷積方法,後面提到網絡在2塊GPU並行
- 網絡包含很多新的不尋常特徵
- 防止過擬合
我們最終的網絡包含5個卷積層和3個全連接層,這個深度似乎很重要:我們發現去掉任何卷積層(每個卷積層包含的model s參數不超過1%)都會導致性能下降。
ReLU激活
圖1:使用ReLUs(實線)的四層卷積神經網絡在CIFAR-10上達到25%的訓練錯誤率,比使用tanh神經元(虛線)的同等網絡快六倍。每個網絡的學習率都是獨立選擇的,以使訓練儘可能快。沒有任何形式的正規化。這裏演示的效果的大小隨網絡結構的不同而不同,但是使用ReLUs的網絡始終比使用飽和神經元的網絡學習速度快幾倍。
Local Response Normalization 局部響應歸一化
此方案有助於泛化,CNN在未歸一化的情況下,測試錯誤率爲13%;在歸一化的情況下,測試錯誤率爲11%。
參考這篇文章吧 深入理解AlexNet網絡,大致意思就是當今kernel的map的(x, y)像素位置在周圍鄰居相同kernel的map的(x, y)像素。也就是上面式子中的 。然後把這些鄰居pixel的值平方再加和。乘以一個係數 再加上一個常數k, 然後 次冥, 就是分母,分子 就是第次kernel對應的map的(x, y)位置的pixel值。關鍵是參數 如何確定, 論文中說在驗證集中確定, 最終確定的結果爲:
Overlapping Pooling 重疊池化
初步理解:假如池化單元爲zxz
- 步長s = z,就是傳統的池化
- 步長s < z,就是重疊池化
作者提到當s = 2 z = 3時,對比s = z = 2,錯誤率減少了0.4%(top-1) 和 0.3%(top-5)
使用重疊池化可以減少過擬合
網絡架構
一共8層,前5層是卷積層,後3層是全連接層:
- 卷積層除了第3層,其餘卷積層直接連接在同GPU上。第3層會連接第2層所有輸出。
- 局部響應規範化(Local Response Normalization)層在第1層和第2層卷積層後。
- 最大池化層在響應規範化層(第1層和第2層卷積)和第5層卷積後。
- ReLU非線性激活函數應用在每個卷積和全連接層。
卷積輸出計算公式,具體看這裏:
設圖像大小:n*n, 步長:s,卷積核大小:f,padding:p
具體參數:
輸入圖片爲224x224x3。
-
第1層卷積:
卷積
輸入:224x224x3
卷積核大小:11 * 11 *3 步長:4(這個是11x11核的中心視野) 數目:48 * 2 = 96
輸出:55 * 55 * 48 * 2
(輸出爲55 * 55:(224 - 11)/4 +1 = 54.25,取了上整55,48個特徵map,因爲有2個GPU,所以總的特徵map數量是48 * 2)
ReLu激活
池化層
核大小:3 * 3 * 1 步長:2
輸出:27 * 27 * 48 * 2
(輸出爲27 * 27 :(55 - 3) / 2 + 1 = 27)
標準化
【注】圖上的結果沒有進行池化 -
第2層卷積:
卷積
輸入:27 * 27 * 48 * 2 擴展2個像素:31 * 31 * 48 * 2
卷積核大小:5 * 5 * 48 步長:1 數目:128 * 2 = 256(還需要連接局部響應規範化層和池化層)
輸出:27 * 27 * 128 * 2
(輸出爲27 * 27:31 - 5 + 1 = 27,128個特徵map,因爲有2個GPU,所以總的特徵map數量是128 * 2)
ReLu激活
池化層
核大小:3 * 3 * 1 步長:2
輸出:13 * 13 * 128 * 2
(輸出爲13* 13:(27 - 3) / 2 + 1 = 13)
標準化 -
第3層卷積(這層卷積核結合了2個GPU):
卷積
輸入:13 * 13 * 128 * 2 擴展1個像素:15 * 15 * 128 * 2
卷積核大小:3 * 3 * 256(GPU1:128 + GPU2:128) 步長:1 數目:192 * 2 = 384
輸出:13 * 13 * 192 * 2
(輸出爲13 * 13:15 - 3 +1 = 13 192個特徵map,因爲有2個GPU,所以總的特徵map數量是192 * 2)
ReLu激活 -
第4層卷積:
卷積
輸入:13 * 13 * 192 * 2 擴展1個像素:15 * 15 * 192 * 2
卷積核大小:3 * 3 * 192 步長:1 數目:192 * 2 = 384
輸出:13 * 13 * 192 * 2
(輸出爲13 * 13:15 - 3 +1 = 13 192個特徵map,因爲有2個GPU,所以總的特徵map數量是192 * 2)
ReLu激活 -
第5層卷積:
卷積
輸入:13 * 13 * 192 * 2 擴展1個像素:15 * 15 * 192 * 2
卷積核大小:3 * 3 * 192 步長:1 數目:128 * 2 = 256
輸出:13 * 13 * 128 * 2
(輸出爲13 * 13:15 - 3 +1 = 13 128個特徵map,因爲有2個GPU,所以總的特徵map數量是128 * 2)
ReLu激活
池化層
核大小:3 * 3 * 1 步長:2
輸出:6 * 6 * 128 * 2
(輸出爲6* 6:(13 - 3) / 2 + 1 = 6) -
第6層全連接
輸入:6 * 6 * 128 * 2
輸出:2048*2個神經元
Dropout -
第7層全連接
輸入:20482個神經元
輸出:20482個神經元
Dropout -
第8層全連接
輸入:2048*2個神經元
輸出:1000個神經元
防止過擬合
增加數據
就是對圖片進行裝換,又很簡單可以運行時在裝換且在cpu上執行,作者認爲這個是個free操作。
- 圖像平移和翻轉,具體做法:從256 * 256圖片中4個角點和中心點取5個,以及它們的水平翻轉 5個,一共10個圖進行訓練。
- 改變RGB顏色,使用PCA分解 爲高斯分佈產生。這種方式模擬自然特性,因此可以做到光照不變性。
Dropout
這部分之前總結過:每週學習新知識1:深度學習中的Dropout
四、實驗結果
五、結論與思考
作者結論
值得注意的是,如果去掉一個卷積層,我們的網絡性能就會下降。例如,刪除任何中間層都會導致網絡的頂級性能損失約2%。所以深度對於我們取得的成果非常重要。
最後,我們希望在視頻序列中使用非常大且深的卷積網絡,其中時間結構提供了非常有用的信息,而這些信息在靜態圖像中是不存在的或不太明顯的。
總結
這篇論文爲後續深度學習打下了基礎。
思考
深度指卷積層的深度還是全連接層的深度