最近再從事深度學習方面的工做,感受還有不少東西不是很瞭解,各類網絡模型的結構的由來還不是很清晰,在我看來全部的網絡都是一層層的卷積像搭積木同樣打起來的,因爲還沒實際跑因此還沒很深入感覺到幾種網絡類型的區別,在此我想梳理一下幾種常見的網絡結構,加深一下理解。html
本文轉自此文http://www.javashuo.com/article/p-popybjlr-ge.html,此文條理清晰,總結較爲到位。git
目前常見的網絡結構:AlexNet、ZF、GoogLeNet、VGG、ResNet等等均可謂曾一戰成名,它們都具備自身的特性,它們都提出了創新點。 github
是由Yann LeCun完成的具備開拓性的卷積神經網絡,是大量網絡結構的起點。網絡給出了卷積網絡的基本特性:網絡
1.局部感知。人對外界的認知是從局部到全局的,相鄰局部的像素聯繫較爲緊密。每一個神經元不必對全局圖像進行感知,只須要對局部進行感知,而後更高層將局部的信息綜合起來獲得全局的信息。架構
2.多層卷積。層數越高,學到的特徵越全局化。ide
3.參數共享。每一個卷積都是一種提取特徵的方式,大大下降了參數的數目。函數
4.多卷積核。提取多類特徵,更爲豐富。性能
5.池化。下降向量維度,並避免過擬合。學習
特性1天然引出了特性2,特性3天然引出了特性4。優化
網絡用於mnist手寫體識別任務,網絡結構用 http://ethereon.github.io/netscope/#editor 查看,常見網絡:http://ethereon.github.io/netscope/quickstart.html
2012年,深度學習崛起的元年,Alex Krizhevsky 發表了Alexet,它是比LeNet更深更寬的版本,並以顯著優點贏得了ImageNet競賽。貢獻有:
1.使用RELU做爲激活單元。
2.使用Dropout選擇性忽略單個神經元,避免過擬合。
3.選擇最大池化,避免平均池化的平均化效果。
AlexNet是目前應用極爲普遍的網絡,結構講解見:http://blog.csdn.net/sunbaigui/article/details/39938097。
網絡總體上給咱們帶來了三個結構模塊:
一、單層卷積的結構:conv-relu-LRN-pool。前面的卷積步長大,快速下降featureMap的大小(較少後面的計算量),後面深層卷積保持featureMap大小不變。LRN的功能放在今天來看是無關痛癢的,並非很強。
二、多層卷積的結構,網絡更深,特徵更抽象。
三、全鏈接的結構,drop避免過擬合。
由 Matthew D Zeiler和Rob Fergus於2013年在「Visualizing and Understanding Convolutional Networks」論文中提出,屬於AlexNet網絡的變體。論文具備重要意義,闡述了卷積網絡爲何有效,ZF網絡是他們順帶提出來的。ZF在faster rcnn等應用中作爲特徵提取模塊被普遍應用,通常來說比AlexNet略優。
主要的改動是:減小第一層卷積的size和stride(11->七、4->2),提取更多的底層特徵,增長第二層卷積的步長stride(1->2)。從而取獲得了和AlexNei基本相同的感知野,featureMap的大小相同,後面的卷積計算量也保持不變。
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。
Christian Szegedy開始追求減小深度神經網絡的計算開銷,並於2014年設計出 GoogLeNet——第一個 Inception 架構。
「Going Deeper with Convolutions」中google提出了Inception模塊:
受NIN的啓發,Inception的思路是減小每一層的特徵過濾器的數目,從而減小運算量。用 1*1的卷積塊在昂貴的並行模塊以前減小特徵的數量,比 AlexNet 與 VGG 的分類器的運算數量少得多。這種作法通常稱爲瓶頸層(Bottleneck)。
並且,儘管咱們作了更好的運算,咱們在此層也沒有損失其通用性(generality)。事實證實瓶頸層在 ImageNet 這樣的數據集上已經表現出了頂尖水平,並且它也被用於接下來介紹的 ResNet 這樣的架構中。
它之因此成功是由於輸入特徵是相關聯的,所以可經過將它們與 1×1 卷積適當結合來減小冗餘。而後,在小數量的特徵進行卷積以後,它們能在下一層被再次擴展成有意義的結合。
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 模塊,這樣作能保證計算量低,同時提供豐富的特徵結合。