1. 程式人生 > >[深度學習之CNN] CNN的發展史 之LeNet、AlexNet、GoogLeNet、VGG、ResNet

[深度學習之CNN] CNN的發展史 之LeNet、AlexNet、GoogLeNet、VGG、ResNet

CNN的發展史

       上一篇回顧講的是2006年Hinton他們的Science Paper,當時提到,2006年雖然Deep Learning的概念被提出來了,但是學術界的大家還是表示不服。當時有流傳的段子是Hinton的學生在臺上講paper時,臺下的機器學習大牛們不屑一顧,質問你們的東西有理論推導嗎?有數學基礎嗎?搞得過SVM之類嗎?回頭來看,就算是真的,大牛們也確實不算無理取鬧,是騾子是馬拉出來遛遛,不要光提個概念。

       時間終於到了2012年,Hinton的學生Alex Krizhevsky在寢室用GPU死磕了一個Deep Learning模型,一舉摘下了視覺領域競賽ILSVRC 2012的桂冠,在百萬量級的ImageNet資料集合上,效果大幅度超過傳統的方法,從傳統的70%多提升到80%多。個人覺得,當時最符合Hinton他們心境的歌非《我不做大哥好多年》莫屬。

       這個Deep Learning模型就是後來大名鼎鼎的AlexNet模型。這從天而降的AlexNet為何能耐如此之大?有三個很重要的原因:

  1. 大量資料,Deep Learning領域應該感謝李飛飛團隊搞出來如此大的標註資料集合ImageNet;
  2. GPU,這種高度並行的計算神器確實助了洪荒之力,沒有神器在手,Alex估計不敢搞太複雜的模型;
  3. 演算法的改進,包括網路變深、資料增強、ReLU、Dropout等,這個後面後詳細介紹。

       從此,Deep Learning一發不可收拾,ILSVRC每年都不斷被Deep Learning刷榜,如圖1所示,隨著模型變得越來越深,Top-5的錯誤率也越來越低,目前降到了3.5%附近,而在同樣的ImageNet資料集合上,人眼的辨識錯誤率大概在5.1%,也就是目前的Deep Learning模型的識別能力已經超過了人眼。而圖1中的這些模型,也是Deep Learning視覺發展的里程碑式代表。


圖1. ILSVRC歷年的Top-5錯誤率

       在仔細分析圖1中各模型結構之前我們先需要了解一下深度學習三駕馬車之一————LeCun的LeNet網路結構。為何要提LeCun和LeNet,因為現在視覺上這些神器都是基於卷積神經網路(CNN)的,而LeCun是CNN的祖師爺,LeNet是LeCun打造的CNN經典之作。

       LeNet以其作者名字LeCun命名,這種命名方式類似的還有AlexNet,後來又出現了以機構命名的網路結構GoogLeNet、VGG,以核心演算法命名的ResNet。LeNet有時也被稱作LeNet5或者LeNet-5,其中的5代表五層模型。不過別急,LeNet之前其實還有一個更古老的CNN模型。

最古老的CNN模型

       1985年,Rumelhart和Hinton等人提出了後向傳播(Back Propagation,BP)演算法[1](也有說1986年的,指的是他們另一篇paper:Learning representations by back-propagating errors),使得神經網路的訓練變得簡單可行,這篇文章在Google Scholar上的引用次數達到了19000多次,目前還是比Cortes和Vapnic的Support-Vector Networks稍落後一點,不過以Deep Learning最近的發展勁頭來看,超越指日可待。

       幾年後,LeCun利用BP演算法來訓練多層神經網路用於識別手寫郵政編碼[2],這個工作就是CNN的開山之作,如圖2所示,多處用到了5*5的卷積核,但在這篇文章中LeCun只是說把5*5的相鄰區域作為感受野,並未提及卷積或卷積神經網路。關於CNN最原始的雛形感興趣的讀者也可以關注一下文獻[10]。


圖2. 最古老的CNN網路結構圖

LeNet

       1998年的LeNet5[4]標註著CNN的真正面世,但是這個模型在後來的一段時間並未能火起來,主要原因是費機器(當時苦逼的沒有GPU啊),而且其他的演算法(SVM,老實說是你乾的吧?)也能達到類似的效果甚至超過。


圖3. LeNet網路結構

       初學者也可以參考一下Caffe中的配置檔案:
https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet.prototxt

AlexNet、VGG、GoogLeNet、ResNet對比

       LeNet主要是用於識別10個手寫數字的,當然,只要稍加改造也能用在ImageNet資料集上,但效果較差。而本文要介紹的後續模型都是ILSVRC競賽歷年的佼佼者,這裡具體比較AlexNet、VGG、GoogLeNet、ResNet四個模型。如表1所示。

模型名 AlexNet VGG GoogLeNet ResNet
初入江湖 2012 2014 2014 2015
層數 8 19 22 152
Top-5錯誤 16.4% 7.3% 6.7% 3.57%
Data Augmentation + + + +
Inception(NIN) +
卷積層數 5 16 21 151
卷積核大小 11,5,3 3 7,1,3,5 7,1,3,5
全連線層數 3 3 1 1
全連線層大小 4096,4096,1000 4096,4096,1000 1000 1000
Dropout + + + +
Local Response Normalization + +
Batch Normalization +
表1 AlexNet、VGG、GoogLeNet、ResNet對比

AlexNet

       接下里直接上圖即可,AlexNet結構圖如下:


圖4. AlexNet網路結構

       換個視角:


圖5. AlexNet網路結構精簡版

       AlexNet相比傳統的CNN(比如LeNet)有哪些重要改動呢:
(1) Data Augmentation
       資料增強,這個參考李飛飛老師的cs231課程是最好了。常用的資料增強方法有:

  • 水平翻轉

  • 隨機裁剪、平移變換

  • 顏色、光照變換

(2) Dropout

       Dropout方法和資料增強一樣,都是防止過擬合的。Dropout應該算是AlexNet中一個很大的創新,以至於Hinton在後來很長一段時間裡的Talk都拿Dropout說事,後來還出來了一些變種,比如DropConnect等。

(3) ReLU啟用函式

       用ReLU代替了傳統的Tanh或者Logistic。好處有:

  1. ReLU本質上是分段線性模型,前向計算非常簡單,無需指數之類操作;
  2. ReLU的偏導也很簡單,反向傳播梯度,無需指數或者除法之類操作;
  3. ReLU不容易發生梯度發散問題,Tanh和Logistic啟用函式在兩端的時候導數容易趨近於零,多級連乘後梯度更加約等於0;
  4. ReLU關閉了右邊,從而會使得很多的隱層輸出為0,即網路變得稀疏,起到了類似L1的正則化作用,可以在一定程度上緩解過擬合。

       當然,ReLU也是有缺點的,比如左邊全部關了很容易導致某些隱藏節點永無翻身之日,所以後來又出現pReLU、random ReLU等改進,而且ReLU會很容易改變資料的分佈,因此ReLU後加Batch Normalization也是常用的改進的方法。

(4) Local Response Normalization
       Local Response Normalization要硬翻譯的話是區域性響應歸一化,簡稱LRN,實際就是利用臨近的資料做歸一化。這個策略貢獻了1.2%的Top-5錯誤率。

(5) Overlapping Pooling
       Overlapping的意思是有重疊,即Pooling的步長比Pooling Kernel的對應邊要小。這個策略貢獻了0.3%的Top-5錯誤率。

(6) 多GPU並行
       這個不多說,比一臂之力還大的洪荒之力。

VGG

       VGG結構圖


圖6. VGG系列網路結構

       換個視角看看VGG-19:


圖7. VGG-19網路結構精簡版

       VGG很好地繼承了AlexNet的衣鉢,一個字:深,兩個字:更深。

GoogLeNet


圖8. GoogLeNet網路結構

       GoogLeNet依然是:沒有最深,只有更深。

       主要的創新在於他的Inception,這是一種網中網(Network In Network)的結構,即原來的結點也是一個網路。Inception一直在不斷髮展,目前已經V2、V3、V4了,感興趣的同學可以查閱相關資料。Inception的結構如圖9所示,其中1*1卷積主要用來降維,用了Inception之後整個網路結構的寬度和深度都可擴大,能夠帶來2-3倍的效能提升。


圖9. Inception結構

ResNet

網路結構如圖10所示。


圖10. ResNet網路結構

       ResNet依然是:沒有最深,只有更深(152層)。聽說目前層數已突破一千。

       主要的創新在殘差網路,如圖11所示,其實這個網路的提出本質上還是要解決層次比較深的時候無法訓練的問題。這種借鑑了Highway Network思想的網路相當於旁邊專門開個通道使得輸入可以直達輸出,而優化的目標由原來的擬合輸出H(x)變成輸出和輸入的差H(x)-x,其中H(X)是某一層原始的的期望對映輸出,x是輸入。


圖11. ResNet網路結構

總結

Deep Learning一路走來,大家也慢慢意識到模型本身結構是Deep Learning研究的重中之重,而本文回顧的LeNet、AlexNet、GoogLeNet、VGG、ResNet又是經典中的經典。

隨著2012年AlexNet的一舉成名,CNN成了計算機視覺應用中的不二選擇。目前,CNN又有了很多其他花樣,比如R-CNN系列,詳情敬請期待我愛機器學習網站(52ml.net)的#Deep Learning回顧#下一期。

本文只是簡單回顧,疏漏之處敬請諒解,感興趣的可以加QQ群一起學習:252085834

[參考文獻]
[1] DE Rumelhart, GE Hinton, RJ Williams, Learning internal representations by error propagation. 1985 – DTIC Document.
[2] Y. LeCun , B. Boser , J. S. Denker , D. Henderson , R. E. Howard , W. Hubbard and L. D. Jackel, “Backpropagation applied to handwritten zip code recognition”, Neural Computation, vol. 1, no. 4, pp. 541-551, 1989.
[3] Kaiming He, Deep Residual Learning, http://image-net.org/challenges/talks/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
[4] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11):2278–2324, 1998.
[5] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In Advances in Neural Information Processing Systems 25, pages 1106–1114, 2012.
[6] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich: Going deeper with convolutions. CVPR 2015: 1-9
[7] Karen Simonyan, Andrew Zisserman: Very Deep Convolutional Networks for Large-Scale Image Recognition. CoRR abs/1409.1556 (2014)
[8] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep Residual Learning for Image Recognition. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016
[9] 一些對應的caffe實現或預訓練好的模型: https://github.com/BVLC/caffe https://github.com/BVLC/caffe/wiki/Model-Zoo
[10] K. Fukushima. Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36(4): 93-202, 1980.