CNN前向、反向傳播及常用結構
CNN偉大之處在於通過感受野和權值共享減少了神經網路需要訓練的引數的個數。
影象的空間聯絡是區域性的,就像人是通過一個區域性的感受野去感受外界影象一樣,每一個神經元都不需要對全域性影象做感受,每個神經元只感受區域性的影象區域,然後在更高層,將這些感受不同區域性的神經元綜合起來就可以得到全域性的資訊了。這樣,就可以減少連線的數目,也就是減少神經網路需要訓練的權值引數的個數了。
feature map
特徵對映,是輸入影象和卷積核卷積後生成的影象特徵。每個feature map通過1個卷積核提取輸入的1個特徵。我們需要多個卷積核來提取輸入的多個特徵。邊長的計算公式是:
output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1
CNN的核心思想:將區域性感受野、權值共享以及下采樣這3種結構思想結合起來獲得了某種程度的位移、尺度、形變不變性。
1.結構
- 若干卷積層(+RELU啟用函式)
- 若干池化層(無啟用函式)
- 全連線層(+sigmoid/tanh啟用函式,最後一層是softmax輸出層)
2.前向傳播演算法
3.反向傳播
4.常用CNN結構
4.1 CNN演化歷史圖
卷積層每層的通道數是人工設定,比如64,128,256等。
4.2 LeNet-5(1998)
最早的CNN,用於識別郵編,結構為:
CONV-POOL-CONV-POOL-CONV-FC
- 卷積層5*5,步長1
- 池化層(MAX)2*2,步長1
4.3 AlexNet(2012)
突破點:
- 大資料:李飛飛團隊ImageNet;
- GPU:高度並行
- 防止梯度消失:ReLU非線性啟用函式
- 降低過擬合:資料增強、Dropout
- 網路加深:5個卷積層,3個全連線層
4.4 VGGNet(2014)
VGG一共有6種不同的網路結構,但是每種結構都有含有5組卷積,每組卷積都使用3x3的卷積核,每組卷積後進行一個2x2最大池化,然後是3個全連線層。主要引數來自全連線層。
-
VGG16包含了16個隱藏層(13個卷積層和3個全連線層),下圖D列
-
VGG19包含了19個隱藏層(16個卷積層和3個全連線層),下圖E列
VGG16/19相比AlexNet的一個改進是採用連續的幾個3x3的卷積核代替AlexNet中的較大卷積核(11x11,7x7,5x5),在保證具有相同感知野的條件下,提升了網路的深度,且減少引數數量。
- 連續使用兩個3x3的卷積核的感受野相當於5x5,
- 連續使用三個3x3的卷積核的感受野相當於7x7。
使用多個3x3的卷積核的作用:
- 使用了多次非線性函式而非1次,增加了函式的判別能力。
- 減少了引數的數量
使用1x1卷積核的作用:
引入了非線性啟用函式,增加決策函式的非線性。
VGG優點
- 結構簡潔,整個網路都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
- 幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好:
- 驗證了通過不斷加深網路結構可以提升效能。
VGG缺點
耗費更多計算資源,並且使用了更多的引數(來自全連線層),導致更多的記憶體佔用(140M)。
4.5 GoogleNet(2014)
- 用更多的卷積,更深的層次,得到更好的結構。
- 採用了模組化的結構,方便增添和修改。
- 網路最後採用了global average pooling(GAP)來代替全連線層
(1)全連線層使feature map的維度減少,進而輸入到softmax,但是由於引數量大造成計算量大且容易過擬合。
(2)GAP的思路是將上述兩個過程合二為一,剔除了全連線層黑箱子操作的特徵,直接賦予了每個channel實際的類別意義。
(3)GAP的意義是對整個網路從結構上做正則化防止過擬合。但是可能會造成收斂速度減慢。 - 核心結構: Inception
(1)既達到稀疏的減少引數的效果(將自然全連線變成稀疏連線)
(2)又能利用硬體中密集矩陣優化的優勢(將稀疏矩陣聚類為較為密集的子矩陣來提高計算效能)
4.6 ResNet(2015)
- 網路層數:50-200層
- 提出本質:解決層次比較深時無法訓練的問題
- 特殊之處:設計了“bottleneck”,相當於在網路中增加了直連通道,使得輸入可以直達輸出,而優化的目標由原來的擬合輸出H(x)變成輸出和輸入的差H(x)-x,其中H(X)是某一層原始的期望對映輸出,x是輸入。
- 殘差模組:在ResNet網路結構中會用到兩種殘差模組,
(1)以兩個3x3的卷積網路串接在一起作為一個殘差模組
(2)以1x1、3x3、1x1的3個卷積網路串接在一起作為一個殘差模組。