一、卷積神經網絡(CNN)
1、常見的CNN結構有:LeNet-5、AlexNet、ZFNet、VGGNet、ResNet等。目前效率最高的是ResNet。
2、主要的層次:
數據輸入層:Input Layer
卷積計算層:CONV Layer
ReLU激勵層:ReLU Incentive Layer(功能就是和激活函數一樣,具有非線性的能力)
池化層:Pooling Layer(壓縮形式,降低復雜度)
全聯接層: FC Layer
備注 :Batch Normalization Layer
3、詳解Input Layer
和傳統的神經網絡一樣,首先需要對輸入的數據進行預處理。
(1) 去均值:將輸入數據的各個維度中心化到0,例如X1(1,2,5),那么平均值就是(1+2+5)/3 = 8/3,在用每一個元素減去8/3。
(2)歸一化:將數據各個維度的幅度歸一到同樣的范圍。(在去均值的基礎上,再除以標准差)
(3)PCA/白化:(在cnn處理圖片不用這個)
用PCA降維(去掉特征與特征之間的相關性)
白化石在PCA的基礎上,對轉換后的數據每個特征軸上的幅度進行歸一化
例:(去均值和歸一化)
例:PCA和白化
、
4、CONV Layer(卷積)
- 局部關聯:每個神經元看做一個filter/kernal
- 窗口(receptive field)滑動,filter對局部數據進行計算
- 相關概念(深度:depth,步長:stride,填充值:zero-padding)
理解這張圖
(1)可以把每一張圖片分割成很多個神經元,如圖最左邊
(2) 每一個圖片可用RGB(紅、綠、藍三個通道的顏色)三個方面來表示。
(3)filter可以看作是從幾個角度來描述這個圖片(比如說大小,形狀),有幾個角度,深度就是多少,那么每一個角度,就對應一組filter。
(4)如上圖:一般的圖片為正方形,步長s=2,窗口大小f=3,高度h=5,寬度w=5,填充p=1*2,滿足(p+w-f+s)/s 能夠被整除,輸出為out輸出矩陣的大小
卷積神經網絡就是解決了全鏈接神經網絡復雜度,進行局部感知,如 下圖:
5、ReLU Layer(激活)
一班用ReLU,如果效果不好,可用Leak Relu
6、池化層 Pooling Layer
在連續的卷積層中間存在的就是池化層,主要功能是:通過逐步減小表征的空間尺寸來減小參數量和網絡中的計算;池化層在每個特征圖上獨立操作。使用池化層可以壓縮數據和參數的量,減小過擬合。
類似傳統神經網絡中的結構,FC層中的神經元連接着之前層次的所有激活輸出; 換一句話來講的話,就是兩層之間所有神經元都有權重連接;通常情況下,在 CNN中,FC層只會在尾部出現
一般的CNN結構依次為:
INPUT
[[CONV -> RELU] * N -> POOL?]*M [FC -> RELU] * K
[FC -> RELU] * K
FC
7、 初始化參數(在卷積神經網絡中,可以看到神經元之間的連接是通過權重w以及偏置b實現的。在具 體的神經網絡之前 ,需要初始化參數)
權重的初始化 :
一般方式:很小的隨機數(對於多層深度神經網絡,太小的值會導致回傳的梯度非常小),一般隨機 數是服從均值為0,方差未知(建議:2/n, n為權重數量,https://arxiv.org/pdf/1502.01852.pdf) 的高斯分布隨機數列。
偏置項的初始化 :
一般直接設置為0,在存在ReLU激活函數的網絡中,也可以考慮設置為一個很小的數字
8、卷積神經網絡正則化和Dropout
神經網絡的學習能力受神經元數目以及神經網絡層次的影響,神經元數目越大, 神經網絡層次越高,那么神經網絡的學習能力越強,那么就有可能出現過擬合的問題 。
Regularization:正則化,通過降低模型的復雜度,通過在cost函數上添加 一個正則項的方式來降低overfitting,主要有L1和L2兩種方式
Dropout:通過隨機刪除神經網絡中的神經元來解決overfitting問題,在每次迭代的時候,只使用部分神經元訓練模型獲取W和d的值(
每次丟掉一半左右的隱 藏層神經元,相當於在不同的神經網絡上進行訓練,這樣就減少了神經元之間的依 賴性,即每個神經元不能依賴於某幾個其它的神經元(指層與層之間相連接的神經 元),使神經網絡更加能學習到與其它神經元之間的更加健壯robust(魯棒性)的 特征。另外Dropout不僅減少overfitting,還能提高准確率 )
9、卷積神經網絡訓練的方法
在神經網絡中一般采用Mini-batch SGD,主要包括以下四個步驟的循環:
(1)采樣一個batch的數據
(2)前向計算損失loss
(3)反向傳播計算梯度(一個batch上所有樣本的梯度和)
(4)利用梯度更新權重參數