卷積神經網路-3

阿蘇爾發表於2018-04-20

本文來自於網易雲課堂

為什麼要進行例項探究

上一講我們介紹了卷積神經網路的基本元件,事實上過去幾年,計算機視覺研究中的大量研究都集中在如何把這些基本構建組合起來形成有效的卷積神經網路。找感覺的最好方法之一就是去看一些案例,就像很多人通過看別人的程式碼來學習程式設計一樣,通過研究別人構建有效元件的案例是個不錯的辦法。實際上在視覺網路中表現良好的網路架構往往也適合於其他任務。也就是說,如果別人已經訓練或者計算出擅長識別貓,狗,人的神經網路架構,而你的任務與此相關,那你完全可以借鑑別人的架構。學完這幾節課你應該可以讀一些計算機視覺方面的論文了,而我希望這也是你學習本課程的收貨。—Andrew Ng
下面會介紹一些經典網路和殘差網路ResNet和Inception等,就算你不是研究計算機視覺方面的,但是相信你也會從ResNet和Inception網路這樣的例項中,找到一些不錯的想法,這裡面很多思路都是多學科融合的產物。總之,即便你不打算構建計算機視覺相關的應用程式,試著從中發現一些有趣的思路對你的工作也會有所幫助。

經典網路

LeNet-5

假設你有一張32*32*1的圖片,LeNet-5網路可以識別其中的手寫字型,然後過濾然後池化-在當時的年代人們更喜歡使用平均池化…。相比與現在的版本,這個神經網路相對較小一些,只有約6萬個引數,而現在我們經常看到含有1000萬或者1億個引數的神經網路。但是不管怎麼樣,隨著神經網路深度的增加,影像的寬度和高度都在減小而通道數在增加。
這裡寫圖片描述

AlexNet

這個論文名字叫《Image Net Classification with Deep Convolutional Neural Networks》
這個網路的名字是以論文的第一作者Alex Krithevsky來命名的。AlexNet首先用227*227*3的圖片作為輸入。實際上這種網路與LeNet-5有很多相似之處,不過AlexNet要大的多,它包含大約6000萬個引數。它可以採用相似的含有大量隱藏單元或資料的基本構造模組使得AlexNet表現出色。它比LeNet-5表現好的另一個原因是它採用了Relu啟用函式
這裡寫圖片描述

VGG-16

這是一種沒有那麼多引數,只需要專注於構建卷積層的簡單網路。不過這種網路非常深,引數大約有1.38億。但是其結構不復雜,這一點非常吸引人,而且非常規整。
這裡寫圖片描述
學完這些經典的網路之後,我們開始學習更先進的網路。

ResNet(殘差網路)

非常非常深的網路是很難訓練的,因為存在梯度消失和梯度爆炸問題,這節課我們學校跳遠連線(skip connection),它可從某一網路層獲取啟用,然後迅速反饋給另外一層,甚至是神經網路的最深層。我們可以利用skip connection來構建非常非常深的ResNet,最深可達到100層。
這裡寫圖片描述
ResNet是由殘差塊組成的,它通過跳遠改變了資訊的傳遞主路徑。ResNet的發明者是何凱明,張翔宇,任少卿以及孫劍。他們發現用殘差塊能訓練更深的網路。所以構建一個ResNet網路就是將很多這樣的殘差塊堆積在一起形成一個殘差網路。
這裡寫圖片描述
理論上,隨著神經網路深度的加深,誤差應該越來越小,但實際上普通的神經網路會出現先下降後上升的趨勢,而採用殘差神經網路則可以達到很深層。這種方式很好的解決了梯度消失和梯度爆炸的問題,又可以保持很好的效能。

殘差網路為什麼有效

我們給出一個例子可以解釋。上節課我們瞭解到神經網路越深,它在訓練集上訓練網路的效率會有所減弱,這也是有時候我們不願意加深網路的原因,但不完全是這樣,至少對於Resnet來說。
這裡寫圖片描述
對於上圖,如果使用L2正則化和權重衰減,它會壓縮W[l+2]

W^{[l+2]}
的值,如果對b這樣用,也會達到同樣的效果,實際上對b不怎麼用。所以這裡的W[l+2]
W^{[l+2]}
是關鍵項,如果W[l+2]
W^{[l+2]}
是0,為方便起見,假設b也是0,那麼最後g(a[l]
a^{[l]}
)=a[l]
a^{[l]}
,因為我們使用的Relu啟用函式。結果表明殘差塊學習這個恆等式函式殘差塊並不難,跳遠連線使得我們很容易得出a[l+2]
a^{[l+2]}
=a[l]
a^{[l]}
,這意味著即使神經網路增加了2層,它的效率也不遜色簡單的神經網路,儘管它多了2層也只是把a[l]
a^{[l]}
賦值給了a[l+2]
a^{[l+2]}
,所以加兩次網路並不會影響表現。當然,我們的目標不僅僅是保持它的效率還要增加它的效率。想象一下,如果這些隱層單元學到一些有用資訊,那麼它可能比學習恆等函式效果更好。而對於那些簡單網路,隨著深度的加深,就算是選擇學習恆等函式都很困難。Andrew Ng認為殘差網路表現好的原因是這些殘差塊學習恆等函式很容易,你能確定效率不受影響很多時候甚至會提高效率。關於殘差網路另一個值得探討的細節就是假設z[l+2]
z^{[l+2]}
a[l]
a^{[l]}
具有相同的維度,所以ResNet使用了很多”same”卷積,所以實現了跳遠連線。如果不同的話,需要增加一個引數自學習的Ws。
這裡寫圖片描述

網路中的網路以及1×1卷積

在架構內容設計方面,其中一個比較有幫助的想法是使用1×1卷積,那麼1×1卷積有什麼用呢?不就是乘以1個數嗎?這聽上去很好笑,但事實並不是如此。
這裡寫圖片描述

使用1×1卷積對於1個通道的輸入來說效果並不好,但是如果對於多通道來說效果就比較好了。具體來說,它實現的功能是遍歷這36個單元格,計算左圖中32個數字和過濾器中32個數字的元素智慧乘積,然後運用relu非線性函式。一般來說,如果過濾器不止一個,而是多個,就好像有多個輸入單元。這種方法稱為1×1卷積有時也被稱為網路中的網路。在林敏,陳強和楊學成的論文中有詳細描述,雖然論文中的詳細內容並沒有得到廣泛的應用,但是1×1這種理念卻很有影響力。注:還可以參考這篇文章
使用1×1卷積可以起到降維的作用。例如,假設有一個28*28*192的輸入,你可以使用池化層來壓縮它的高度和寬度,但如果通道數很大,該如何把它壓縮為28*28*32的層呢?你可以使用32個1*1*192的過濾器,所以這就是壓縮通道數的方法。
這裡寫圖片描述

相關文章