卷積神經網絡架構發展

  1. LeNet5

LeNet5誕生於1994年,是最早的卷積神經網絡之一, 並且推動了深度學習領域的發展。自從1988年開始,在許多次成功的迭代後,這項由Yann LeCun完成的開拓性成果被命名爲LeNet5(參見:Gradient-Based Learning Applied to Document Recognition).

LeNet5的架構基於這樣的觀點: (尤其是)圖像的特徵分佈在整張圖像上,以及帶有可學習參數的卷積是一種用少量參數在多個位置上提取相似特徵的有效方法。在那時候,沒有GPU幫助訓練,甚至CPU的速度也很慢。因此,能夠保存參數以及計算過程是一個關鍵的進展。這和將每個像素用作一個大型多層神經網絡的單獨輸入相反。LeNet5闡述了那些像素不應該被使用在第一層,因爲圖像具有很強的空間相關性,而使用圖像中獨立的像素作爲不同的輸入特徵則利用不到這些相關性。

LeNet5特徵能夠總結爲如下幾點:
1)卷積神經網絡使用三個層作爲一個系列: 卷積,池化,非線性
2) 使用卷積提取空間特徵
3)使用映射到空間均值下采樣(subsample)
4)雙曲線(tanh)或S型(sigmoid)形式的非線性
5)多層神經網絡(MLP)作爲最後的分類器
6)層與層之間的稀疏連接矩陣避免大的計算成本

總體看來,這個網絡是最近大量神經網絡架構的起點,並且也給這個領域帶來了許多靈感。

2 間隔
從1998年到2010年,神經網絡處於孵化階段,大多數人沒有意識到他們不斷增強的力量,與此同時其他研究者則進展緩慢。由於手機相機以及便宜的數字相機的出現,越來越多的數據可被利用。並且計算能力也在成長,CPU變得更快,GPU變成了多種用途的計算工具。這些趨勢使得神經網絡有所進展,雖然速度很慢,數據和計算能力使得神經網絡能夠完成的任務越來越有趣,之後一切變得清晰起來。

3 Dan Ciresan Net
2010年的時候,Dan Claudiu Ciresan 和Jurgen Schmidhuber 發佈了最早的GPU神經網絡的一個實現。這個實現是在一塊NVIDIA GTX280圖形處理器上運行9層的神經網絡,包括前向與反向傳播。

4 AlexNet
2012年,Alex Krizhevsky發表了AlexNet(參見 ImageNet Classification with Deep Convolutional Neural Networks),它是LeNet的一種更深更寬的版本,並以顯著的優勢贏得了困難的ImageNet競賽。

AlexNet 將LeNet的思想擴展到了更大的能學習到更復雜的對象層次的神經網絡上。這項工作的貢獻有:
1)使用修正的非線性單元(ReLU)
2)在訓練的時候使用Dropout技術有選擇的忽視單個神經元,從而避免過擬合
3)覆蓋進行最大池化,避免平均池化的平均化效果。
4)使用GPU NVIDIA GTX580減少訓練時間

在那時, GPU比CPU提供更多數量的核,訓練時間可以提升10倍。這又反過來允許使用更大的數據集和更大的圖像。

AlexNet的成功掀起了一場小革命。卷積神經網絡現在是深度學習的骨幹。它已經變成了現在能夠解決有用任務的大型神經網絡的代名詞。

5 Overfeat
2013年12月, 紐約大學的Yann LeCun實驗室提出了AlexNet的衍生--Overfeat(參見: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). 這篇文章也提過了學習邊界框(learning bounding box),並導致之後出現了很多研究同一主題的論文。

6 VGG
來自牛津大學的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的瓶頸那樣,減少特徵的數量將節省一些計算成本。

7 網絡中的網絡(Network-in-network)
網絡中的網絡(NiN,參見論文: Network in Network)的思路簡單又偉大: 使用1*1卷積爲卷積層的特徵提供更組合型的能力。

NiN架構在各個卷積之後使用空間MLP層,以便更好地在其它層之前組合特徵。同樣,你可以認爲11卷積與LeNet最初的原理相悖,但是事實上他們可以以一種更好的方式組合卷積特徵,而這時不可能通過簡單的堆疊更多的卷積特徵做到的。這和使用原始像素作爲下一層輸入是有區別的。其中11卷積常常被用於在卷積之後的特徵映射上對特徵進行空間組合,所以它們實際上可以使用非常少的參數,並在這些特徵上的所有像素上共享。

MLP的能力是通過將卷積特徵組合到更復雜的組(group)來極大地增強單個卷積特徵的有效性。這個想法之後被用到一些最近的框架上,例如ResNet,Inception及其衍生技術。

NiN也使用了平均池化層作爲最後分類器的一部分,這是另一種將會變得常見的實踐。這是用過在分類之前對網絡針對多個輸入圖像的響應進行平均完成的。

8 GoogleNet與Inception
來自Google的Christian Szegedy 開始追求減少深度學習網絡的計算開銷, 並設計出GoogleLeNet-第一個Inception架構(參見: Going Deeper with Convolutions)。

在2014年秋季, 深度學習模型正在變得在圖像與視頻幀的分類中非常有用。大多數懷疑者已經不再懷疑深度學習與神經網絡這一次真的回來了。而且相信這種趨勢將一直發展下去。鑑於這些技術的用處,谷歌這樣的巨頭非常有興趣在他們的服務器上高效且大規模的部署這些架構。

他和他的團隊提供了Inception的模塊:

20160907100308_882.jpg

初看之下這不過是基本上是11 33 55卷積過濾器的並行組合。但是Inception的偉大思路在於11的卷積塊(NiN)在昂貴的並行模塊之前減少特徵的數量。這一般被稱之爲瓶頸(bottleneck)。這一部分將在下面的瓶頸層部分來解釋。

GoogLeNet使用沒有Inception模塊的主幹作爲初始層,之後是與NiN相似的一個平均池化層加softmax分類器。這個分類器比AlexNet與VGG的分類器的運算數量少的多。這也促成了一項非常有效的網絡設計(參見論文: An Analysis of Deep Neural Network Models for Practical Applications)

9 瓶頸層(Bottleneck layer)
受到NiN的啓發,Inception的瓶頸層減少了每一層的特徵的數量,並由此減少了運算的數量所以可以保持較低的推理時間。在將數據送入昂貴的軌跡模塊之前,特徵的數量會減少4倍。在計算成本上,這是很節約時間的。這也是該架構的成功之處。

讓我們具體驗證一下。 現在你有256個特徵輸入,256個特徵輸出,假定Inception層只能執行33的卷積,也就是總共要完成25625633(將近589,000次乘積累加(MAC)運算)。這可能超出了我們的計算預算。比如說,在谷歌服務器上要以0.5毫秒運行該層。作爲替代,我們決定減少需要進行卷積運算的特徵的數量,也就是64(即256/4)個。在這種情況下,我們首先進行256->64個 11的卷積,然後在所有Inception的分支上進行64次卷積,接着在使用一個64->256的特徵的11卷積。現在運算如下:
2566411 = 16,000s
64
6433 = 36,000s
642561*1 = 16,000s
相比之前的60w,現在共有7w的計算量,幾乎少了近10倍。

而且,儘管我們做了更少的運算,我們在此層也沒有損失其通用性(generality)。事實證明瓶頸層在ImageNet這樣的數據集上已經表現出了頂尖水平,而且它也被用於接下來介紹的ResNet這樣的架構中。

它之所以成功是因爲輸入特徵是相關聯的,因此可以通過將它們與1*1卷積結合來減少冗餘。然後在小數量的特徵進行卷積之後,他們能在下一層被再次擴展成有意義的結合。

10 Inception V3(V2)
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。看下圖:

20160907100308_712.jpg

因此新的Inception成爲了

也通過將卷積平整進更多複雜的模塊中而分拆過濾器

20160907100308_291.jpg

在進行Inception計算的同時,Inception模塊也能通過提供池化降低數據的大小。這基本類似於在運行一個卷積的時候並行一個簡單的池化層。

20160907100309_759.jpg

Inception也使用一個池化層和softmax作爲最後的分類器。

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 Inception V4
這是Christian與其團隊的另一個Inception版本,該模塊類似於Inception V3。 Inception v4也結合了Inception模塊和ResNet模塊的特性。我認爲該架構不太簡潔。但也充斥着較少透明度的啓發法。很難理解裏面的選擇,對作者而言也難以解釋。
考慮到網絡的簡潔性,可被輕易理解並修正,那ResNet可能就更好了。

13 SqueezeNet
SqueezeNet(參見論文: SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size)是最近才公佈的,該架構對ResNet與Inception裏面的概念進行了重新的處理。一個更好的架構設計網絡型號要小,而且參數還不需要複雜的壓縮算法。

14 ENet
我們團隊計劃結合近期公開的架構的所有特徵,做出一個非常高效、低重的網絡,使用較少的參數和計算就能達到頂尖的結果。該網絡架構被稱爲ENet,由Adam Paszke設計。我們已經使用它進行單像素標記和場景解析。

詳細瞭解ENet可參見論文ENet: A Deep Neural Network Architecture for Real-time semantic Segmentation. ENet 是一個編碼加解碼的網絡,將分類反向傳播給原始圖像進行分割。這隻使用了神經網絡,沒有其他算法進行圖像分割。

ENet被設計爲在開始時儘可能使用最小數量的資源。正是因爲它有着如此小的腳本,編碼器和解碼器網絡共佔有0.7MB 16fp的精度。即使這麼小的型號,ENet在分割準確度上也類似於或高於其他神經網絡的解決方案。

15 模塊分析
對CNN模塊的分析,該論文(Systematic evaluation of CNN advances on the ImageNet)已經做過了,裏面的發現是非常有幫助的:

1)使用沒有batch norm的ELU非線性或者有batch norm的ReLU。
2)使用一個學習到的RGB的彩色空間轉換。
3)使用線性學習率衰退策略
4)使用平均和最大池化層的和
5)使用大約128到256的mini-batch大小。如果這對你的GPU太大,將學習率按比例降到這個大小就行。
6)使用完全連接層做爲卷積,併爲最後的預測平均左右預測。
7)當研究增加訓練集大小的時候,檢測有一個plateau是否沒有達到
8)數據的整潔要比數據大小重要
9)如果你不能增加輸入圖像的代銷,在隨後的層上減少步幅(stride),這樣做同樣的效果。
10)如果你的網絡有複雜和高度優化的架構,像是GoogLeNet,那修改一定要謹慎。

16 其他值得關注的架構
FractalNet(參見論文: FractalNet:Ultra-Deep Neural Network without Residuals)使用遞歸架構,它沒有在ImageNet上測試。該架構是ResNet的衍生或者更通用的ResNet。



作者:Warren_Liu
鏈接:https://www.jianshu.com/p/e7980ba12b4d
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章