文章目錄
- 1、卷積層
- 1.1、激活函數
- 1.3、sigmoid
- 1.4、Tanh
- 1.5、ReLU
- 1.6、Leaky ReLU
- 1.7、誤差計算
- 2、池化層
- 3、全連接層
- 4、CNN訓練
參考鏈接1
參考鏈接2
1、卷積層
卷積層(Convolutional layer),這一層就是卷積神經網絡最重要的一個層次,也是“卷積神經網絡”的名字來源。卷積神經網路中每層卷積層由若干卷積單元組成,每個卷積單元的參數都是通過反向傳播算法優化得到的。
卷積運算的目的是提取輸入的不同特征,某些卷積層可能只能提取一些低級的特征如邊緣、線條和角等層級,更多層的網路能從低級特征中迭代提取更復雜的特征。
卷積層的作用是對輸入數據進行卷積操作,也可以理解為濾波過程,一個卷積核就是一個窗口濾波器,在網絡訓練過程中,使用自定義大小的卷積核作為一個滑動窗口對輸入數據進行卷積。
卷積過程實質上就是兩個矩陣做乘法,在卷積過程后,原始輸入矩陣會有一定程度的縮小,比如自定義卷積核大小為3*3,步長為1時,矩陣長寬會縮小2,所以在一些應用場合下,為了保持輸入矩陣的大小,我們在卷積操作前需要對數據進行擴充,常見的擴充方法為0填充方式。
卷積層中還有兩個重要的參數,分別是偏置和激活(獨立層,但一般將激活層和卷積層放在一塊)。
偏置向量的作用是對卷積后的數據進行簡單線性的加法,就是卷積后的數據加上偏置向量中的數據,然后為了增加網絡的一個非線性能力,需要對數據進行激活操作,在神經元中,就是將沒有的數據率除掉,而有用的數據則可以輸入神經元,讓人做出反應。
卷積核(是一種特征)對原圖進行卷積,是把原圖中包含這種特征提取出來
卷積計算(通過卷積核在圖像上滑動計算,相乘、求和、取平均)結果等于1表示濾框中的值和卷積核的值完全一樣
1.1、激活函數
激活函數,最常用的激活函數目前有Relu、tanh、sigmoid,著重介紹一下Relu函數(即線性整流層(Rectified Linear Units layer, 簡稱ReLU layer)),Relu函數是一個線性函數,它對負數取0,正數則為y=x(即輸入等于輸出),即f(x)=max(0,x),它的特點是收斂快,求梯度簡單,但較脆弱。
1.3、sigmoid
Sigmoid函數是傳統的神經網絡和深度學習領域開始時使用頻率最高的激活函數。
其優點主要是連續,平滑便于求導;
但是其的缺點也很致命:
1.梯度消失問題(Vanishing Gradient problem):觀看圖像可知當x>2或x<2時Sigmod輸出趨于平滑,導致梯度減小,權重和偏置更新過慢導致網絡不更新
2.非零均值特性(none-zero-centered):會使訓練震蕩達不到最優解,使收斂變慢
3.導數計算復雜,影響速度
1.4、Tanh
Tanh主要解決了Sigmod非零均值特性的問題,但是其還是存在計算復雜和梯度消失的問題。
1.5、ReLU
Relu的主要優點有:
1.大于0時,其導數恒為1,不會存在梯度消失的問題
2.計算速度非常快,只需要判斷 x 是大于0還是小于0
3.收斂速度遠遠快于前面的 Sigmoid 和 Tanh函數
但是ReLu也是有著缺陷的:
1.非零均值特性
2.x<0時,輸出恒為0.會使某些神經元永遠不會被激活,進而導致參數永遠不會更新
1.6、Leaky ReLU
Leaky ReLU 的提出主要是為了解決前面提到的Dead ReLu問題。因為當 x 小于 0 時,其輸出不再是 0。雖然同時 Leaky ReLU 具有 ReLU 的所有優點。但是在實際操作中并沒有完全證明好于 ReLU 函數。
1.7、誤差計算
計算第一個隱藏的結果
計算y1和y2的結果
softmax計算
損失計算
誤差反向傳播,得到每個節點的損失梯度信息
權重更新(新值 = 舊值-學習率*損失梯度)
分批次訓練(每求一次批次進行一次誤差計算以及反向傳播)
優化器作用就是為了讓網絡更快收斂
wt+1表示更新后的參數,wt表示更新前的參數a表示設置學習率g(wt)是我們所求的損失梯度
2、池化層
通常在卷積層之后會得到維度很大的特征,將特征切成幾個區域,取其最大值或平均值,得到新的、維度較小的特征。池化方式一般有兩種,一種為取最大值,另一種為取均值,池化的過程也是一個移動窗口在輸入矩陣上滑動,滑動過程中去這個窗口中數據矩陣上最大值或均值作為輸出,池化層的大小一般為2*2,步長為1
池化層夾在連續的卷積層中間, 用于壓縮數據和參數的量,減小過擬合。簡而言之,如果輸入是圖像的話,那么池化層的最主要作用就是壓縮圖像。
池化層的作用是對數據進行降維處理,對于所有神經網絡來說,隨著網絡深度增加,網絡中權值參數的數量也會越來越大,這也是導致我們在訓練一個大型網絡時必須使用大型服務站和GPU加速了,但是卷積神經網絡出了它本身權值共享和局部連接方式可以有效的降低網絡壓力外,池化層也作為一個減低網絡壓力的重要組成部分,經過卷積層后的數據做為池化層的輸入進行池化操作。
池化層的具體作用:
特征不變性,也就是我們在圖像處理中經常提到的特征的尺度不變性,池化操作就是圖像的resize,平時一張狗的圖像被縮小了一倍我們還能認出這是一張狗的照片,這說明這張圖像中仍保留著狗最重要的特征,我們一看就能判斷圖像中畫的是一只狗,圖像壓縮時去掉的信息只是一些無關緊要的信息,而留下的信息則是具有尺度不變性的特征,是最能表達圖像的特征。
特征降維,我們知道一幅圖像含有的信息是很大的,特征也很多,但是有些信息對于我們做圖像任務時沒有太多用途或者有重復,我們可以把這類冗余信息去除,把最重要的特征抽取出來,這也是池化操作的一大作用。
在一定程度上防止過擬合,更方便優化。
3、全連接層
全連接層( Fully-Connected layer), 把所有局部特征結合變成全局特征,用來計算最后每一類的得分。全連接層往往在分類問題中用作網絡的最后層,作用主要為將數據矩陣進行全連接,然后按照分類數量輸出數據,在回歸問題中,全連接層則可以省略,但是我們需要增加卷積層來對數據進行逆卷積操作。
4、CNN訓練
前向傳播階段:
選取訓練樣本(x,y),將x輸入網絡中。隨機初始化權值(一般情況下選取小數),信息從輸入層經過一層一層的特征提取和轉換,最后到達輸出層,得到輸出結果。
反向傳播階段:
輸出結果與理想結果對比,計算全局性誤差(即Loss)。得到的誤差反向傳遞給不同層的神經元,按照“迭代法”調整權值和偏重,尋找全局性最優的結果。
通過大量圖片去訓練這個模型,通過前向傳播和反向傳播的方法,神經網絡得到一個結果,將其和真實的結果進行比較誤差計算(損失函數),我們的目標就是將損失函數降到最低,通過修改卷積核的參數和全連接每一層的權重來進行微調,使得損失函數最小。