一. CNN神經網絡介紹
CNN是一種特殊的深度前饋神經網絡,爲了避免層級之間的全連接造成的參數冗餘,而導致網絡模型的訓練依賴相當參數個數的數據量;他的設計是局部連接,符合生物神經元的稀疏響應特性(層級之間是稀疏連接的),這樣大大的降低了網絡模型的參數規模,相對而言,對訓練數據的依賴性降低了。
CNN的基礎模塊爲卷積流,其包括四個部分:卷積,池化,非線性,批量歸一化。
卷積:利用卷積覈對輸入圖片進行處理,可以學習到魯棒性較高的特徵。
數字信號處理中常用到的卷積類型:Full卷積,Same卷積,Valid卷積;假設輸入的信號爲一維,且濾波器爲一維的,則有:
1)Full卷積
其中t = 1,2,...,n+m-1
2)Same卷積
其返回的結果爲Full卷積中與輸入信號尺度相同的中心部分。
3)Valid卷積
其中t=1,2,...,n-m+1,需要注意的是n>m。
現在再看一下輸入爲圖片格式(矩陣型),三種卷積的情況(Full,Valid,Same):
卷積操作的核心:可以約減不必要的權值連接,引入稀疏或局部連接,帶來的權值共享策略大大的減少參數量,相對的提升了數據量,從而可以避免過擬合現象的發生;由於卷積操作具有平移不變性,使得學習到的特徵具有拓撲對應性、魯棒性的特性。
權值共享:相鄰神經元的活性相似,從而共享相同的權值參數。
*深度神經網絡可塑性:旋轉不變性,平移不變性,多尺度、多分辨、多通路特性,稀疏性。
池化:降採樣操作,即在一個小區域內,採取一個特定的值作爲輸出值。
本質上,池化操作執行空間或特徵類型的聚合,降低空間維度,其主要的意義是:減少計算量,刻畫平移不變性;約減下一層的輸入維度,核心是降低下一層級的參數,有效地控制過擬合風險。常見池化方式:最大池化,平均池化,隨機池化,範數池化,對數概率池化,空域金字塔池化。
空域金字塔池化:一種多尺度池化,可獲取輸入(卷積後的特徵圖)的多尺度信息;另外,空域金字塔池化可以把任意尺度的圖像的卷積特徵轉化爲相同維度,這不僅可以讓卷積神經網絡處理任意尺度的圖像,還能避免拉伸與向量化操作所導致的一些信息丟失。
假設我們輸入一個一張feature Map,將其按照3種不同刻度:4x4 2x2 1x1對其進行劃分,便會得到16+4+1=21塊子feature Map;現對每一塊子feature Map各取出一個特徵,然後將其合併爲一個固定大小的21維特徵。注:每種刻度對應金字塔一層,每個子feature Map稱之爲win_size;自己可以根據需求設計某一層輸出的n x n個特徵。
非線性:即選擇激活函數,利用激活函數的非線性操作,通過彎曲或扭曲實現表徵能力的提升。
激活函數的核心,通過層級(簡單)非線性映射的複合使得整個網絡的(複雜)非線性刻畫能力得以提升,如果沒有非線性操作,再多的層級組合仍是線性逼近,因而表徵和挖掘深層數據的能力有限。現在用的比較多的激活函數:
1)修正線性逼近ReLU:加速收斂,內蘊稀疏性
2)Softmax系:用於最後一層,爲計算概率響應
3)Softplus函數:ReLU的光滑逼近
4)Sigmoid系:傳統神經網絡的核心
生物腦神經元激活函數的主要變化有三點:
①單側抑制 ②相對較寬的興奮邊界 ③稀疏激活性
Softplus函數具有生物腦神經元激活函數的前兩個特點,但不具備稀疏性,而ReLU函數恰好同時滿足這三點特性,因而在現在的DNN神經網絡中用的比較廣泛。
批量歸一化:優化操作,減少訓練過程中的不穩定性。
歸一化操作,目的是避免隨着層級的加深而導致信息的傳遞呈現逐層衰減的趨勢,因爲數據範圍大的輸入在模式分類中的作用可能偏大,而在數據範圍小的輸入作用可能偏小,總之數據範圍偏大偏小,可能導致DNN收斂較慢、訓練時間長。在2015年以前,經常在DNN中遇到各種各樣的歸一化層,但是近些年研究表明,這個層級似乎對最後的結果幫助不大,所以也開始慢慢摒棄。
二. 經典的分類網絡——LeNet5
Input層:N個32*32的訓練樣本
輸入圖像爲32*32大小。這要比MNIST數據庫中最大的字母還大。這樣做的原因是希望潛在的明顯特徵如筆畫斷點或角點能夠出現在最高層特徵監測子感受野的中心。
注意:綠框中未包含偏置項。如加入偏置項則每個輸出多加上同一個偏置b,此時類似如:aw+bx+ey+fz+b等。所謂的權值共享是每個卷積運算使用同一個卷積核,在左圖中使用的是同一個卷積核,即共享權值。
C1層:
輸入圖片大小: 32*32
卷積窗大小: 5*5
卷積窗種類: 6
輸出特徵圖數量: 6
輸出特徵圖大小: 28*28 (32-5+1)
神經元數量: 4707 (28*28)*6)
連接數: 122304 (28*28*5*5*6)+(28*28*6)
可訓練參數: 156 5*5*6+6
用6個5×5的過濾器進行卷積,結果是在卷積層C1中,得到6張特徵圖,特徵圖的每個神經元與輸入圖片中的5×5的鄰域相連,即用5×5的卷積核去卷積輸入層,由卷積運算可得C1層輸出的特徵圖大小爲(32-5+1)×(32-5+1)=28×28。
S2層:
輸入圖片大小: (28*28)*6
池化窗大小: 2*2
池化窗種類: 6
輸出下采樣圖數量: 6
輸出下采樣圖大小: 14*14 (28/2)*(28/2)
神經元數量: 1176 (14*14)*6
連接數: 5880 2*2*14*14*6+14*14*6
可訓練參數: 12 (1+1)*6
解讀:一般CNN神經網絡池化層通常都是利用最大池化,但是在LeNet5中池化稍微複雜,採用C1中池化塊像素求和、加權、加偏置,然後再利用激活函數進行映射,從而得到降維後的feature map。
C3層:
輸入圖片大小: (14*14)*6
卷積窗大小: 5*5
卷積窗種類: 16
輸出特徵圖數量: 16
輸出特徵圖大小: 10*10 (14-5+1)
神經元數量: 1600 (10*10)*16)
連接數: 151600 1516*10*10
可訓練參數: 1516 6*(3*25+1)+6*(4*25+1)+3*(4*25+1)+1*(6*25+1)
連接解讀:前6個Map卷S2中3個相鄰Map,接下來6個Map卷S2中4個相鄰Map,接下來3個卷S2中4個不相鄰Map,最後一個卷S2中所有Map。一共有6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516個參數,一共有1516*10*10=151600個連接。
具體來說就是如C3的第一個Map,由S2的前三個Map分別與第一個卷積核(一共16個)進行卷積運算,然後求和、加權、添偏置,以此類推(如上圖所示)。
注:相關文獻中說有兩個原因:1)減少參數,2)這種不對稱的組合連接的方式有利於提取多種組合特徵。
S4層:
輸入圖片大小: (10*10)*16
池化窗大小: 2*2
池化窗種類: 16
輸出下采樣圖數量: 16
輸出下采樣圖大小: (5*5)*16
神經元數量: 400 (5*5)*16
連接數: 2000 (2*2*5*5*16)+(5*5*16)
可訓練參數: 32 (1+1)*16
S4層是一個池化層,由16個5*5大小的特徵圖構成。特徵圖中的每個單元與C3中相應特徵圖的2*2鄰域相連接,跟C1和S2之間的連接一樣。S4層有32個可訓練參數(每個特徵圖1個權值和一個偏置)和2000個連接。
C5層:
輸入圖片大小: (5*5)*16
卷積窗大小: 5*5
卷積窗種類: 120
輸出特徵圖數量: 120
輸出特徵圖大小: 1*1 (5-5+1)
神經元數量: 120 (1*120)
連接數: 48120 5*5*16*120*1+120*1
可訓練參數: 48120 5*5*16*120+120
C5層是一個卷積層,有120個特徵圖。每個單元與S4層的全部16個單元的5*5鄰域相連。由於S4層特徵圖的大小也爲5*5(同卷積核一樣),故C5特徵圖的大小爲1*1,這構成了S4和C5之間的全連接。之所以仍將C5標示爲卷積層而非全相聯層,是因爲如果LeNet5的輸入變大,而其他保持不變,那麼此時特徵圖的維數就會比1*1大。C5層有48120個可訓練連接。
F6層:
輸入圖片大小: (1*1)*120
卷積窗大小: 1*1
卷積窗種類: 84
輸出特徵圖數量: 1
輸出特徵圖大小: 84
神經元數量: 84
連接數: 10164 120*84+84
可訓練參數: 10164 120*84+84
F6層有84個單元(之所以選這個數字的原因來自於輸出層的設計),與C5層全相連。有10164個可訓練參數。如同經典神經網絡,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置。然後將其傳遞給Sigmoid函數產生單元i的一個狀態。
Output層:
輸入圖片大小: 1*84
輸出特徵圖數量: 1*10
Output層也是全連接層,共有10個節點,分別代表數字0到9,且如果節點i的值爲0,則網絡識別的結果是數字i。採用的是歐式徑向基函數(ERBF)的網絡連接方式。假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:
CNN是一種帶有卷積結構的深度神經網絡,通常至少有兩個非線性可訓練的卷積層,兩個非線性的固定卷積層(又叫Pooling Layer)和一個全連接層,一共至少5個隱含層。卷積神經網絡中,輸入就是一幅幅的圖像,權值W就是卷積核,一般是卷積層和池化層交替,最後是全連接層的神經網絡。