1. 程式人生 > >常見的網絡結構

常見的網絡結構

google internal 變體 shift 網絡 例子 there 結果 構建


隨著深度學習的普及開來,設計一個網絡結構變得越來越“簡單”,如果一個新的網絡只是簡單的卷積、池化、全連接,改改其中的參數,那就大錯特錯了。所以網絡在應用中,往往要面臨的問題是:如何設計一個好的網絡結構。

目前常見的網絡結構: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就很不錯了。

常見的網絡結構