神經(jīng)網(wǎng)絡架構(gòu)演進史: 全面回顧從LeNet5到ENet十余種架構(gòu)

(轉(zhuǎn)自機器之心,略有刪改)

  1. LeNet5

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

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

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

總體看來,這個網(wǎng)絡是最近大量神經(jīng)網(wǎng)絡架構(gòu)的起點,并且也給這個領域帶來了許多靈感。

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

3 Dan Ciresan Net
2010年的時候,Dan Claudiu Ciresan 和Jurgen Schmidhuber 發(fā)布了最早的GPU神經(jīng)網(wǎng)絡的一個實現(xiàn)。這個實現(xiàn)是在一塊NVIDIA GTX280圖形處理器上運行9層的神經(jīng)網(wǎng)絡,包括前向與反向傳播。

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

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

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

AlexNet的成功掀起了一場小革命。卷積神經(jīng)網(wǎng)絡現(xiàn)在是深度學習的骨干。它已經(jīng)變成了現(xiàn)在能夠解決有用任務的大型神經(jīng)網(wǎng)絡的代名詞。

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

6 VGG
來自牛津大學的VGG網(wǎng)絡(參見: Very Deep Convolutional Networks for Large-Scale Image Recognition)是第一個在各個卷積層使用更小的3*3過濾器(filter),并把他們組合成為一個卷積序列進行處理的網(wǎng)絡。

這看起來和LeNet的原理相反,即使用大的卷積來獲得一張圖像中相似的特征。和AlexNet的99或1111過濾器不同,VGG的過濾器很小,離LeNet竭力所要避免的臭名昭著的11的卷積異常接近--至少在該網(wǎng)絡的第一層是這樣。但是VGG巨大的進展是通過依次采用多個33的卷積,能夠模仿出更大的感受野(receptive field)的效果,例如55或77.這些思想也被用在了最近的更多的網(wǎng)絡架構(gòu)上。如Inception與ResNet。

VGG網(wǎng)絡使用多個33卷積層去表征復雜特征。如果VGG-E的第3,4,5塊(block):256256 和 512512個33過濾器被依次使用多次,以提取更多復雜特征以及這些特征的組合。其效果就等于一個帶有3個卷積層的大型的512*512分類器。這顯然意味著大量的參數(shù)和學習能力。但是這些網(wǎng)絡訓練困難,必須劃分到較小的網(wǎng)絡,并逐層累加。這是因為缺少強大的方式對模型進行正則化,這樣或多或少約束大量由于大量參數(shù)增長的搜索空間。

VGG在許多層中都使用大特征尺寸,因為推斷(inference)在運行時是相當耗費時間。正如Inception的瓶頸那樣,減少特征的數(shù)量將節(jié)省一些計算成本。

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

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

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

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

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

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

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

20160907100308_882.jpg

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

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

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

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

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

它之所以成功是因為輸入特征是相關聯(lián)的,因此可以通過將它們與1*1卷積結(jié)合來減少冗余。然后在小數(shù)量的特征進行卷積之后,他們能在下一層被再次擴展成有意義的結(jié)合。

10 Inception V3(V2)
Christian和他的團隊都是非常高產(chǎn)的研究人員。2015年2月,Batch-normalized Inception被引入作為InceptionV2(參見論文: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift).Batch-normalization 在一層的輸出上計算所有特征映射的均值和標準差,并且使用這些值規(guī)范化它們的響應。這相當于數(shù)據(jù)增白(whitening),因此使得所有的神經(jīng)圖(neural maps)在同樣的范圍內(nèi)有響應,而且是零均值。在下一層不需要從輸入數(shù)據(jù)中學習offset時,這有助于訓練,還能重點關注如何最好的結(jié)合這些特性。

2015年12月, 該團隊發(fā)布Inception模塊和類似架構(gòu)的一個新版本(參見論文:Rethinking the Inception Architechture for Computer Vision).該論文更好地解釋了原始的GoogLeNet架構(gòu),在設計選擇上給出了更過的細節(jié)。原始思路如下:
通過謹慎構(gòu)建網(wǎng)絡,平衡深度與寬度,從而最大化進入網(wǎng)絡的信息流。在每次池化之前,增加特征映射。每當深度增加時,網(wǎng)絡層的深度或者特征的數(shù)量也系統(tǒng)性的增加。使得每一層深度增加之前,先增加特征的結(jié)合。一般只使用33的卷積,可能情況下將55和77過濾器分成多個33。看下圖:

20160907100308_712.jpg

因此新的Inception成為了

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

20160907100308_291.jpg

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

20160907100309_759.jpg

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

11 ResNet
2015年12月又出現(xiàn)了新的變革,這和Inception V3出現(xiàn)的時間一樣。ResNet有著簡單的思路:供給兩個連續(xù)卷積層的輸出,并分流(bypassing)輸入進入下一層(參見論文: Deep Residual Learning for Image Recognition)。
這和之前的一些舊思路類似。DanReSNet中,他們分流兩個層并被應用于更大的規(guī)模。在兩層后分流是一個關鍵的直覺。因為分流一個層并未給出更多的改進。通過兩層可能認為是一個小型的分類器,或者一個Network-In-Network。
這是第一個超過100的網(wǎng)絡, 甚至還能訓練出1000層的網(wǎng)絡。

有大量網(wǎng)絡層的ResNet開始使用類似于Inception瓶頸層的網(wǎng)絡層,這種層通過首先由帶有更小輸出的11卷積較少特征的數(shù)量,然后使用一個33的層,再使用1*1層處理更大量的特征。類似于Inception模塊,這樣能夠保證計算量低,同事提供豐富的特征結(jié)合。

ResNet在輸入上使用相對簡單的初始化層: 一個帶有兩個池的7*7卷積層。可以把這個與更復雜、更少直覺性的InceptionV3 V4坐下對比。ResNet也是用一個池化層加上softmax作為最后的分類器。

關于ResNet的其他洞見每天都有發(fā)生:
ResNet可被認為既是平行模塊又是連續(xù)模塊,把輸入輸出視為在許多模塊中并行,同時每個模塊的輸出又是連續(xù)連接的。
ResNet也可被視為并行模塊或連續(xù)模塊的多種組合(參見論文: Residual Networks are Exponential Ensembles of Relatively Shallow Networks)。
已經(jīng)發(fā)現(xiàn)ResNet通常在20-30層的網(wǎng)絡塊上以并行的方式運行。而不是連續(xù)流過整個網(wǎng)絡長度。
當ResNet像RNN一樣把輸出反饋到輸入時,該網(wǎng)絡可被視為更好的生物上可信的皮質(zhì)模型(參見論文: Bridging the Gaps between Residual Learning, Recurrent Neural Networks and Visual Cortex)。

12 Inception V4
這是Christian與其團隊的另一個Inception版本,該模塊類似于Inception V3。 Inception v4也結(jié)合了Inception模塊和ResNet模塊的特性。我認為該架構(gòu)不太簡潔。但也充斥著較少透明度的啟發(fā)法。很難理解里面的選擇,對作者而言也難以解釋。
考慮到網(wǎng)絡的簡潔性,可被輕易理解并修正,那ResNet可能就更好了。

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

14 ENet
我們團隊計劃結(jié)合近期公開的架構(gòu)的所有特征,做出一個非常高效、低重的網(wǎng)絡,使用較少的參數(shù)和計算就能達到頂尖的結(jié)果。該網(wǎng)絡架構(gòu)被稱為ENet,由Adam Paszke設計。我們已經(jīng)使用它進行單像素標記和場景解析。

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

ENet被設計為在開始時盡可能使用最小數(shù)量的資源。正是因為它有著如此小的腳本,編碼器和解碼器網(wǎng)絡共占有0.7MB 16fp的精度。即使這么小的型號,ENet在分割準確度上也類似于或高于其他神經(jīng)網(wǎng)絡的解決方案。

15 模塊分析
對CNN模塊的分析,該論文(Systematic evaluation of CNN advances on the ImageNet)已經(jīng)做過了,里面的發(fā)現(xiàn)是非常有幫助的:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容