1. 程式人生 > >DeepLearning.ai學習筆記(四)卷積神經網絡 -- week2深度卷積神經網絡 實例探究

DeepLearning.ai學習筆記(四)卷積神經網絡 -- week2深度卷積神經網絡 實例探究

過濾 common 經典 上一個 問題 inline 最壞情況 ali method

一、為什麽要進行實例探究?

通過他人的實例可以更好的理解如何構建卷積神經網絡,本周課程主要會介紹如下網絡

  • LeNet-5
  • AlexNet
  • VGG
  • ResNet (有152層)
  • Inception

二、經典網絡

1.LeNet-5

該網絡主要針對灰度圖像訓練的,用於識別手寫數字。

技術分享圖片

該網絡是在1980s提出的,當時很少用到Padding,所以可以看到隨著網絡層次增加,圖像的高度和寬度都是逐漸減小的,深度則不斷增加。

另外當時人們會更傾向於使用Average Pooling,但是現在則更推薦使用Max Pooling。

還有就是最後的預測沒有使用softmax,而是使用了一般的方法

2. AlexNet

技術分享圖片

AlexNet其實和LetNet-5有很多相似的地方,如大致的網絡結構。不同的地方主要有如下:

  • 激活函數使用的是Relu,最後一層使用的是Softmax
  • 參數更多,有6000萬個參數,而LeNet-5只有6萬個左右
  • 使用Max Pooling

3.VGG-16

技術分享圖片
這個網絡有點牛逼了,因為它有將近1.38億個參數,即使放到現在也是一個很大的網絡,但是這個網絡的結構並不復雜。下面主要介紹一下上圖網絡。

首先該網絡使用的是Same卷積,即保證高度和寬度不變,另外因為總共有16層卷積操作,所以就不把每一層都用圖像的方式表現出來了,例如[CONV 64 X2]表示的是用64個過濾器進行Same卷積操作2次,即右上角所畫的示意圖,(224,224,3) -> (224,224,64) -> (224,224,64)

上面三個是比較經典的網絡,如果想深入的理解,可以閱讀其論文,不過吳大大建議的閱讀順序是AlexNet->VGG->LeNet。

三、殘差網絡(Residual Network)

視頻開始,吳大大表示“非常深的網絡是很難訓練的,因為存在梯度消失和梯度爆炸的問題”,為了解決這個問題,引入了(跳遠鏈接)Skip Connection(跳遠鏈接),殘差網絡正是使用了這個方法。

  • 殘差塊(Residual Block)

首先介紹組成殘差網絡的單元:殘差塊(Residual Block),如下圖示:

技術分享圖片

殘差塊是由兩層網絡節點組成的,\(a^{[l]}\)經過線性變化,再通過Relu激活函數後得到\(a^{[l+1]}\)

,\(a^{[l+2]}\)也同理,具體過程如下圖示:

技術分享圖片

特別註意上圖中的紫色線連接,\(a^{[l]}\)通過這條線直接將數據傳遞給\(a^{[l+2]}\),所以\(a^{[l+2]}=g(z^{[l+1]}+a^{[l]})\),這條紫色線也叫作short cut(或skip connection)

  • 殘差網絡

技術分享圖片
如圖示,殘差網絡每兩層網絡節點組成一個殘差塊,這也就是其與普通網絡(Plain Network)的差別。

結合之前的課程我們知道如果使用普通網絡訓練模型,訓練誤差會隨著網絡層次加深先減小,而後會開始增加,而殘差網絡則不會有這種情況,反而它會隨著層次增加,誤差也會越來越小,這與理論相符。

四、殘差網絡為什麽有用?

為了直觀解釋殘差網絡為什麽有用,假設我們已經通過一個很大的神經網絡得到了\(a^{[l]}\)。而現在我們又需要添加兩層網絡進去,我們看看如果添加的是殘差塊會有什麽效果。如下圖示:

技術分享圖片

由殘差塊的特點我們知道\(a^{[l+2]}=g(z^{[l+1]}+a^{[l]})=g(W^{[l+1]}a^{[l]}+b^{[l+1]}+a^{[l]})\)

我們先考慮一個極端情況,即\(W^{[l+1]}=0,b^{[l+1]}=0\),那麽\(a^{[l+2]}=g(a^{[l]})=a^{[l]}\) (因為激活函數是Relu),所以在添加了額外的兩層網絡後,即使最壞情況也是保持和之前結果一樣。而如果只是加上普通的兩層網絡,可能結果會更好,但是也很有可能結果會越來越糟糕,這也就是為什麽殘差網絡能夠保證深度網絡依舊有用的原因了。

另外有個問題需要註意的是各層網絡的維度,因為\(a^{[l+2]}=g(z^{[l+1]}+a^{[l]})\),那麽就要求\(z^{[l+1]}\)要和\(a^{[l]}\)保持相同的維度所以殘差網絡使用的是Same卷積
但是如果唯獨不一樣也沒關系,可以給\(a^{[l]}\)乘上一個\(W_s\)來保持相同維度。\(W_s\)的值可以通過學習獲得

五、網絡中的網絡以及1*1卷積

1*1卷積乍看起來好像很沒用,如下圖?

技術分享圖片

?但是如果這個1*1的卷積有深度呢??

技術分享圖片

?說個更加直觀的理解就是使用1*1卷積可以很方便的減少深度,而不改變高度和寬度,如下圖所示:

技術分享圖片

只需要用32個(1*1*192)的過濾器即可,如果不用1*1卷積,例如采用2*2卷積,要想實現只改變深度,那麽還需要使用padding,相比起來更加麻煩了。

六、Inception網絡簡介

  • 簡介
    技術分享圖片

如上圖示,我們使用了各種過濾器,也是用了Max Pooling。但是這些並不需要人工的選擇其個數,這些都可以通過學習來確定下來。所以這種方法很好的幫助我們選擇何種過濾器的問題,這也就是Inception網絡

  • 計算成本

但是需要註意的一點則是隨之而來的計算成本,尤其是5*5的過濾器,下面以這個過濾器舉例進行說明:

技術分享圖片
如上圖示,使用32個5*5*192的過濾器,對(28,28,192)進行Same卷積運算得到(28,28,32)的輸出矩陣,該卷積需要執行的乘法運算有多少次呢?

輸出矩陣中的一個數據是經過 \(5*5*192\)次乘法得到的,那麽總共的乘法運算次數則是\(5*5*192*28*28*32=\)1.2億

  • 瓶頸層(Bottleneck layer)

上面的運算次數多大1.2億次,運算量相當之大,因此有另一種網絡結構對此進行優化,而且可以達到同樣的效果,即采用1*1卷積

技術分享圖片

如圖示進行了兩次卷積,我們計算一下總共的乘法次數。

第一次卷積:\(28*28*16*192=\)2.4million
第二次卷積:\(28*28*32*5*5*16=\)10million
總共乘法次數是12.4million,這與上面直接用5*5過濾器的運算次數整整少了十倍。

七、Inception網絡

技術分享圖片

技術分享圖片

八、使用開源的實現方案

這一節主要介紹了如何使用github,這裏不做詳細記錄了。

九、遷移學習

簡單說就是在他人的基礎上實現自己想要的模型,舉個栗子,假如我們現在需要識別家裏養的兩只貓,分別叫小花和小白,但是我們只有比較少的圖片。辛運的是網上已經有一個已經訓練好的模型,是用來區分1000個不同事物的(包括貓),其網絡模型如下:

技術分享圖片

?我們的需求是最後結果有三種:是小花,是小白,都不是。?所以需要對softmax做如下圖修改。另外由於數據較少,所以可以對他人的模型的前面的結構中的參數進行凍結,即權重和偏差不做改動。

技術分享圖片

?當然,如果我們有一定量的數據,那麽freeze的範圍也可以隨之減少,即拿來訓練的層次可以增多

技術分享圖片

十、數據擴充

1.Common augmentation methods

  • 旋轉(rotation)
  • 修剪(shearing)
  • 局部變形(local warping)
  • 鏡像(mirroring)

技術分享圖片

2.Color shifting

我們都知道圖像是由RGB三種顏色構成的,所以該數據擴充方法常采用PCA color augmentation,即假如一個圖片的R和G成分較多,那麽該算法則會相應的減少R,G的值,而增加B的值

技術分享圖片



MARSGGBO?原創





2018-1-14



DeepLearning.ai學習筆記(四)卷積神經網絡 -- week2深度卷積神經網絡 實例探究