筆者主要從事圖像的識别與分類研究,在這裡筆者值探讨卷積神經的發展史。
1.BP
1985年,Rumelhart和Hinton等人提出了後向傳播(Back Propagation,BP)算法(也有說1986年的,指的是他們另一篇paper:Learning representations by back-propagating errors),使得神經網絡的訓練變得簡單可行,這篇文章在Google Scholar上的引用次數達到了19000多次,目前還是比Cortes和Vapnic的Support-Vector Networks稍落後一點,不過以Deep Learning最近的發展勁頭來看,超越指日可待。
【注】BP雖然不算卷積神經網絡,但它是神經網絡的老前輩,學習神經網絡不得不知道的一個網絡啊。
Hinton首頁
2.LeNet5
1988年,LeCun在BP網絡的基礎上發表了“A theoretical framework for Back-Propagation”幾年後,LeCun利用BP算法來訓練多層神經網絡用于識别手寫郵政編碼,(論文:Handwritten Digit Recognition: Applications of Neural Net Chips and Automatic Learning)這個工作也可以說是就是CNN的開山之作,多處用到了55的卷積核,但在這篇文章中LeCun隻是說把55的相鄰區域作為感受野,并未提及卷積或卷積神經網絡。在随後很多年,LeCun不斷優化,發表了很多關于手寫識别的文章。
1994年,word-level training of a handwritten word recognizer based on convolutional neural networks發表,這可以說是最早的卷積神經網絡之一, 并且推動了深度學習領域的發展。自從1988年開始,在許多次成功的疊代後,這項由Yann LeCun完成的開拓性成果被命名為LeNet5(參見:Gradient-Based Learning Applied to Document Recognition).
1998年的LeNet5标注着CNN的真正面世,但是這個模型在後來的一段時間并未能火起來,主要原因是要求機器性能較好,而且其他的算法像SVM也能達到類似的效果甚至超過。
LeNet5的架構基于這樣的觀點:(尤其是)圖像的特征分布在整張圖像上,以及帶有可學習參數的卷積是一種用少量參數在多個位置上提取相似特征的有效方法。在那時候,沒有GPU幫助訓練,甚至CPU的速度也很慢。是以,能夠儲存參數以及計算過程是一個關鍵的進展。這和将每個像素用作一個大型多層神經網絡的單獨輸入相反。LeNet5闡述了那些像素不應該被使用在第一層,因為圖像具有很強的空間相關性,而使用圖像中獨立的像素作為不同的輸入特征則利用不到這些相關性。
LeNet5特征能夠總結為如下幾點:
1)卷積神經網絡使用三個層作為一個系列: 卷積,池化,非線性;
2)使用卷積提取空間特征;
3)使用映射到空間均值下采樣(subsample);
4)雙曲線(tanh)或S型(sigmoid)形式的非線性;
5)多層神經網絡(MLP)作為最後的分類器;
6)層與層之間的稀疏連接配接矩陣避免大的計算成本。
總體看來,這個網絡是最近大量神經網絡架構的起點,并且也給這個領域帶來了許多靈感。
【注】以上提及的文章均可在LeCun的首頁中找到。
LeCun首頁
LeCun論文下載下傳位址
從1998年到2010年,神經網絡處于孵化階段,大多數人沒有意識到他們不斷增強的力量,與此同時其他研究者則進展緩慢。由于手機相機以及便宜的數字相機的出現,越來越多的資料可被利用。并且計算能力也在成長,CPU變得更快,GPU變成了多種用途的計算工具。這些趨勢使得神經網絡有所進展,雖然速度很慢,資料和計算能力使得神經網絡能夠完成的任務越來越有趣,之後一切變得清晰起來。
3.Dan Ciresan Net
2010 年的時候,**Dan Claudiu Ciresan 和 Jurgen Schmidhuber **釋出了最早的 GPU 神經網絡的一個實作。這個實作是在一塊 NVIDIA GTX 280 圖形處理器上運作 9 層的神經網絡,包含前向與反向傳播。
2010年Dan Claudiu Ciresan和Jurgen Schmidhuber發表了一個GPU神經網絡(Deep Big Simple Neural Nets Excel on Handwritten Digit Recognition)。論文裡面證明了使用 NVIDIA GTX 280 GPU之後能夠處理高達9層的神經網絡。
從此之後,Nvidia公司的股價開始不斷攀升,深度學習也越來越為人們所熟知。
論文位址
Dan Claudiu Ciresan 位址
4. AlexNet
2012年,Alex Krizhevsky發表了AlexNet(參見 ImageNet Classification with Deep Convolutional Neural Networks),它是LeNet的一種更深更寬的版本,并以顯著的優勢赢得了困難的ImageNet競賽。
AlexNet是在2012年被發表的一個經典之作,并在當年取得了ImageNet最好的成績,也是在那年之後,更多的更深的神經網絡被提出,其官方提供的資料模型。
AlexNet 将LeNet的思想擴充到了更大的能學習到更複雜的對象層次的神經網絡上。這項工作的貢獻有:
1)使用修正的非線性單元(ReLU)
2)在訓練的時候使用Dropout技術有選擇的忽視單個神經元,進而避免過拟合
3)覆寫進行最大池化,避免平均池化的平均化效果。
4)使用GPU NVIDIA GTX580減少訓練時間
在那時, GPU比CPU提供更多數量的核,訓練時間可以提升10倍。這又反過來允許使用更大的資料集和更大的圖像。
AlexNet的成功掀起了一場小革命。卷積神經網絡現在是深度學習的骨幹。它已經變成了現在能夠解決有用任務的大型神經網絡的代名詞。
Alex Krizhevsky首頁及論文下載下傳位址1
Alex Krizhevsky首頁及論文下載下傳位址2
5.ZF Net
2013 ILSVRC比賽冠軍,結構相對于AlexNet無太大的變化,隻是進行了參數的優化。使用Relu激活函數,交叉熵代價函數。
Matthew D. Zeiler論文下載下傳
Rob Fergus首頁
6.Overfeat
2013年12月, 紐約大學的Yann LeCun實驗室提出了AlexNet的衍生–Overfeat(參見: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). 這篇文章也提過了學習邊界框(learning bounding box),并導緻之後出現了很多研究同一主題的論文。
論文位址
7.VGG-Net
2014年,來自牛津大學的VGG網絡(參見: Very Deep Convolutional Networks for Large-Scale Image Recognition)是第一個在各個卷積層使用更小的3*3過濾器(filter),并把他們組合成為一個卷積序列進行處理的網絡。
這看起來和LeNet的原理相反,即使用大的卷積來獲得一張圖像中相似的特征。和AlexNet的99或1111過濾器不同,VGG的過濾器很小,離LeNet竭力所要避免的臭名昭著的11的卷積異常接近–至少在該網絡的第一層是這樣。但是VGG巨大的進展是通過依次采用多個33的卷積,能夠模仿出更大的感受野(receptive field)的效果,例如55或77.這些思想也被用在了最近的更多的網絡架構上。如Inception與ResNet。
VGG網絡使用多個33卷積層去表征複雜特征。如果VGG-E的第3,4,5塊(block):256256 和 512512個33過濾器被依次使用多次,以提取更多複雜特征以及這些特征的組合。其效果就等于一個帶有3個卷積層的大型的512*512分類器。這顯然意味着大量的參數和學習能力。但是這些網絡訓練困難,必須劃分到較小的網絡,并逐層累加。這是因為缺少強大的方式對模型進行正則化,這樣或多或少限制大量由于大量參數增長的搜尋空間。
VGG在許多層中都使用大特征尺寸,因為推斷(inference)在運作時是相當耗費時間。正如Inception的瓶頸那樣,減少特征的數量将節省一些計算成本。
VGG-Net 在ILSVRC localization and classification 兩個問題上分别取得了第一名和第二名,VGG-Net不同于AlexNet的地方是:VGG-Net使用更多的層,通常有16-19層,而AlexNet隻有8層。另外一個不同的地方是:VGG-Net的所有 convolutional layer 使用同樣大小的 convolutional filter,大小為 3 x 3。
目前VGG有6個版本。
Andrew Zisserman首頁
Karen Simonyan首頁
論文位址1
論文位址2
8.NIN
網絡中的網絡(NiN,參見論文: Network in Network)的思路簡單又偉大: 使用1*1卷積為卷積層的特征提供更組合型的能力。
NiN架構在各個卷積之後使用空間MLP層,以便更好地在其它層之前組合特征。同樣,你可以認為11卷積與LeNet最初的原理相悖,但是事實上他們可以以一種更好的方式組合卷積特征,而這時不可能通過簡單的堆疊更多的卷積特征做到的。這和使用原始像素作為下一層輸入是有差別的。其中11卷積常常被用于在卷積之後的特征映射上對特征進行空間組合,是以它們實際上可以使用非常少的參數,并在這些特征上的所有像素上共享。
MLP的能力是通過将卷積特征組合到更複雜的組(group)來極大地增強單個卷積特征的有效性。這個想法之後被用到一些最近的架構上,例如ResNet,Inception及其衍生技術。
NiN也使用了平均池化層作為最後分類器的一部分,這是另一種将會變得常見的實踐。這是用過在分類之前對網絡針對多個輸入圖像的響應進行平均完成的。
NIN目前有3個版本。
論文位址
9. R-CNN、Fast R-CNN、Faster R-CNN
RCNN(Regions with CNN features)是将CNN方法應用到目标檢測問題上的一個裡程碑,由年輕有為的RBG大神提出,借助CNN良好的特征提取和分類性能,通過RegionProposal方法實作目标檢測問題的轉化。
各個論文均可在Ross Girshick首頁找到。
Ross Girshick (rbg)位址
論文筆記
源碼:
R-CNN:
https://github.com/rbgirshick/rcnn
Fast R-CNN:
https://github.com/rbgirshick/fast-rcnn
https://github.com/rbgirshick/caffe-fast-rcnn
Faster R-CNN:
https://github.com/chenyuntc/simple-faster-rcnn-pytorch
https://github.com/YoungGer/Faster-RCNN-Pytorch
https://github.com/rbgirshick/py-faster-rcnn
10.GoogLeNet
來自Google的Christian Szegedy 開始追求減少深度學習網絡的計算開銷, 并設計出GoogleLeNet-第一個Inception架構。
在2014年秋季,深度學習模型正在變得在圖像與視訊幀的分類中非常有用。大多數懷疑者已經不再懷疑深度學習與神經網絡這一次真的回來了。而且相信這種趨勢将一直發展下去。鑒于這些技術的用處,谷歌這樣的巨頭非常有興趣在他們的伺服器上高效且大規模的部署這些架構。
在2014年ILSVRC挑戰賽獲得冠軍,将Top5 的錯誤率降低到6.67%. 一個22層的深度網絡,論文題目為:Going deeper with convolutions。GoogLeNet這個名字也是挺有意思的,為了像開山鼻祖的LeNet網絡緻敬,他們選擇了這樣的名字。
GoogLeNet使用沒有Inception子產品的主幹作為初始層,之後是與NiN相似的一個平均池化層加softmax分類器。這個分類器比AlexNet與VGG的分類器的運算數量少的多。這也促成了一項非常有效的網絡設計(參見論文: An Analysis of Deep Neural Network Models for Practical Applications)Christian和他的團隊都是非常高産的研究人員。2015年2月,Batch-normalized Inception被引入作為InceptionV2(參見論文: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift).Batch-normalization 在一層的輸出上計算所有特征映射的均值和标準差,并且使用這些值規範化它們的響應。這相當于資料增白(whitening),是以使得所有的神經圖(neural maps)在同樣的範圍内有響應,而且是零均值。在下一層不需要從輸入資料中學習offset時,這有助于訓練,還能重點關注如何最好的結合這些特性。
2015年12月, 該團隊釋出Inception子產品和類似架構的一個新版本(參見論文:Rethinking the Inception Architechture for Computer Vision).該論文更好地解釋了原始的GoogLeNet架構,在設計選擇上給出了更過的細節。原始思路如下:
通過謹慎建構網絡,平衡深度與寬度,進而最大化進入網絡的資訊流。在每次池化之前,增加特征映射。每當深度增加時,網絡層的深度或者特征的數量也系統性的增加。使得每一層深度增加之前,先增加特征的結合。一般隻使用33的卷積,可能情況下将55和77過濾器分成多個33。
Inception v4也結合了Inception子產品和ResNet子產品的特性。我認為該架構不太簡潔。但也充斥着較少透明度的啟發法。很難了解裡面的選擇,對作者而言也難以解釋。考慮到網絡的簡潔性,可被輕易了解并修正,那ResNet可能就更好了。
目前GoogLeNet有4個版本。
論文位址:
[v1] Going Deeper with Convolutions, 6.67% test error
http://arxiv.org/abs/1409.4842
[v2] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 4.8% test error
http://arxiv.org/abs/1502.03167
[v3] Rethinking the Inception Architecture for Computer Vision, 3.5% test error
http://arxiv.org/abs/1512.00567
[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error
http://arxiv.org/abs/1602.07261
11.ResNet
2015年12月又出現了新的變革,這和Inception V3出現的時間一樣。ResNet有着簡單的思路:供給兩個連續卷積層的輸出,并分流(bypassing)輸入進入下一層(參見論文: Deep Residual Learning for Image Recognition)。
這和之前的一些舊思路類似。DanReSNet中,他們分流兩個層并被應用于更大的規模。在兩層後分流是一個關鍵的直覺。因為分流一個層并未給出更多的改進。通過兩層可能認為是一個小型的分類器,或者一個Network-In-Network。
這是第一個超過100的網絡, 甚至還能訓練出1000層的網絡。
有大量網絡層的ResNet開始使用類似于Inception瓶頸層的網絡層,這種層通過首先由帶有更小輸出的11卷積較少特征的數量,然後使用一個33的層,再使用1*1層處理更大量的特征。類似于Inception子產品,這樣能夠保證計算量低,同僚提供豐富的特征結合。
ResNet在輸入上使用相對簡單的初始化層: 一個帶有兩個池的7*7卷積層。可以把這個與更複雜、更少直覺性的InceptionV3 V4坐下對比。ResNet也是用一個池化層加上softmax作為最後的分類器。
關于ResNet的其他洞見每天都有發生:
ResNet可被認為既是平行子產品又是連續子產品,把輸入輸出視為在許多子產品中并行,同時每個子產品的輸出又是連續連接配接的。
ResNet也可被視為并行子產品或連續子產品的多種組合(參見論文: Residual Networks are Exponential Ensembles of Relatively Shallow Networks)。
已經發現ResNet通常在20-30層的網絡塊上以并行的方式運作。而不是連續流過整個網絡長度。
當ResNet像RNN一樣把輸出回報到輸入時,該網絡可被視為更好的生物上可信的皮質模型(參見論文: Bridging the Gaps between Residual Learning, Recurrent Neural Networks and Visual Cortex)。
論文位址
12.SqueezeNet
2016年,SqueezeNet(參見論文: SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size)是最近才公布的,該架構對ResNet與Inception裡面的概念進行了重新的處理。一個更好的架構設計網絡型号要小,而且參數還不需要複雜的壓縮算法。
目前有4個版本。
論文位址
源碼
13.ENet
詳細了解ENet可參見論文:ENet: A Deep Neural Network Architecture for Real-time semantic Segmentation. ENet 是一個編碼加解碼的網絡,将分類反向傳播給原始圖像進行分割。這隻使用了神經網絡,沒有其他算法進行圖像分割。
ENet被設計為在開始時盡可能使用最小數量的資源。正是因為它有着如此小的腳本,編碼器和解碼器網絡共占有0.7MB 16fp的精度。即使這麼小的型号,ENet在分割準确度上也類似于或高于其他神經網絡的解決方案。
論文位址
14. FractalNet
(參見論文: FractalNet:Ultra-Deep Neural Network without Residuals)使用遞歸架構,它沒有在ImageNet上測試。該架構是ResNet的衍生或者更通用的ResNet。
目前有4個版本。
論文位址
15.Xception
Xception是google繼Inception後提出的對Inception v3的另一種改進,主要是采用depthwise separable convolution來替換原來Inception v3中的卷積操作。
目前有3個版本。
論文位址
caffe實作的Xception: