一、卷積神經網絡的應用場景
卷積神經網絡(Convolutional Neural Networks, ConvNets or CNNs)是一種在圖像識別與分類領域被證明特別有效的神經網絡。
卷積網絡已經成功地識別人臉、物體、交通標志,應用在機器人和無人車等載具。
二、卷積神經網絡的特點
使用CNN進行特征提取,優點就是使用者完全不用關心具體的特征是哪些,即實現了特征提取的封裝。
較全連接的神經網絡,卷積神經網絡計算次數降低很多。
反向傳播法使濾波器可以自動調整,多次訓練使誤差梯度下降,最終達到想要的效果。具體反向傳播法,后面進行說明。
權值共享:卷積核或者特征濾波器即特征權值,和原始圖像卷積,一副圖像的所有神經元會共享此一特征權值。
局部感知:圖像的局部特征不會因為其他處變化而對最終得到的特征映射發生變化。
三、卷積神經網絡的基本結構
輸入層 --> 卷積層 --> 激勵函數relu --> 池化層 --> 全連接層 --> 輸出層
INPUT --> [[CONV -> RELU]*N -> POOL]*M --> [FC -> RELU]*K 或FC
1、輸入層:
首先圖像數據轉換成矩陣像素數據輸入到卷積神經網絡中,這一層可以做一些預處理操作,
有2種常見的圖像數據處理方式:
1)去均值:把輸入數據各個維度都中心化到0,也就是算出所有樣本的平均值,再讓所有樣本減去這個均值(CNN在圖像上的處理往往只有去均值。)
2)歸一化:幅度歸一化到同樣的范圍,比如把樣本都壓縮到0~1之間,加快訓練網絡的收斂性;
(1)線性函數轉換,表達式如下:y=(x-MinValue)/(MaxValue-MinValue) 說明:x、y分別為轉換前、后的值,MaxValue、MinValue分別為樣本的最大值和最小值。
(2)對數函數轉換,表達式如下:y=log10(x) 說明:以10為底的對數函數轉換。
(3)反余切函數轉換,表達式如下:y=atan(x)*2/PI
2、卷積層
卷積層做的就是進行卷積計算,將濾波器或卷積核與原始圖像的像素做卷積計算,得到新的特征映射矩陣;
計算方法就是將卷積核按一定的步長掃描目標矩陣,每掃描到一個矩陣將其內所有對應元素做乘加計算,完整掃描后形成新的矩陣;
如下圖所示:
卷積后矩陣尺寸計算:
feature_map尺寸計算公式:[ (原圖片尺寸 -卷積核尺寸)/ 步長 ] + 1
卷積層可能會存在多個卷積核,需要分別對每個卷積核做卷積計算生成新的特征映射。
3、激勵函數
把卷積輸出結果做非線性映射,
常用激勵函數:
ReLU:比價常用的激勵函數,它有收斂快,求梯度簡單,較脆弱這些特點,較脆弱的原因是,當x的值小於0后,它任然會出現梯度為0 的結果。
4、池化層
它的位置一般是夾在連續的卷積層中間,作用是壓縮數據和參數的量,減小過擬合
5、全連接層
兩層之間所有神經元都有權重連接,通常全連接層在卷積神經網絡尾部。業界人解釋放一個FC layer的主要目的是最大可能的利用現在經過窗口滑動和池化后保留下的少量的信息還原原來的輸入信息
拉直化處理矩陣后,經過softmax函數計算其分類概率。
四、卷積神經網絡中的反向傳播法 (此章節轉載:http://www.cnblogs.com/charlotte77/p/5629865.html)
反向傳播法是卷積神經網絡最為關鍵的一個環節,它使得卷積神經網絡可以自動化調整卷積核的參數,最終使得准確性達到最大值;
那么反向傳播法是什么呢?
1)首先計算出當前輸出層softmax計算結果和目標結果產生的誤差值:
此處輸出層有幾個輸出,將輸出進行均方差后求和。
2)
以權重參數w5為例,如果我們想知道w5對整體誤差產生了多少影響,可以用整體誤差對w5求偏導求出:(鏈式法則)
下面的圖可以更直觀的看清楚誤差是怎樣反向傳播的:
現在我們來分別計算每個式子的值:
計算:
計算:
(這一步實際上就是對sigmoid函數求導,比較簡單,可以自己推導一下)
計算:
最后三者相乘:
這樣我們就計算出整體誤差E(total)對w5的偏導值。
回過頭來再看看上面的公式,我們發現:
為了表達方便,用來表示輸出層的誤差:
因此,整體誤差E(total)對w5的偏導公式可以寫成:
如果輸出層誤差計為負的話,也可以寫成:
最后我們來更新w5的值:
(其中,是學習速率,這里我們取0.5)
同理,可更新w6,w7,w8:
參考文檔:
<An Intuitive Explanation of Convolutional Neural Networks>
https://jizhi.im/blog/post/intuitive_explanation_cnn
<一文弄懂神經網絡中的反向傳播法>
http://www.cnblogs.com/charlotte77/p/5629865.html