卷積神經(jīng)網(wǎng)絡(luò)(CNN)由輸入層、卷積層、激活函數(shù)、池化層、全連接層組成,即INPUT(輸入層)-CONV(卷積層)-RELU(激活函數(shù))-POOL(池化層)-FC(全連接層)
卷積層
用它來進行特征提取,如下:

輸入圖像是32*32*3,3是它的深度(即R、G、B),卷積層是一個5*5*3的filter(感受野),這里注意:感受野的深度必須和輸入圖像的深度相同。通過一個filter與輸入圖像的卷積可以得到一個28*28*1的特征圖,上圖是用了兩個filter得到了兩個特征圖;
我們通常會使用多層卷積層來得到更深層次的特征圖。如下:


關(guān)于卷積的過程圖解如下:?

輸入圖像和filter的對應(yīng)位置元素相乘再求和,最后再加上b,得到特征圖。如圖中所示,filter w0的第一層深度和輸入圖像的藍色方框中對應(yīng)元素相乘再求和得到0,其他兩個深度得到2,0,則有0+2+0+1=3即圖中右邊特征圖的第一個元素3.,卷積過后輸入圖像的藍色方框再滑動,stride(步長)=2,如下:
如上圖,完成卷積,得到一個3*3*1的特征圖;在這里還要注意一點,即zero pad項,即為圖像加上一個邊界,邊界元素均為0.(對原輸入無影響)一般有
F=3 => zero pad with 1?
F=5 => zero pad with 2?
F=7=> zero pad with 3,邊界寬度是一個經(jīng)驗值,加上zero pad這一項是為了使輸入圖像和卷積后的特征圖具有相同的維度,如:
輸入為5*5*3,filter為3*3*3,在zero pad 為1,則加上zero pad后的輸入圖像為7*7*3,則卷積后的特征圖大小為5*5*1((7-3)/1+1),與輸入圖像一樣;?
而關(guān)于特征圖的大小計算方法具體如下:?

卷積層還有一個特性就是“權(quán)值共享”原則。如下圖:

如沒有這個原則,則特征圖由10個32*32*1的特征圖組成,即每個特征圖上有1024個神經(jīng)元,每個神經(jīng)元對應(yīng)輸入圖像上一塊5*5*3的區(qū)域,即一個神經(jīng)元和輸入圖像的這塊區(qū)域有75個連接,即75個權(quán)值參數(shù),則共有75*1024*10=768000個權(quán)值參數(shù),這是非常復(fù)雜的,因此卷積神經(jīng)網(wǎng)絡(luò)引入“權(quán)值”共享原則,即一個特征圖上每個神經(jīng)元對應(yīng)的75個權(quán)值參數(shù)被每個神經(jīng)元共享,這樣則只需75*10=750個權(quán)值參數(shù),而每個特征圖的閾值也共享,即需要10個閾值,則總共需要750+10=760個參數(shù)。
所謂的權(quán)值共享就是說,給一張輸入圖片,用一個filter去掃這張圖,filter里面的數(shù)就叫權(quán)重,這張圖每個位置就是被同樣的filter掃的,所以權(quán)重是一樣的,也就是共享。
激活函數(shù)
如果輸入變化很小,導(dǎo)致輸出結(jié)構(gòu)發(fā)生截然不同的結(jié)果,這種情況是我們不希望看到的,為了模擬更細(xì)微的變化,輸入和輸出數(shù)值不只是0到1,可以是0和1之間的任何數(shù),
激活函數(shù)是用來加入非線性因素的,因為線性模型的表達力不夠?
這句話字面的意思很容易理解,但是在具體處理圖像的時候是什么情況呢?我們知道在神經(jīng)網(wǎng)絡(luò)中,對于圖像,我們主要采用了卷積的方式來處理,也就是對每個像素點賦予一個權(quán)值,這個操作顯然就是線性的。但是對于我們樣本來說,不一定是線性可分的,為了解決這個問題,我們可以進行線性變化,或者我們引入非線性因素,解決線性模型所不能解決的問題。?
這里插一句,來比較一下上面的那些激活函數(shù),因為神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)基礎(chǔ)是處處可微的,所以選取的激活函數(shù)要能保證數(shù)據(jù)輸入與輸出也是可微的,運算特征是不斷進行循環(huán)計算,所以在每代循環(huán)過程中,每個神經(jīng)元的值也是在不斷變化的。?
這就導(dǎo)致了tanh特征相差明顯時的效果會很好,在循環(huán)過程中會不斷擴大特征效果顯示出來,但有是,在特征相差比較復(fù)雜或是相差不是特別大時,需要更細(xì)微的分類判斷的時候,sigmoid效果就好了。?
還有一個東西要注意,sigmoid 和 tanh作為激活函數(shù)的話,一定要注意一定要對 input 進行歸一話,否則激活后的值都會進入平坦區(qū),使隱層的輸出全部趨同,但是 ReLU 并不需要輸入歸一化來防止它們達到飽和。
構(gòu)建稀疏矩陣,也就是稀疏性,這個特性可以去除數(shù)據(jù)中的冗余,最大可能保留數(shù)據(jù)的特征,也就是大多數(shù)為0的稀疏矩陣來表示。其實這個特性主要是對于Relu,它就是取的max(0,x),因為神經(jīng)網(wǎng)絡(luò)是不斷反復(fù)計算,實際上變成了它在嘗試不斷試探如何用一個大多數(shù)為0的矩陣來嘗試表達數(shù)據(jù)特征,結(jié)果因為稀疏特性的存在,反而這種方法變得運算得又快效果又好了。所以我們可以看到目前大部分的卷積神經(jīng)網(wǎng)絡(luò)中,基本上都是采用了ReLU 函數(shù)。
常用的激活函數(shù)?
激活函數(shù)應(yīng)該具有的性質(zhì):??
(1)非線性。線性激活層對于深層神經(jīng)網(wǎng)絡(luò)沒有作用,因為其作用以后仍然是輸入的各種線性變換。。??
(2)連續(xù)可微。梯度下降法的要求。??
(3)范圍最好不飽和,當(dāng)有飽和的區(qū)間段時,若系統(tǒng)優(yōu)化進入到該段,梯度近似為0,網(wǎng)絡(luò)的學(xué)習(xí)就會停止。??
(4)單調(diào)性,當(dāng)激活函數(shù)是單調(diào)時,單層神經(jīng)網(wǎng)絡(luò)的誤差函數(shù)是凸的,好優(yōu)化。??
(5)在原點處近似線性,這樣當(dāng)權(quán)值初始化為接近0的隨機值時,網(wǎng)絡(luò)可以學(xué)習(xí)的較快,不用可以調(diào)節(jié)網(wǎng)絡(luò)的初始值。?
目前常用的激活函數(shù)都只擁有上述性質(zhì)的部分,沒有一個擁有全部的~~