1. 程式人生 > >吳恩達《深度學習》第四門課(2)卷積神經網絡:實例探究

吳恩達《深度學習》第四門課(2)卷積神經網絡:實例探究

之一 所有 展示 數據擴充 簡介 設置 假設 通道 開源

2.1為什麽要進行實例探究

(1)就跟學編程一樣,先看看別人怎麽寫的,可以模仿。

(2)在計算機視覺中一個有用的模型,,用在另一個業務中也一般有效,所以可以借鑒。

(3)本周會介紹的一些卷積方面的經典網絡經典的包括:LeNet、AlexNet、VGG;流行的包括:ResNet、Inception,如下圖:

技術分享圖片

2.2經典網絡

(1)LeNet-5網絡結構如下圖所示:

技術分享圖片

(2)在LeNet-5中的一些註意點:網絡輸入單通道的,大概有6萬個參數,池化用的是平均池化而不是最大值池化,還沒有用到padding,輸出也不是現在的softmax,激活函數用的是sigmoid和tanh。綜上可以看出來許多設置在今天看來都是不合適的了,說明網絡在發展。

(3)AlexNet網絡結構如下圖所示:

技術分享圖片

(4)AlexNet與LeNet-5有非常多相似之處,但前者的網絡更深更大,參數達到6000萬,同時使用了Relu激活函數。

(5)VGG-16網絡結構如下圖所示:

技術分享圖片

(6)VGG-16網絡的說明:16代表卷積層加全連接層一共16層,圖中的×2表示連續兩次相同的卷積,所有卷積padding都是用了same,卷積核的個數都是成倍增加,而高寬剛好對半減小,真個網絡非常簡潔優美,網絡參數非常多達到了1.38億各參數,在今天看來依舊是非常大的網絡。

2.3殘差網絡(Residual Networks(ResNets))

(1)一般正常的網絡會進行如下操作:

技術分享圖片

(2)然後將a[l]

傳到下下層的激活函數之前,即進行如下計算,就得到了殘差塊:

技術分享圖片

(3)以下是一個有五個殘差塊的網絡:

技術分享圖片

(4)殘差網絡克服了網絡很深時存在的梯度消失或爆炸的問題。

(5)下圖展示了普通網絡和殘差網絡隨著網絡深度訓練誤差的變化,普通網絡由於網絡很深之後難以訓練所以訓練誤差變大了。

技術分享圖片

2.4殘差網絡有什麽用

(1)因為殘差網絡很容易學習恒等式函數,所以隨著網絡加深,至少不會讓網絡變差。如下圖中添加了兩層,使用Relu激活函數,當W[l+2],b[l+2]都為0時,輸出還是和不添加這兩層的結果一樣,都是a[l],這就是學習恒等式。

技術分享圖片

(2)另個一需要討論的問題就是維度匹配問題,當z[l+2]和a[l]相同時,可以直接相加,如果不同時需要在讓a[l]

與矩陣Ws相乘,Ws的維度為(a[l+2],a[l]),如下圖所示:

技術分享圖片

2.5網絡中的網絡以及1×1卷積

(1)1×1計算示意圖如下所示:

技術分享圖片

(2)作用:首先相當於把一個點的所有通道進行了全連接操作;其次是起到壓縮通道的作用(最重要的作用),或者保持不變,如下圖所示。

技術分享圖片

2.6谷歌Inception網路簡介

(1)構建卷積層時,你要決定使用多大的卷積核(如1×1,3×3,5×5等)或者要不要添加池化層,而Inception網絡的Inception層作用就是它將替你做決定。

(2)下面就是一個典型的Inception模塊的示意圖:

技術分享圖片

(3)用1×1卷積核來構建瓶頸層可以大大減少計算量:

首先是沒有添加1×1卷積核如下圖所示,由於加法的運算次數和乘法運算次數接近,所以這裏只求乘法的計算次數:(5*5*192)*(28*28*32)=1.2億

技術分享圖片

添加了卷積核之後,如下圖所示,整個的輸入輸出是沒有發生改變的,乘法計算量為(1*1*16)*(28*28*16)+(5*5*16)*(28*28*32)=1240萬。只有上面的十分之一。所以計算量減少了很多,同時只要合理構建,不會影響網絡性能。

技術分享圖片

2.7Inception網絡

(1)下面是Inception的一個單元,需要註意的是池化時保持尺寸不變,同時池化不能改變通道數導致通道特別多,所以在其後面添加了1×1卷積核壓縮通道。

技術分享圖片

(2)下面是一個完整的Inception網絡,其中可以看到有一些分支,他們同樣可以做最終輸出預測,這樣做是為了防止過擬合。

技術分享圖片

2.8使用開源的實現方案

(1)在GitHub上找資源,然後在此基礎上進行開發,會有更快的進展。

2.9遷移學習

(1)下載別人的模型,以前預訓練的權重來初始化,同時將輸出層根據自己的需要來修改,比如說分三種類別(已經包括其它了),那麽輸出為3個單元的sotfmax。如下圖所示:

技術分享圖片

(2)凍結別人訓練好的參數,在深度學習框架中可能參數是trainableParameter=0,或者freeze=1等,視實際框架而定。

(3)一個重要技巧是:數據量少時只訓練最後一層,這時可以將圖片輸入,然後將最後一層前的輸出存到硬盤中,因為這些值是不會改變的。然後在用這些值作為輸入訓練最後一層,這樣不要每次都經過前面的網絡,訓練會大大加快。

(4)當數據量越來越大時,從後往前可以訓練更多的層,極端情況下是所有層的參數都參與訓練。

2.10數據擴充

(1)鏡像、隨機裁剪、旋轉、剪切、扭曲

(2)色彩轉換(如給一些通道加值)

(3)在實際使用過程中可以使用多線程,一些線程從硬盤中取出數據,然後進行數據擴充,再傳入其他線程進行訓練,這樣就可以並行實現了。

技術分享圖片

2.11計算機視覺現狀

(1)對於計算機視覺而言,其實當前的數據量是遠遠不夠的,所以需要設計出一些更復雜的網絡,以及人工去調整非常多的超參數,其本質都是因為數據量不夠;假設數據量非常夠的時候,網絡也好,超參數也好都可以使用更簡單的架構和調整。

(2)再次強調多多使用遷移學習,站在巨人的肩膀上。另外如果要自己設計研究全新的網絡可能需要自己從頭開始訓練。

(3)為了在競賽中取得好成績,常常是以巨大的計算量為代價的(如用多個網絡計算輸出取平均),這在實際應用中不太實用。

吳恩達《深度學習》第四門課(2)卷積神經網絡:實例探究