吳恩達深度學習筆記(deeplearning.ai)之卷積神經網絡(CNN)(下)


作者:szx_spark

1. 經典網絡

  1. LeNet-5

  2. AlexNet

  3. VGG

  • Ng介紹了上述三個在計算機視覺中的經典網絡。網絡深度逐漸增加,訓練的參數數量也驟增。AlexNet大約6000萬參數,VGG大約上億參數。

  • 從中我們可以學習到:

    • 隨着網絡深度增加,模型的效果能夠提升。
    • 另外,VGG網絡雖然很深,但是其結構比較規整。每經過一次池化層(過濾器大小為2,步長為2),圖像的長度和寬度折半;每經過一次卷積層,輸出數據的channel數量加倍,即卷積層中過濾器(filter)的數量。

2. 殘差網絡(ResNet)

  • 由於存在梯度消失與梯度爆炸的現象,很難訓練非常深的網絡,因此引入了 “skip connections ”的概念,它可以從網絡中的某一層獲取激活值,並將信息傳遞給更深一層的網絡(將輸入流合並,點加),殘差塊可以訓練更深的神經網絡。

  • 殘差網絡的結構如下:

  • 更加直觀的理解是:

    • 殘差網絡可以盡量避免梯度爆炸或消失的現象;
    • 我認為級聯相當於對網絡加了雙層保險,類似於物理中電路的並聯,兩個輸入流只要有一個work,仍能推動網絡進行正常的訓練。
  • 看完上文的描述,可能有人會問,當兩個輸入流維度不同怎么進行“點加”操作?為了解決上述問題,Ng在課上提到引入一個權重矩陣\(W_s\),課堂筆記如下圖所示:

  • 該矩陣可以作為網絡的參數進行訓練;也可以是一個固定矩陣,對 “skip connections ”的數據進行zero padding,補齊到相同維度。之后將兩個相同維度的數據進行”點加“操作。

3. \(1\times 1\)卷積網絡

  • 該圖對卷積核大小為1的CNN的解釋是, 對輸入的channel方向上的某一切片的所有數據與過濾器(\(1\times 1\times 32\))進行點乘再相加的操作,相當於對channel維度上的數據乘以不同的權重。

  • \(1\times 1\)的卷積從根本上可以理解為一個全連接網絡,將數據的第三個維度,即channel大小的維度映射為 #filter(過濾器的數量)大小的維度。這種\(1\times 1\)網絡也被稱之為Network in Network。

  • 應用\(1\times 1\)卷積將 \(28\times 28\times 192\) 維度的數據,壓縮為\(28\times 28\times 32\)維度。這里只是壓縮了第三個維度,而池化操作則對前兩個維度進行了壓縮。具體說明如圖所示。

4. Inception

  • 當設計卷積網絡時,你需要決定過濾器的大小是\(1\times 1\)還是\(3\times 3\),要不要添加池化層等等。而Inception網絡的作用就是代替人工來確定卷積層的過濾器類型,是否需要池化層。

Inception 網絡的思想如圖所示:

  • 基本思想是Inception網絡可以讓網絡自己學習他需要什么樣的參數:過濾器大小、是否需要池化層。
  • 你可以對網絡添加這些參數的所有可能值。 比如圖中1、3、5的數值。圖中網絡分別經過3個不同過濾器大小的卷積、1個池化操作,之后將4個輸出流進行合並,作為Inception網絡的輸出。

但是,Inception網絡會帶來一個問題——計算成本大大提升。下面我們先對上圖\(5\times 5\)卷積的計算成本進行計算:

  • 圖中卷積操作采用了same卷積——使用padding,讓卷積不改變圖片數據的長和寬(輸入數據的前兩個維度)大小。該卷積使用了32個過濾器,且過濾器大小為\(5\times 5\times 192\),這樣卷積的最終輸出是\(28\times 28\times 32\)。經過計算,該卷積的計算成本約為1.2億(乘法次數)。

為了減少計算成本,采用Section 3所講的\(1\times 1\)卷積,計算過程如下圖所示:

  • 圖中的\(1\times 1\)維卷積也稱為bottleneck layer。由此可見,改進后的網絡,計算成本由1.2億,減少至1.24千萬。

總的來說,當我們不知道該設計多大的卷積核大小時,Inception網絡是很好的選擇。經過實驗證明,只要合理構建bottleneck layer,減少計算成本的同時,不會降低網絡的性能。

5. Inception 網絡具體實現

上圖介紹了 Inception 模塊的實現細節,輸入數據(\(28\times 28\times 192\))分別經過四個處理過程,分別是:

  1. 64個\(1\times 1\)過濾器(嚴格來講,應該是\(1\times 1\times 192\))。
  2. 96個\(1\times 1\)過濾器,128個\(3\times 3\)過濾器。
  3. 16個\(1\times 1\)過濾器,32個\(5\times 5\)過濾器。
  4. 為了不改變模型的前兩個維度大小,這里使用same pooling,過濾器大小為\(3\times 3\)。池化后數據的維度不發生改變,仍然為\(28\times 28\times 192\),為了避免最終合並的輸出大部分被pooling輸出填滿,又添加了32個\(1\times 1\)過濾器,將channel維度從192壓縮至32。

該Inception 模塊四個輸出分別為\(28\times 28\times 64\)\(28\times 28\times 128\)\(28\times 28\times 32\)\(28\times 28\times 32\)。合並后輸出為\(28\times 28\times 256\)

原論文的模型結構如下所示:

  • 該結構看起來很復雜,其實使用很多重復的Inception模塊,關於該模塊,我們已經進行了非常詳細的介紹。
  • 原論文中 Inception 網絡的一個細節是,他在模型中添加了幾個隱藏層、softmax分支。它確保了網絡的中間單元也參與了特征計算,並起到了一種調整的效果,能防止網絡發生過擬合。
  • 另外,在我看來,從某些程度上講,這樣也可以防止梯度消失現象的發生。

感興趣的同學可以自行閱讀發表在CVPR2015上的原始論文Going Deeper with Convolutions

在這之后又衍生出Inception V2、V3、V4等網絡結構,也有與之前提到的skip connections相結合的版本,模型的精度得到了提升。
想了解更多可以參考如下鏈接:
https://www.zhihu.com/question/50370954/answer/138938524
https://zhuanlan.zhihu.com/p/30756181


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM