1. 程式人生 > >吳恩達《深度學習-卷積神經網路》2--深度卷積神經網路

吳恩達《深度學習-卷積神經網路》2--深度卷積神經網路

1. Why look at case studies本節展示幾個神經網路的例項分析為什麼要講例項?近些年CNN的主要任務就是研究如何將基本構件(CONV、POOL、CF)組合起來形成有效的CNN,而學習瞭解前人的做法可以激發創造2. Classic Networks1)LeNet-5該LeNet模型總共包含了大約6萬個引數。當時Yann LeCun提出的LeNet-5模型池化層使用的是average pool,而且各層啟用函式一般是Sigmoid或tanh。現在,一般池化層使用max pool,啟用函式用ReLU。2)AlexNet

圖中same的意思是用padding填充使輸出影象與輸入影象保持大小一致。AlexNet模型與LeNet-5模型類似,只是要複雜一些,總共包含了大約6千萬個引數。同樣可以根據實際情況使用啟用函式ReLU。原作者還提到了一種優化技巧,叫做Local Response Normalization(LRN)。 而在實際應用中,LRN的效果並不突出

3)VGG-16VGG中所有卷積都採用了padding填充使輸出影象尺寸與輸入影象一樣,所有filter都是3x3,步長為1,圖中CONV 64x2表示用64個filter卷積2次,其他同理。VGG-16網路的一大優點是簡化了神經網路的結構,16是卷積層和全連線層的總數,一共1.38億個引數,雖然神經網路很大,但是結構很簡單很規整。缺點就是需要訓練的特徵數量巨大。這篇論文很吸引人的一點是,它揭示了影象縮小的比例和通道增加的比例是有規律且相關。3. Residual Networks殘差網路神經網路層數越多,網路越深,就越容易發生梯度消失和梯度爆炸,解決方法之一就是殘差網路。1)residual block殘差塊    (1)short cut捷徑

    

如上圖捷徑就是a[l]跳過a[l+1]和z[l+2]一起生成a[l+2]   (2)skip connection跳遠連線     跳遠連線和捷徑類似,它一次跳過一層或多層,可以作用到網路的更深處。實驗表明,這種模型結構對於訓練非常深的神經網路,效果很好。另外,為了便於區分,我們把非Residual Networks稱為Plain Network。與Plain Network相比,Residual Network能夠訓練更深層的神經網路,有效避免發生發生梯度消失和梯度爆炸。從下面兩張圖的對比中可以看出,隨著神經網路層數增加,Plain Network實際效能會變差,training error甚至會變大。然而,Residual Network的訓練效果卻很好,training error一直呈下降趨勢。
4. Why ResNets Work1)為什麼殘差網路能夠起作用

如上圖,給一個很大的神經網路增加了兩層,可以看出如果發生梯度消失,那麼相當於將a[l]複製給a[l+2](啟用函式為ReLU的情況下),即恆等函式,也就是新增加的兩層即使在最壞的情況下也不會導致網路效能下降,而且恆等函式的計算也是極為簡單的,所以殘差網路有利於構建更深的神經網路。2)如果a[l]層和a[l+2]維度不同應該怎麼辦?

假設a[l]維度(n[l],1),a[l+2]維度是(n[l+2],1),這裡引入一個權重矩陣Ws(n[l+2],n[l]),矩陣可以通過後向傳播學習獲得,也可以是填充值為0的固定矩陣。

5. Networks in Networks and 1x1 Convolutions1)1x1的卷積核/網路中的網路1x1的卷積核對單通道的影象來說意義不大,但是對多通道的資料就會產生神奇的效果,如下圖32個道,1x1卷積核的作用就是遍歷32個道的資料,對應元素相乘相加,然後再帶入啟用函式如ReLU中,卷積後得到一個單道影象,同理也可以通過多個卷積核獲得多幅影象。這種1x1的卷積核也被稱為network in network。下面舉例講述其應用:對於一幅影象,若要壓縮它的高寬,可以通過pooling池化,那麼如果道數目太多呢,可以用network in network,如下圖,用32個1x1x192的卷積核可以將影象通道從192壓縮到32:總結:network in network其作用就是改變通道數目,可以是減少,也可以是增加。6. Inception Network Motivation1)Inception網路是什麼?CNN中需要決定filter的尺寸,是3x3還是5x5,需不需要增加POOL層,而Inception網路的就是不加選擇的全部選用,然後讓模型來選擇。如上圖Inception Network使用不同尺寸的filters,並加入了POOL,將所有輸出拼接,最後的輸出為28x28x256,然後由神經網路去學習並選擇最好的過濾器組合。2)計算成本Inception Network在提升效能的同時,會帶來計算量大的問題,舉例說明:

上圖採用32個5x5x192的filter對原圖進行有填充的same過濾,得到28x28x32的輸出,那麼其計算量就是5x5x192x28x28x32=120m,大約為1.2億,計算量是非常大的,可以結合上一節的1x1的過濾器來減少計算量,如下圖

總計算量變為28x28x16x192+28x28x32x5x5x16=12.4m,減少了90%,經過1x1的過濾器的輸出層通常被稱為“瓶頸層”(bottleneck layer),瓶頸層通常是某個物件的最小部分。

問題是這樣做會不會降低系統性能?實驗證明,如果合理設定瓶頸層,則可以實現不影響系統性能的情況下大大減少計算量。

7.Inception Network本節介紹完整的Inception網路1)Inception模組如上圖是一個標準Inception模組,值得一提的是MAXPOOL之後又對通道進行了壓縮。2)Inception網路由Inception模組構成網路,值得注意的是在網路中間的隱藏層也可以做softmax預測,它確保了即使是隱藏層或中間層的單元也參與了特徵的計算,也可以進行不太差的圖片分類(也就是結果預測),而且它對Inception網路起到了正則化(regularizing)的作用,能夠防止過擬合。8. Using Open-Source Implementation本節主要講述如何從GitHub上下載code:

比如對resnet感興趣,那麼可以Google輸入resnet github,會搜尋到很多不同的實現,選擇其一開啟會出現一個resnet實現的GitHub資源庫,裡面有詳細的文字描述,點選綠色按鈕download進行下載,會顯示一個地址,copy地址:

然後進行輸入git clone <copy的地址>就可以將code下載到本地硬碟

9. Transfer Learning計算機視覺的資料集:ImageNet, MS COCO, Pascal,很多深度學習的研究人員已經用這些資料進行了演算法訓練,你可以下載別人花費好幾周甚至幾個月訓練的開源權重引數,作為初始值放到自己的神經網路上,即去掉最後一層softmax的輸出層,加入自己的softmax輸出層,然後重新訓練引數。1)在訓練引數的時候,如果現有的資料集較小,那麼建議將下載下來的權重引數凍結,也就是保持不變,只訓練最後一層的引數。

不同框架對凍結引數的設定不同,有的是freeze=1,有的是trainableParameter=0,但是都支援設定是否訓練某些層。

2)若現有的資料集較大,那麼可以少凍結幾層,即凍結前面n層,留下最後的m層跟替換後的softmax一起訓練,或者直接刪掉最後的m層替換成自己的隱藏層,再訓練。

3)如果現有的資料集非常大,那麼可以一層也不凍結,也就是用下載的權重當做初始值,然後替換softmax輸出層之後,重新訓練整個網路。

總的規律就是,自己的資料集越大那麼凍結的層數就應該越少,使得能夠訓練的層數越多。

10. Data Augmentation資料增強對於計算機視覺來說,通常都會存在資料不夠的問題,資料增強對此比較有幫助。

資料增強的方法:

1)對已有影象進行映象,隨機裁剪,旋轉,扭曲變換等重取樣2)色彩轉換,如給RGB新增不同的失真值,因為光線的變化通常會引起影象顏色的差異,所以這樣做是合理且有效的。

對於顏色變換,還可以採用PCA顏色增強(PCA color augmentation),比如某幅影象偏紫色,即RB的值較大,而G的值較小,那麼PCA所做的就是對RB重取樣力度大一些,而對G重取樣力度小一些,使得影象更一致。具體的PCA color augmentation做法可以查閱AlexNet的相關論文。11. State of Computer Vision一般來說,如果data較少,那麼就需要更多的hand-engineering,對已有data進行處理,比如上一節介紹的data augmentation。模型演算法也會相對要複雜一些。如果data很多,可以構建深層神經網路,不需要太多的hand-engineering,模型演算法也就相對簡單一些。

在模型研究或者競賽方面,有一些方法能夠有助於提升神經網路模型的效能:

  • Ensembling整合: Train several networks independently and average their outputs.

  • Multi-crop at test time: Run classifier on multiple versions of test images and average results.即在測試時對影象進行擴充,具體做法是先映象,然後對原影象分別進行中間、左上角、右上角、左下角、右下角的取樣獲得5幅影象,再對映象後的影象進行同樣操作獲得5幅影象,一共獲得10幅影象,也稱10-crop方法

這裡寫圖片描述

但是由於這兩種方法計算成本較大,一般不適用於實際專案開發。最後,我們還要靈活使用開原始碼:
  • Use archittectures of networks published in the literature

  • Use open source implementations if possible

  • Use pretrained models and fine-tune on your dataset