作者:szx_spark
1. 經典網絡
-
LeNet-5
-
AlexNet
-
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\))分別經過四個處理過程,分別是:
- 64個\(1\times 1\)過濾器(嚴格來講,應該是\(1\times 1\times 192\))。
- 96個\(1\times 1\)過濾器,128個\(3\times 3\)過濾器。
- 16個\(1\times 1\)過濾器,32個\(5\times 5\)過濾器。
- 為了不改變模型的前兩個維度大小,這里使用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