在個人我的博客 上一篇博文 中分析了卷積神經網絡的結構與相關算法,知道了這些基本原理以後。這篇博文主要介紹在卷積神經網絡的發展歷程中一些經典的網絡模型。html
LeNet5
LeCun等將BP算法應用到多層神經網絡中,提出LeNet-5模型[1](效果和paper見此處 ),並將其用於手寫數字識別,卷積神經網絡纔算正式提出。LeNet-5的網絡模型如圖1所示。網絡模型具體參數如圖2所示。git
圖1 LeNet-5網絡模型
表1 LeNet-5具體參數
輸入 :32*32的手寫字體圖片,這些手寫字體包含0~9數字,也就是至關於10個類別的圖片;
輸出 :分類結果,0~9之間。 從輸入輸出能夠知道,改網絡解決的是一個十分類的問題,分類器使用的Softamx迴歸。
C1 :卷積核參數如表所示。卷積的後的尺寸計算公式爲:
所以,通過C1卷積層後,每一個特徵圖大小爲32-5+1=28,這一層輸出的神經元個數爲2828 6=784。而這一層卷積操做的參數個數爲55 16+6=156,其中參數個數與神經元個數無關,只與卷積核大小(此處爲5 5),卷積核數量(此處爲6,上一層圖像默認深度爲1);github
S2 :輸入爲2828 6,該網絡使用最大池化進行下采樣,池化大小爲22,通過池化操做後輸出神經元個數爲14 14*6;
C3 :通過C3層後,輸出爲1010 16,參數個數爲55 6*16+16=2416個參數;
S4 :輸入爲1010 16,參數與S2層一致,池化後輸出神經元個數爲55 16;
C5 :通過C5層後,輸出爲11 120,參數個數爲55 16120+120=48120個參數。(這一層的卷積大小爲5 5,圖像的輸入大小也爲5*5,可等效爲全鏈接層);
F6 :輸出爲11 84,參數個數爲11 120*84+84=10164 參數總量:60856
從表1的具體參數能夠看出,LeNet的網絡結構十分簡單且單一,卷積層C一、C3和C5層除了輸出維數外採用的是相同的參數,池化層S2和S4採用的也是相同的參數算法
AlexNet
2012年Krizhevsky使用卷積神經網絡在ILSVRC 2012圖像分類大賽上奪冠,提出了AlexNet模型[2](論文地址 )。這篇文章憑藉着諸多創新的方法,促使了以後的神經網絡研究浪潮。AlexNet網絡的提出對於卷積神經網絡具備里程碑式的意義,相比較於LeNet5的改進有如下幾點網絡
數據加強
Dropout: Dropout方法和數據加強同樣,都是防止過擬合的。簡單的說,dropout能按照必定的機率將神經元從網絡中丟棄。一個很形象的解釋如圖2所示,左圖爲dropout前,右圖爲dropout後。dropout能在必定程度上防止網絡過擬合,而且能加快網絡的訓練速度。
圖2 Dropout示意圖
3. ReLU激活函數:ReLu具備一些優良特性,在爲網絡引入非線性的同時,也能引入稀疏性。稀疏性能夠選擇性激活和分佈式激活神經元,能學習到相對稀疏的特徵,起到自動化解離的效果。此外,ReLu的導數曲線在輸入大於0時,函數的導數爲1,這種特性能保證在輸入大於0時梯度不衰減,從而避免或抑制網絡訓練時的梯度消失現象,網絡模型的收斂速度會相對穩定[10]。 4. Local Response Normalization:Local Response Normalization要硬翻譯的話是局部響應歸一化,簡稱LRN,實際就是利用臨近的數據作歸一化。這個策略貢獻了1.2%的Top-5錯誤率。 5. Overlapping Pooling:Overlapping的意思是有重疊,即Pooling的步長比Pooling Kernel的對應邊要小。這個策略貢獻了0.3%的Top-5錯誤率。 6. 多GPU並行:這個過重要了,入坑了後發現深度學習真是「煉丹」的學科。得益於計算機硬件的發展,在我本身訓練時,Gpu大概能比Cpu快一個數量級以上。能極大的加快網絡訓練。 AlextNet的網絡結構如圖3所示,具體參數如表2所示。
圖3 AlexNet網絡模型
表2 AlexNet具體參數
輸入 :224
224 3(RGB圖像),圖像會通過預處理變爲227
227 3;
輸出 :使用的是ImageNet數據集,該數據集有1000個類,所以輸出的類別也是1000個。 從輸入輸出能夠知道,改網絡解決的是一個十分類的問題,分類器使用的Softamx迴歸。
conv1 :輸出爲5555 96,參數個數爲1111 3*96+96=34944
pool1 :輸出爲2727 96;
conv2 :輸出爲2727 256,參數個數爲55 96*256+256=614656
pool2 :輸出爲1313 256;
conv3 :輸出爲1313 384,參數個數爲33 256*384+384=885120
conv4 :輸出爲1313 384,參數個數爲33 384*384+384=1327488
conv5 :輸出爲1313 256,參數個數爲33 384*256+256=884992
pool3 :輸出爲66 256;
fc6 :輸出爲11 4096,參數個數爲11 256*4096+4096=1052672
fc7 :輸出爲11 4096,參數個數爲11 4096*4096+4096=16781312 參數總量:21581184
經過對比LeNet-5和AlexNet的網絡結構能夠看出,AlexNet具備更深的網絡結構,更多的參數。app
ZFNet
ZFNet[3](論文地址 )是由紐約大學的Matthew Zeiler和Rob Fergus所設計,該網絡在AlexNet上進行了微小的改進,但這篇文章主要貢獻在於在必定程度上解釋了卷積神經網絡爲何有效,以及如何提升網絡的性能。該網絡的貢獻在於:分佈式
使用了反捲積網絡,可視化了特徵圖。經過特徵圖證實了淺層網絡學習到了圖像的邊緣、顏色和紋理特徵,高層網絡學習到了圖像的抽象特徵;
根據特徵可視化,提出AlexNet第一個卷積層卷積核太大,致使提取到的特徵模糊;
經過幾組遮擋實驗,對比分析找出了圖像的關鍵部位;
論證了更深的網絡模型,具備更好的性能。
ZFNet的網絡模型如圖4所示,具體參數如表3所示。ide
圖4 ZFNet網絡模型
表3 ZFNet具體參數
ZFNet的網絡模型與AlexNet十分類似,這裏就不列舉每一層的輸入輸出了。
VGG16
VGGNet[4]是由牛津大學計算機視覺組和Google DeepMind項目的研究員共同研發的卷積神經網絡模型,包含VGG16和VGG19兩種模型,其網絡模型如圖5所示,也能夠點擊此處連接 查看網絡模型。函數
圖5 VGG16網絡模型
從網絡模型能夠看出,VGG16相比AlexNet類的模型具備較深的深度,經過反覆堆疊3
3的卷積層和2 2的池化層,VGG16構建了較深層次的網絡結構,整個網絡的卷積核使用了一致的3
3的尺寸,最大池化層尺寸也一致爲2 2。與AlexNet主要有如下不一樣:
Vgg16有16層網絡,AlexNet只有8層;
在訓練和測試時使用了多尺度作數據加強。
GoogLeNet
GoogLeNet[5](論文地址 )進一步增長了網絡模型的深度和寬度,可是單純的在VGG16的基礎上增長網絡的寬度深度會帶來如下缺陷:性能
過多的參數容易引發過擬合;
層數的加深,容易引發梯度消失現象。
GoogLeNet的提出受到論文Network in Network(NIN)的啓發,NIN有兩個貢獻:
提出多層感知卷積層:使用卷積層後加上多層感知機,加強網絡提取特徵的能力。普通的卷積層和多層感知卷積層的結構圖如圖6所示,Mlpconv至關於在通常的卷積層後加了一個1*1的卷積層;
圖6 普通卷積層和多層感知卷積層結構圖
* 提出了全局平均池化替代全鏈接層,從上文計算的LeNet5,AlexNet網絡各層的參數數量發現,全鏈接層具備大量的參數。使用全局平均池化替代全鏈接層,能很大程度減小參數空間,便於加深網絡,還能防止過擬合。
GoogLeNet根據Mlpconv的思想提出了Inception結構,該結構有兩個版本,圖7是Inception的naive版。該結構巧妙的將1一、3 3和5*5三種卷積核和最大池化層結合起來做爲一層結構。
圖7 Inception結構的naive版
然而Inception的naive版中5*5的卷積核會帶來很大的計算量,所以採用了與NIN相似的結構,在原始的卷積層以後加上了1*1卷積層,最終版本的Inception如圖8所示。
圖8 降維後的Inception模塊
GoogLeNet的模型結構如圖9所示,詳細參數如表4所示。
圖9 GoogLeNet模型結構
表4 GoogLeNet具體參數
ResNet
卷積神經網絡模型的發展歷程一次次證實加深網絡的深度和寬度能獲得更好的效果,可是後來的研究發現,網絡層次較深的網絡模型的效果反而會不如較淺層的網絡,稱爲「退化」現象,如圖10所示。
圖10 退化現象
退化現象產生的緣由在於當模型的結構變得複雜時,隨機梯度降低的優化變得更加困難,致使網絡模型的效果反而不如淺層網絡。針對這個問題,MSRA何凱明團隊提出了Residual Networks[6]([論文地址](https://arxiv.org/pdf/1512.03385.pdf))。該網絡具備Residual結構如圖11所示。
圖11 Residual 結構
ResNet的基本思想是引入了可以跳過一層或多層的「shortcut connection」,即增長一個identity mapping(恆等映射),將原始所須要學的函數H(x)轉換成F(x)+x,而做者認爲這兩種表達的效果相同,可是優化的難度卻並不相同,做者假設F(x)的優化 會比H(x)簡單的多。這一想法也是源於圖像處理中的殘差向量編碼,經過一個reformulation,將一個問題分解成多個尺度直接的殘差問題,可以很好的起到優化訓練的效果。 這個Residual block經過shortcut connection實現,經過shortcut將這個block的輸入和輸出進行一個element-wise的加疊,這個簡單的加法並不會給網絡增長額外的參數和計算量,同時卻能夠大大增長模型的訓練速度、提升訓練效果,而且當模型的層數加深時,這個簡單的結構可以很好的解決退化問題。 首先構建了一個18層和一個34層的plain網絡,即將全部層進行簡單的鋪疊,而後構建了一個18層和一個34層的residual網絡,僅僅是在plain上插入了shortcut,並且這兩個網絡的參數量、計算量相同,而且和以前有很好效果的VGG-19相比,計算量要小不少。(36億FLOPs VS 196億FLOPs,FLOPs即每秒浮點運算次數。)這也是做者反覆強調的地方,也是這個模型最大的優點所在。 模型構建好後進行實驗,在plain上觀測到明顯的退化現象,並且ResNet上不只沒有退化,34層網絡的效果反而比18層的更好,並且不只如此,ResNet的收斂速度比plain的要快得多。 對於shortcut的方式,做者提出了三個策略: * 使用恆等映射,若是residual block的輸入輸出維度不一致,對增長的維度用0來填充; * 在block輸入輸出維度一致時使用恆等映射,不一致時使用線性投影以保證維度一致; * 對於全部的block均使用線性投影。 ResNet論文的最後探討了阻礙網絡更深的瓶頸問題,如圖12所示,論文中用三個1x1,3x3,1x1的卷積層代替前面說的兩個3x3卷積層,第一個1x1用來下降維度,第三個1x1用來增長維度,這樣能夠保證中間的3x3卷積層擁有比較小的輸入輸出維度。
圖12 更深的residual block
參考文獻
[1] Lecun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.
[2] Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.
[3] Zeiler M D, Fergus R. Visualizing and Understanding Convolutional Networks[J]. 2013, 8689:818-833.
[4] Simonyan K, Zisserman A. Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.
[5] Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2015:1-9.
[6] He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[C]// Computer Vision and Pattern Recognition. IEEE, 2016:770-778.