標籤:
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為何能耐如此之大?有三個很重要的原因:
- 大量資料,Deep Learning領域應該感謝李飛飛團隊搞出來如此大的標註資料集合ImageNet;
- GPU,這種高度並行的計算神器確實助了洪荒之力,沒有神器在手,Alex估計不敢搞太複雜的模型;
- 演算法的改進,包括網路變深、資料增強、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。好處有:
- ReLU本質上是分段線性模型,前向計算非常簡單,無需指數之類操作;
- ReLU的偏導也很簡單,反向傳播梯度,無需指數或者除法之類操作;
- ReLU不容易發生梯度發散問題,Tanh和Logistic啟用函數在兩端的時候導數容易趨近於零,多級連乘後梯度更加約等於0;
- 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.
#Deep Learning回顧#之LeNet、AlexNet、GoogLeNet、VGG、ResNet