1.1 卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)

卷積神經(jīng)網(wǎng)絡(luò)
CNN(Convolutional Neural Network)
它的雛形是1998年LeCun的LeNet網(wǎng)絡(luò)結(jié)構(gòu),卷積神經(jīng)網(wǎng)絡(luò)發(fā)展歷程中的第一個卷積神經(jīng)網(wǎng)絡(luò)
只要包含了卷基層的神經(jīng)網(wǎng)絡(luò)都可以理解為卷積神經(jīng)網(wǎng)絡(luò)

- Convolutions:卷積層
- Subsampling:下采樣層
- Full connection:全連接層
卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展

卷積神經(jīng)網(wǎng)絡(luò)無處不在
- Classification
- Retrieval
- Detection
- Segmentation
全連接層
全連接層就是由許許多多的神經(jīng)元共同連接得來的
神經(jīng)元

- x1,x2,x3是這個神經(jīng)元的三個激勵,w1,w2,w3是這三個激勵對應(yīng)的權(quán)重
- -1是這個神經(jīng)元的偏置
BP神經(jīng)網(wǎng)絡(luò)
如果將神經(jīng)元按列進行排列,列與列之間進行全連接,就得到一個BP神經(jīng)網(wǎng)絡(luò)

- 從左到右的正向傳播過程中能夠得到一個輸出值,將這個輸出值和所期望的輸出值進行對比就能得到一個誤差值
- 通過計算每個節(jié)點的偏導(dǎo)數(shù)就能夠計算得到每個節(jié)點的誤差梯度
- 將得到的損失值反向應(yīng)用到損失梯度上,就達到了誤差的反向傳播過程
實例:利用BP神經(jīng)網(wǎng)絡(luò)做車牌數(shù)字識別

1、首先讀入一張彩色的RGB圖像,每一個像素里面都包含3個值(RGB分量)

- 首先將它進行灰度化,每個像素值就只剩下一個分量了
- 再進行二值化處理,得到一個黑白圖像
2、用一個5行3列的滑動窗口在二值化后的黑白圖像上進行滑動,每滑動到一個地方就計算這個滑動窗口中白色的像素占整個滑動窗口所覆蓋的像素比例

- 當(dāng)滑動窗口滑動到到最右邊的時候,此時列數(shù)不夠了,可以進行補零處理,也可以進行一個判斷,當(dāng)滑動窗口快越界的時候就暫時把它變成一個5行2列的滑動窗口
- 通過這個方法遍歷整個圖像就得到一個5*5的矩陣
3、將所得到的5*5的矩陣按行進行展開,并將其拼接成一個行向量(1行25列),這樣就可以把這個行向量當(dāng)成輸入神經(jīng)網(wǎng)絡(luò)的輸入層

4、輸入層有了之后,再看輸出層。one-hot編碼是常用的對標(biāo)簽進行編碼的方式

- 上圖展示了0-9每個數(shù)字對應(yīng)的one-hot編碼,沒有重復(fù)
5、有了輸入和輸出之后,就可以對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練了。在實際訓(xùn)練過程中,可以將輸入層的輸入節(jié)點數(shù)設(shè)為25,將輸出層的輸出節(jié)點數(shù)設(shè)為10,中間的隱藏層按實際情況進行設(shè)置

卷積層
卷積層是卷積神經(jīng)網(wǎng)路中獨特的網(wǎng)絡(luò)結(jié)構(gòu)

卷積:一個滑動窗口在特征圖上進行滑動,并計算(將卷積核上的值與特征圖上的值對應(yīng)相乘,再進行相加,就得到最后矩陣中的一個值,每滑動一步計算一個值,最終得到卷積結(jié)果)
卷積的計算方式
卷積的目的就是為了進行圖像的特征提取
卷積的特性
- 擁有局部感知機制:以滑動窗口的形式在特征圖上進行滑動計算,所以具有局部感知能力
- 權(quán)值共享:滑動過程中,卷積核的值不會發(fā)生變化,所以又具有權(quán)值共享的特性
權(quán)值共享的優(yōu)勢(對比BP神經(jīng)網(wǎng)絡(luò))

- 這里的參數(shù)指的是神經(jīng)元的權(quán)重
- 權(quán)值的共享使得卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)個數(shù)大幅度減少
卷積的過程

實際應(yīng)用過程中往往是對多維的特征矩陣進行卷積操作
卷積核的深度要和輸入特征矩陣一致(這里的深度指的是channel,即通道數(shù)),都是三維的,最終卷積得到的矩陣是由三通道的輸入特征矩陣和三通道的卷積核分別對應(yīng)卷積,再對應(yīng)相加后得到一個卷積矩陣
總結(jié)
1、卷積核的cahnnel與輸入特征層的channel相同(都是三通道)
2、輸出的特征矩陣channel與卷積核的個數(shù)相同(通過卷積核1和卷積核2最終得到一個兩通道的輸出特征矩陣)
思考
1、如果加上偏移量bias該如何計算?
只需要將最終卷積得到的矩陣的每個元素和偏移量進行相加即可
2、加上激活函數(shù)該如何計算?
常用的激活函數(shù)

- 為什么要使用激活函數(shù)?在線性的計算過程中引入非線性因素,使其具備解決非線性問題的能力
- Relu激活函數(shù)實際上是將負(fù)值全部過濾掉,只保留了正值不變,在實際應(yīng)用中使用較多
- 在反向傳播誤差的過程中,如果使用sigmoid激活函數(shù),導(dǎo)數(shù)的求解非常麻煩
- 如果使用Relu激活函數(shù),權(quán)重如果進入失活狀態(tài)后無法被再次激活,所以在訓(xùn)練的過程中,建議不要一開始就使用特別大的學(xué)習(xí)率進行學(xué)習(xí),否則很容易導(dǎo)致大量神經(jīng)元失活
3、如果在卷積的過程中出現(xiàn)越界的情況該如何處理?

- 一般強況下,可以使用padding的方式在圖像的周圍直接補零進行處理,補零后就能夠正常地進行卷積,而不會出現(xiàn)越界的情況了

- padding的像素p:一般實際應(yīng)用過程中是兩邊同時補零,即左右上下進行對稱的:補零操作
- 上圖中只補了一邊,所以只用加上一個p就夠了
- N = ( 4 - 3 + 1 )/ 2 + 1 = 2 ,所以最后得到一個2*2的特征矩陣
池化層

池化層的目的就是對特征圖進行稀疏處理,減少數(shù)據(jù)運算量
maxpooling下采樣:尋找池化核對應(yīng)范圍內(nèi)的最大值來進行最大下采樣操作

averagepooling下采樣層:尋找池化核對應(yīng)范圍內(nèi)的平均值來進行平均下采樣操作
池化層的特點
1、沒有訓(xùn)練參數(shù),只是在原始的特征圖上進行求最大值或者平均值的操作
2、它只會改變特征矩陣的寬度(w)和高度(h),并不會改變深度(channel)
3、一般池化核的大?。╬oolsize)和步長(stride)相同,可以將特征圖進行一定比例的縮小,計算更加方便(這只是一般情況下,但并不絕對)
----end----