#Deep Learning回顧#之LeNet、AlexNet、GoogLeNet、VGG、ResNet
原文:#Deep Learning回顧#之LeNet、AlexNet、GoogLeNet、VGG、ResNet
CNN的發(fā)展史
? ? ? ?上一篇回顧講的是2006年Hinton他們的Science Paper,當(dāng)時提到,2006年雖然Deep Learning的概念被提出來了,但是學(xué)術(shù)界的大家還是表示不服。當(dāng)時有流傳的段子是Hinton的學(xué)生在臺上講paper時,臺下的機(jī)器學(xué)習(xí)大牛們不屑一顧,質(zhì)問你們的東西有理論推導(dǎo)嗎?有數(shù)學(xué)基礎(chǔ)嗎?搞得過SVM之類嗎?回頭來看,就算是真的,大牛們也確實不算無理取鬧,是騾子是馬拉出來遛遛,不要光提個概念。
? ? ? ?時間終于到了2012年,Hinton的學(xué)生Alex Krizhevsky在寢室用GPU死磕了一個Deep Learning模型,一舉摘下了視覺領(lǐng)域競賽ILSVRC 2012的桂冠,在百萬量級的ImageNet數(shù)據(jù)集合上,效果大幅度超過傳統(tǒng)的方法,從傳統(tǒng)的70%多提升到80%多。個人覺得,當(dāng)時最符合Hinton他們心境的歌非《我不做大哥好多年》莫屬。
? ? ? ?這個Deep Learning模型就是后來大名鼎鼎的AlexNet模型。這從天而降的AlexNet為何能耐如此之大?有三個很重要的原因:
大量數(shù)據(jù),Deep Learning領(lǐng)域應(yīng)該感謝李飛飛團(tuán)隊搞出來如此大的標(biāo)注數(shù)據(jù)集合ImageNet;GPU,這種高度并行的計算神器確實助了洪荒之力,沒有神器在手,Alex估計不敢搞太復(fù)雜的模型;算法的改進(jìn),包括網(wǎng)絡(luò)變深、數(shù)據(jù)增強(qiáng)、ReLU、Dropout等,這個后面后詳細(xì)介紹。
? ? ? ?從此,Deep Learning一發(fā)不可收拾,ILSVRC每年都不斷被Deep Learning刷榜,如圖1所示,隨著模型變得越來越深,Top-5的錯誤率也越來越低,目前降到了3.5%附近,而在同樣的ImageNet數(shù)據(jù)集合上,人眼的辨識錯誤率大概在5.1%,也就是目前的Deep Learning模型的識別能力已經(jīng)超過了人眼。而圖1中的這些模型,也是Deep Learning視覺發(fā)展的里程碑式代表。
圖1. ILSVRC歷年的Top-5錯誤率
? ? ? ?在仔細(xì)分析圖1中各模型結(jié)構(gòu)之前我們先需要了解一下深度學(xué)習(xí)三駕馬車之一————LeCun的LeNet網(wǎng)絡(luò)結(jié)構(gòu)。為何要提LeCun和LeNet,因為現(xiàn)在視覺上這些神器都是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的,而LeCun是CNN的祖師爺,LeNet是LeCun打造的CNN經(jīng)典之作。
? ? ? ?LeNet以其作者名字LeCun命名,這種命名方式類似的還有AlexNet,后來又出現(xiàn)了以機(jī)構(gòu)命名的網(wǎng)絡(luò)結(jié)構(gòu)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),使得神經(jīng)網(wǎng)絡(luò)的訓(xùn)練變得簡單可行,這篇文章在Google Scholar上的引用次數(shù)達(dá)到了19000多次,目前還是比Cortes和Vapnic的Support-Vector Networks稍落后一點,不過以Deep Learning最近的發(fā)展勁頭來看,超越指日可待。
? ? ? ?幾年后,LeCun利用BP算法來訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)用于識別手寫郵政編碼[2],這個工作就是CNN的開山之作,如圖2所示,多處用到了5*5的卷積核,但在這篇文章中LeCun只是說把5*5的相鄰區(qū)域作為感受野,并未提及卷積或卷積神經(jīng)網(wǎng)絡(luò)。關(guān)于CNN最原始的雛形感興趣的讀者也可以關(guān)注一下文獻(xiàn)[10]。
圖2. 最古老的CNN網(wǎng)絡(luò)結(jié)構(gòu)圖
LeNet
? ? ? ?1998年的LeNet5[4]標(biāo)注著CNN的真正面世,但是這個模型在后來的一段時間并未能火起來,主要原因是費(fèi)機(jī)器(當(dāng)時苦逼的沒有GPU?。移渌乃惴ǎ⊿VM,老實說是你干的吧?)也能達(dá)到類似的效果甚至超過。
圖3. LeNet網(wǎng)絡(luò)結(jié)構(gòu)
初學(xué)者也可以參考一下Caffe中的配置文件:
https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet.prototxt
AlexNet、VGG、GoogLeNet、ResNet對比
? ? ? ?LeNet主要是用于識別10個手寫數(shù)字的,當(dāng)然,只要稍加改造也能用在ImageNet數(shù)據(jù)集上,但效果較差。而本文要介紹的后續(xù)模型都是ILSVRC競賽歷年的佼佼者,這里具體比較AlexNet、VGG、GoogLeNet、ResNet四個模型。如表1所示。
初入江湖 2012 2014 2014 2015 層數(shù) 8 19 22 152 Top-5錯誤 16.4% 7.3% 6.7% 3.57% Data Augmentation + + + + Inception(NIN) – – + – 卷積層數(shù) 5 16 21 151 卷積核大小 11,5,3 3 7,1,3,5 7,1,3,5 全連接層數(shù) 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結(jié)構(gòu)圖如下:
圖4. AlexNet網(wǎng)絡(luò)結(jié)構(gòu)
? ? ? ?換個視角:
圖5. AlexNet網(wǎng)絡(luò)結(jié)構(gòu)精簡版
?AlexNet相比傳統(tǒng)的CNN(比如LeNet)有哪些重要改動呢:
(1) Data Augmentation
? ? ? ?數(shù)據(jù)增強(qiáng),這個參考李飛飛老師的cs231課程是最好了。常用的數(shù)據(jù)增強(qiáng)方法有:
水平翻轉(zhuǎn)隨機(jī)裁剪、平移變換顏色、光照變換
(2) Dropout
? ? ? ?Dropout方法和數(shù)據(jù)增強(qiáng)一樣,都是防止過擬合的。Dropout應(yīng)該算是AlexNet中一個很大的創(chuàng)新,以至于Hinton在后來很長一段時間里的Talk都拿Dropout說事,后來還出來了一些變種,比如DropConnect等。
(3) ReLU激活函數(shù)
? ? ? ?用ReLU代替了傳統(tǒng)的Tanh或者Logistic。好處有:
ReLU本質(zhì)上是分段線性模型,前向計算非常簡單,無需指數(shù)之類操作;ReLU的偏導(dǎo)也很簡單,反向傳播梯度,無需指數(shù)或者除法之類操作;ReLU不容易發(fā)生梯度發(fā)散問題,Tanh和Logistic激活函數(shù)在兩端的時候?qū)?shù)容易趨近于零,多級連乘后梯度更加約等于0;ReLU關(guān)閉了右邊,從而會使得很多的隱層輸出為0,即網(wǎng)絡(luò)變得稀疏,起到了類似L1的正則化作用,可以在一定程度上緩解過擬合。
? ? ? ?當(dāng)然,ReLU也是有缺點的,比如左邊全部關(guān)了很容易導(dǎo)致某些隱藏節(jié)點永無翻身之日,所以后來又出現(xiàn)pReLU、random ReLU等改進(jìn),而且ReLU會很容易改變數(shù)據(jù)的分布,因此ReLU后加Batch Normalization也是常用的改進(jìn)的方法。
(4) Local Response Normalization
? ? ? ?Local Response Normalization要硬翻譯的話是局部響應(yīng)歸一化,簡稱LRN,實際就是利用臨近的數(shù)據(jù)做歸一化。這個策略貢獻(xiàn)了1.2%的Top-5錯誤率。
(5) Overlapping Pooling
? ? ? ?Overlapping的意思是有重疊,即Pooling的步長比Pooling Kernel的對應(yīng)邊要小。這個策略貢獻(xiàn)了0.3%的Top-5錯誤率。
(6) 多GPU并行
? ? ? ?這個不多說,比一臂之力還大的洪荒之力。
VGG
? ? ? ?VGG結(jié)構(gòu)圖
圖6. VGG系列網(wǎng)絡(luò)結(jié)構(gòu)
? ? ? ?換個視角看看VGG-19:
圖7. VGG-19網(wǎng)絡(luò)結(jié)構(gòu)精簡版
? ? ? ?VGG很好地繼承了AlexNet的衣缽,一個字:深,兩個字:更深。
GoogLeNet
圖8. GoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)
? ? ? ?GoogLeNet依然是:沒有最深,只有更深。
? ? ? ?主要的創(chuàng)新在于他的Inception,這是一種網(wǎng)中網(wǎng)(Network In Network)的結(jié)構(gòu),即原來的結(jié)點也是一個網(wǎng)絡(luò)。Inception一直在不斷發(fā)展,目前已經(jīng)V2、V3、V4了,感興趣的同學(xué)可以查閱相關(guān)資料。Inception的結(jié)構(gòu)如圖9所示,其中1*1卷積主要用來降維,用了Inception之后整個網(wǎng)絡(luò)結(jié)構(gòu)的寬度和深度都可擴(kuò)大,能夠帶來2-3倍的性能提升。
圖9. Inception結(jié)構(gòu)
ResNet
網(wǎng)絡(luò)結(jié)構(gòu)如圖10所示。
圖10. ResNet網(wǎng)絡(luò)結(jié)構(gòu)
? ? ? ?ResNet依然是:沒有最深,只有更深(152層)。聽說目前層數(shù)已突破一千。
? ? ? ?主要的創(chuàng)新在殘差網(wǎng)絡(luò),如圖11所示,其實這個網(wǎng)絡(luò)的提出本質(zhì)上還是要解決層次比較深的時候無法訓(xùn)練的問題。這種借鑒了Highway Network思想的網(wǎng)絡(luò)相當(dāng)于旁邊專門開個通道使得輸入可以直達(dá)輸出,而優(yōu)化的目標(biāo)由原來的擬合輸出H(x)變成輸出和輸入的差H(x)-x,其中H(X)是某一層原始的的期望映射輸出,x是輸入。
圖11. ResNet網(wǎng)絡(luò)結(jié)構(gòu)
總結(jié)
Deep Learning一路走來,大家也慢慢意識到模型本身結(jié)構(gòu)是Deep Learning研究的重中之重,而本文回顧的LeNet、AlexNet、GoogLeNet、VGG、ResNet又是經(jīng)典中的經(jīng)典。
隨著2012年AlexNet的一舉成名,CNN成了計算機(jī)視覺應(yīng)用中的不二選擇。目前,CNN又有了很多其他花樣,比如R-CNN系列,詳情敬請期待我愛機(jī)器學(xué)習(xí)網(wǎng)站(52ml.net)的#Deep Learning回顧#下一期。
本文只是簡單回顧,疏漏之處敬請諒解,感興趣的可以加QQ群一起學(xué)習(xí):252085834
[參考文獻(xiàn)]
[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] 一些對應(yīng)的caffe實現(xiàn)或預(yù)訓(xùn)練好的模型: 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.
最古老的CNN模型
? ? ? ?1985年,Rumelhart和Hinton等人提出了后向傳播(Back Propagation,BP)算法[1](也有說1986年的,指的是他們另一篇paper:Learning representations by back-propagating errors),使得神經(jīng)網(wǎng)絡(luò)的訓(xùn)練變得簡單可行,這篇文章在Google Scholar上的引用次數(shù)達(dá)到了19000多次,目前還是比Cortes和Vapnic的Support-Vector Networks稍落后一點,不過以Deep Learning最近的發(fā)展勁頭來看,超越指日可待。
? ? ? ?幾年后,LeCun利用BP算法來訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)用于識別手寫郵政編碼[2],這個工作就是CNN的開山之作,如圖2所示,多處用到了5*5的卷積核,但在這篇文章中LeCun只是說把5*5的相鄰區(qū)域作為感受野,并未提及卷積或卷積神經(jīng)網(wǎng)絡(luò)。關(guān)于CNN最原始的雛形感興趣的讀者也可以關(guān)注一下文獻(xiàn)[10]。