常見的網絡結構
隨著深度學習的普及開來,設計一個網絡結構變得越來越“簡單”,如果一個新的網絡只是簡單的卷積、池化、全連接,改改其中的參數,那就大錯特錯了。所以網絡在應用中,往往要面臨的問題是:如何設計一個好的網絡結構。
目前常見的網絡結構:AlexNet、ZF、GoogLeNet、VGG、ResNet等等都可謂曾一戰成名,它們都具有自身的特性,它們都提出了創新點。設計一個優秀網絡的第一步是學習這些優秀的網絡。
LeNet
是由Yann LeCun完成的具有開拓性的卷積神經網絡,是大量網絡結構的起點。網絡給出了卷積網絡的基本特性:
1.局部感知。人對外界的認知是從局部到全局的,相鄰局部的像素聯系較為緊密。每個神經元沒必要對全局圖像進行感知,只需要對局部進行感知,然後更高層將局部的信息綜合起來得到全局的信息。
2.多層卷積。層數越高,學到的特征越全局化。
3.參數共享。每個卷積都是一種提取特征的方式,大大降低了參數的數目。
4.多卷積核。提取多類特征,更為豐富。
5.池化。降低向量維度,並避免過擬合。
特性1自然引出了特性2,特性3自然引出了特性4。
網絡用於mnist手寫體識別任務,網絡結構用 http://ethereon.github.io/netscope/#editor 查看,常見網絡:http://ethereon.github.io/netscope/quickstart.html 。down
AlexNet
2012年,深度學習崛起的元年,Alex Krizhevsky 發表了Alexet,它是比LeNet更深更寬的版本,並以顯著優勢贏得了ImageNet競賽。貢獻有:
1.使用RELU作為激活單元。
2.使用Dropout選擇性忽略單個神經元,避免過擬合。
3.選擇最大池化,避免平均池化的平均化效果。
AlexNet是目前應用極為廣泛的網絡,結構講解見:http://blog.csdn.net/sunbaigui/article/details/39938097。 down
網絡整體上給我們帶來了三個結構模塊:
1、單層卷積的結構:conv-relu-LRN-pool。前面的卷積步長大,快速降低featureMap的大小(較少後面的計算量),後面深層卷積保持featureMap大小不變。LRN的功能放在今天來看是無關痛癢的,並不是很強。
2、多層卷積的結構,網絡更深,特征更抽象。
3、全連接的結構,drop避免過擬合。
CaffeNet
AlexNet網絡的變體,網絡結構的變動主要是調整了pool和norm的位置。 down
ZFNet
由 Matthew D Zeiler和Rob Fergus於2013年在“Visualizing and Understanding Convolutional Networks”論文中提出,屬於AlexNet網絡的變體。論文具有重要意義,闡述了卷積網絡為什麽有效,ZF網絡是他們順帶提出來的。ZF在faster rcnn等應用中做為特征提取模塊被廣泛應用,一般來講比AlexNet略優。
主要的改動是:減少第一層卷積的size和stride(11->7、4->2),提取更多的底層特征,增加第二層卷積的步長stride(1->2)。從而取得到了和AlexNei基本相同的感知野,featureMap的大小相同,後面的卷積計算量也保持不變。
VGG
VGG-16又稱為OxfordNet,是由牛津視覺幾何組(Visual Geometry Group)開發的卷積神經網絡結構。該網絡贏得了ILSVR(ImageNet)2014的冠軍。時至今日,VGG仍然被認為是一個傑出的視覺模型——盡管它的性能實際上已經被後來的Inception和ResNet超過了。
網絡結構:http://ethereon.github.io/netscope/#/preset/vgg-16
我們就看D(VGG16)和E(VGG19)好了。因為前面的網絡效果沒有D和E的效果好,而且比起D和E來講不夠簡潔。
VGG是把網絡分為5組(模仿AlexNet的五層),然而它使用了3*3的過濾器,並把它們組合起來作為一個卷積序列進行處理。特征:
1.網絡更深DCNN,channel數目更大。
2.采用多個3*3的卷積,模仿出更大的感受野的效果。這些思想也被用在了後續的網絡架構中,如 Inception 與 ResNet。
NIN
NIN中的MLPconv是對conv+relu的改進,conv+relu構建的是一個廣義線性模型。舉例子解釋:假設現在有一個3x3的輸入,用一個9維的向量x代表,卷積核大小也是3x3,也9維的向量w代表。
1.對於常規卷積層,直接x和w求卷積,然後relu一下就好了。
2.maxout,有k個的3x3的w(這裏的k是自由設定的),分別卷積得到k個1x1的輸出,然後對這k個輸入求最大值
3.NIN,有k個3x3的w(這裏的k也是自由設定的),分別卷積得到k個1x1的輸出,然後對它們都進行relu,然後再次對它們進行卷積,結果再relu。(這個過程,等效於一個1*1的卷積網絡)
maxout想表明它能夠擬合任何凸函數,也就能夠擬合任何的激活函數;NIN想表明它不僅能夠擬合任何凸函數,而且能夠擬合任何函數。
使用多層感知機這種微網絡結構後,可以抽象出更好的局部特征,增加局部模型的表達能力。基於MLPconv,在最後類別輸出時可以不采用全連接操作,而是將特征圖和類別之間建立一致性,采用全局平均池化的方法,每個特征圖的平均值即為每個類別的置信度。
例如:一共有100類,那麽在最後一層的輸出feature map則為100,計算這100張feature map的平均值,作為這100類的置信度。
NIN的優點:
1.更好的局部抽象能力,這是MLPconv帶來的。
2.全局平均池化,不需要全連接的參數優化,避免過擬合。
3.參數更少,模型更小。
網絡結構見:http://ethereon.github.io/netscope/#/preset/nin
GoogLeNet
Christian Szegedy開始追求減少深度神經網絡的計算開銷,並於2014年設計出 GoogLeNet——第一個 Inception 架構。
“Going Deeper with Convolutions”中google提出了Inception模塊:
受NIN的啟發,Inception的思路是減少每一層的特征過濾器的數目,從而減少運算量。用 1*1的卷積塊在昂貴的並行模塊之前減少特征的數量,比 AlexNet 與 VGG 的分類器的運算數量少得多。這種做法一般稱為瓶頸層(Bottleneck)。
而且,盡管我們做了更好的運算,我們在此層也沒有損失其通用性(generality)。事實證明瓶頸層在 ImageNet 這樣的數據集上已經表現出了頂尖水平,而且它也被用於接下來介紹的 ResNet 這樣的架構中。
它之所以成功是因為輸入特征是相關聯的,因此可通過將它們與 1×1 卷積適當結合來減少冗余。然後,在小數量的特征進行卷積之後,它們能在下一層被再次擴展成有意義的結合。down
Inception
Christian 和他的團隊都是非常高產的研究人員。2015 年 2 月,Batch-normalized Inception 被引入作為 Inception V2(論文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift)。Batch-normalization 在一層的輸出上計算所有特征映射的均值和標準差,並且使用這些值規範化它們的響應。因此使得所有神經圖(neural maps)在同樣範圍有響應,而且是零均值,這有助於訓練,還能重點關註如何最好的結合這些特征。
2015 年 12 月,該團隊發布 Inception 模塊和類似架構的一個新版本V3(論文:Rethinking the Inception Architecture for Computer Vision)。該論文更好地解釋了原始的 GoogLeNet 架構,在設計選擇上給出了更多的細節。
1.通過謹慎建築網絡,平衡深度與寬度,從而最大化進入網絡的信息流。
2.當深度增加時,網絡層的深度或者特征的數量也系統性的增加。使用每一層深度增加在下一層之前增加特征的結合。
3.只使用 3×3 的卷積,可能的情況下給定的 5×5 和 7×7 過濾器能分成多個 3×3。新的Inception結構為:
也可以通過將卷積平整進更多復雜的模塊中而分拆過濾器:將3*3拆分為3*1和1*3的兩個過濾器。在進行 inception 計算的同時,Inception 模塊也能通過提供池化降低數據的大小。
ResNet
2015 年 12 月又出現了新的變革,這和 Inception V3 出現的時間一樣。ResNet 有著簡單的思路:供給兩個連續卷積層的輸出,並分流(bypassing)輸入進入下一層(論文:Deep Residual Learning for Image Recognition),在imagenet2015奪得冠軍。
計算機視覺領域,特征隨著網絡加深而愈加抽象,而且深層網絡也會帶來梯度彌散/爆炸等問題。而且在實踐中,深層網絡(很深)的性能會劣於淺層網絡,這反映了一個事實:非線性網絡無法逼近恒等映射網絡(y=x)。所以我們轉而去學習恒等映射的擾動。
ResNet要學習的便是殘差函數:,殘差塊的結構是:
這是第一次網絡層數超過一百,甚至還能訓練出 1000 層的網絡。實際中,考慮計算的成本,對殘差塊做了計算優化,即將兩個3x3的卷積層替換為1x1 + 3x3 + 1x1。
通過首先是由帶有更小輸出(通常是輸入的 1/4)的 1×1 卷積較少特征的數量,然後使用一個 3×3 的層,再使用 1×1 的層處理更大量的特征。類似於 Inception 模塊,這樣做能保證計算量低,同時提供豐富的特征結合。
Inception V4
Inception V4 也結合了 Inception 模塊和 ResNet 模塊:
滿滿的啟發式應用,很難給出良好的解釋,考慮到網絡的間接性,ResNet就很不錯了。
常見的網絡結構