吳恩達《深度學習工程師》Part4.Week2 深度卷積網絡:實例探究

2.1 爲什麼要進行實例探究
過去的卷積神經網絡研究很多都集中在如何設計不同的卷積層、池化層等部件來實現最佳效果。在構建自己的卷積神經網絡時,參考別人已經構建好的模型,是一個很好的方法,因爲很多模型在一個領域表現良好,也可以遷移到其他領域。

2.2 經典網絡
1. LeNet-5網絡

Lécun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.

這裏寫圖片描述

圖1 LeNet-5神經網絡模型

LeNet-5是LeCun建立的文本識別模型,在較早的模型中padding操作還沒有使用,這樣數據的尺寸越來越小。此外,以往的激活函數多是logistic或tanh函數,而不是Relu函數。LeNet-5模型參數大約有6萬個。
2. AlexNet

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.

這裏寫圖片描述

圖2 AlexNet神經網絡模型

AlexNet模型與LeNet-5模型類似,但是模型參數更多,大約有6000萬個。與LeNet-5模型相比,AlexNet這麼多的隱藏單元很善於處理具有類似特徵的模塊。此外,AlexNet採用Relu激活函數。

3.VGG-16

Simonyan K, Zisserman A. Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.

這裏寫圖片描述

圖3 VGG-16神經網絡模型

VGG是一種沒有很多超參數的模型,只要專注於構造卷積層就可以了,整體結構較爲簡單。VGG-16模型中的16代表的是16個卷積層和池化層。VGG-16模型共有1.38億個參數

2.3 殘差網絡
非常深的神經網絡是很難訓練的,因爲會出現梯度消失和梯度下降的問題。可以通過遠跳連接(Skip connection)將某一層的激活值餵給後面較深的層,從而構建出能夠訓練深層網絡的ResNets。

ResNets是由殘差塊(residual block)構成的,如圖4所示。

這裏寫圖片描述
圖4 殘差塊

正常的神經網絡由圖4中黑線所描述的流程進行,對l 層的激活值a[l] ,經過兩次線性計算(乘以權重,加上偏置)和非線性計算(激活函數),得到l+2 層的輸出a[l+2] 。即:
a[l+2]=g(z[l+2])

殘差塊則通過設置一條捷徑(short cut),如圖4中藍色線所示,來實現遠跳連接。這時候第l+2 層的輸入不僅僅是z[l+2] ,還有a[l]

a[l+2]=g(z[l+2]+a[l])

在標準神經網絡中構建多個殘差塊,就可以使其成爲殘差網絡,如圖5所示。

這裏寫圖片描述圖5 殘差網絡

對於標準神經網絡,理論上當層數越多時,訓練誤差會越來越低。但是實際上,訓練誤差會先下降後升高,因爲隨着層數增加,神經網絡會越來越難訓練,如圖6所示。但是殘差網絡卻能夠訓練很深層的模型,甚至可以達到1000層以上。

這裏寫圖片描述
圖6 標準神經網絡和殘差訓練誤差隨層數的變化規律

2.4 殘差網絡爲什麼有用?
標準神經網絡在層數越來越多時,訓練效率會越來越低。但是殘差網絡卻沒有這樣的問題,以圖7爲例進行說明。

這裏寫圖片描述
圖7 標準神經網絡和殘差神經網絡

圖7中第一個模型是一個很深的神經網絡,在l 層的激活值爲a[l] ,這時候模型已經很難訓練。
如果在這個模型後面加個殘差塊,則有:
a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l])

在經過訓練的模型中,正則化會使得權重W[l+2] 和偏置b[l+2] 壓縮爲近似爲零的值,因此,上式變爲:
a[l+2]=g(a[l])

殘差網絡訓練這個式子並不困難,這就意味着即使增加了兩層,訓練效率也沒有顯著下降。而新增加的兩層可以學習到新的特徵,進而提高模型精度。

2.5 網絡中的網絡及1×1卷積
1×1卷積作用於一個通道的數據時,似乎沒有明顯的特點,僅僅是把原數據按倍數放大而已。但是當輸入數據爲多通道時,這個1×1×32的作用類似於權重,乘上輸入數據中某個切片的32個數據,進行ReLU計算。

這裏寫圖片描述
圖8 1×1卷積

2.6 谷歌Inception網絡介紹
當你構建卷積層時,可能會糾結到底使用1×1,3×3還是5×5的卷積核,或者是否使用池化層等,Inception網絡能夠自動幫你決定。


這裏寫圖片描述
圖9 Inception網絡

如圖9所示,當你不確定用哪個合適時,可以用圖中所示的方式把它們堆疊起來,然後讓網絡自己確定用哪一個設置。

Inception網絡的一個重要問題是計算的成本。

這裏寫圖片描述
圖10 計算成本的問題

圖10所示的卷積層所需的計算次數爲120,000,000。
如果在其中加入1×1卷積層的話,計算次數能夠縮減爲12,400,000,減小近10倍。這個1×1卷積層又叫做 bottleneck 層
這裏寫圖片描述
圖11 Bottleneck layer

2.7 Inception網絡
以Google Inception網絡爲例,說明了Inception網絡構建的原理,詳細內容見論文。

Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[J]. 2014:1-9.

2.8 使用開源的實現方案
許多表現良好的神經網絡模型參數衆多,調參複雜,通過別人的開源實現方案來理解並構建自己的網絡模型,將會極大提高你的效率。

2.9 遷移學習
在進行計算機視覺領域的模型構建時,相比於你自己隨機初始化權重,你從網上下載別人訓練好的權重作爲初始化權重,再進行訓練,然後遷移到你所需要研究的領域,效率將會極大提高。

2.10 數據擴充
在構建計算機視覺領域的模型是,經常會遇到數據量不足的問題,這時候可以通過數據擴充來增加數據。主要方法有:鏡像,剪裁,扭曲,顏色變化等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章