蔡 楠,李 萍
(寧夏大學 物理與電子電氣工程學院,寧夏 銀川 750021)
卷積神經(jīng)網(wǎng)絡(convolution neural network,CNN),屬于人工神經(jīng)網(wǎng)絡的一種[1],相對于傳統(tǒng)的識別算法不需要將輸入的數(shù)據(jù)進行特征提取和數(shù)據(jù)重建,而直接可以將圖像作為網(wǎng)絡的輸入,自動提取特征并且對圖像具有高度不變性。其權(quán)值共享的網(wǎng)絡結(jié)構(gòu)顯著降低了模型的復雜度,減少了權(quán)值的數(shù)量,是目前語音分析和圖像識別領(lǐng)域研究的熱點[2]。網(wǎng)絡參數(shù)的訓練與更新是CNN的關(guān)鍵環(huán)節(jié),占用了大量的運算資源和時間,并且為了獲得足夠的擬合精度,通常需要大量的有標簽樣本來進行訓練[3]。
卷積神經(jīng)網(wǎng)絡一般由輸入層、卷積層、池化層、全連接層、輸出層組成,其中卷積層的可訓練權(quán)值被稱為卷積核。卷積神經(jīng)網(wǎng)絡的初始化是針對卷積核及全連接層的權(quán)重值進行合理有效的初始化,使網(wǎng)絡降低訓練難度,更快收斂[4]。
在初始化方法中最為常見的是隨機初始化,其主要方法是通過選取某種概率分布生成一組隨機數(shù)來初始化卷積核[5]。該方法十分簡單且易于操作,但是存在較大的偶然性和不確定性,導致網(wǎng)絡的不穩(wěn)定性大大增加。在2010年,由Glorot等提出了Xavier算法初始化CNN,由于一般的神經(jīng)網(wǎng)絡在前向傳播時神經(jīng)元輸出值的方差會不斷增大,而利用Xavier算法理論上可以保證每層神經(jīng)元輸入輸出方差一致[6-7],但是Xavier算法從本質(zhì)上講還是通過生成隨機數(shù)來完成初始化,因此網(wǎng)絡仍然存在著不穩(wěn)定性。文獻[8]中通過主成分分析(principal component analysis,PCA)對每個卷積層輸入的每幅圖像先進行所有感受野的采集,然后通過PCA提取主成分將其作為網(wǎng)絡的權(quán)重,從而達到初始化網(wǎng)絡權(quán)重的目的。該方法解決了通過隨機數(shù)初始化網(wǎng)絡帶來的不穩(wěn)定性,同時避免了人工設(shè)定超參數(shù),但是由于PCA在提取非線性特征上能力較差,無法提取圖像中存在的非線性特征,不能更加有效地初始化網(wǎng)絡權(quán)重。為此,文中提出了一種基于核主成分分析(kernel principal component analysis,KPCA)的方法來初始化卷積神經(jīng)網(wǎng)絡的權(quán)重,稱為KPCA-CNN。KPCA-CNN通過對每個卷積層輸入的每幅圖像的所有感受野進行取樣作為KPCA的輸入樣本,經(jīng)KPCA映射至高維特征空間提取出所有感受野的非線性特征作為網(wǎng)絡權(quán)重的初始值,以提高網(wǎng)絡的準確率,加快網(wǎng)絡的收斂速度。
一般卷積神經(jīng)網(wǎng)絡由輸入層、卷積層、池化層(下采樣層)、全連接層、輸出層構(gòu)成,如圖1所示[9]。
圖1 卷積神經(jīng)網(wǎng)絡模型
與傳統(tǒng)的神經(jīng)網(wǎng)絡相比,CNN主要增加了兩層:卷積層與池化層。其中卷積層是由輸入圖像與卷積核通過卷積后所得到的特征圖,通過卷積運算使輸入圖像特征增強,降低噪聲干擾,從而更好地提取圖像特征[10]。池化層一般在卷積層之后,主要目的是通過池化操作將卷積層中的特征圖進行特征降維,減少網(wǎng)絡的計算量。將經(jīng)過多個卷積層與池化層后的特征圖通過全連接層完成對圖像的分類和識別[11]。具體過程如下:
假設(shè)卷積神經(jīng)網(wǎng)絡第i層的輸入圖像為Xi(輸入層的圖像為X0),Ci表示第i個卷積層,Si表示Ci之后的池化層,Hi表示第i個卷積層中的特征圖,Ji表示Si中池化后的特征圖。
生成Hi的過程如下:
Hi=f(wi*Xi+bi)
(1)
其中,wi表示第i個卷積層中的卷積核;“*”表示卷積運算符;bi表示第i個卷積層中的偏置項;f(·)表示非線性激勵函數(shù)。
之后通過池化層(Si)所得特征圖Ji如下式所示:
Ji=subsampling(Hi)
(2)
其中,subsampling表示池化操作。
最后由全連接層根據(jù)卷積層與池化層所提取特征進行圖像分類與識別。
卷積神經(jīng)網(wǎng)絡在訓練過程中通過反向傳播使損失函數(shù)達到最小,最終收斂于某個值,而有效的初始化,能減少網(wǎng)絡的訓練復雜度和迭代次數(shù),因此卷積神經(jīng)網(wǎng)絡初始化就是更好地為各個卷積層的卷積核,全連接層的權(quán)值,各層的偏置項進行初始化,由于池化層采用固定結(jié)構(gòu)所以無需初始化。KPCA-CNN主要針對卷積核的初始化,全連接層的權(quán)值采取隨機數(shù)初始化,卷積層的偏置項均設(shè)為0。
核方法是解決非線性模式分析問題的一種有效途徑,核心思想在于通過某種線性的映射將原始數(shù)據(jù)映射到合適的高維空間,再通過線性的學習器在新的高維空間中分析處理模式[12-13]。
核函數(shù)如下所示:
k=<φ(xi),φ(xj)>
(3)
其中,“<·>”表示內(nèi)積運算符;φ為原樣本向高維特征空間的映射。
KPCA是PCA的一種非線性改進,主要是將樣本經(jīng)非線性變換映射至高維特征空間[14-15],在高維特征空間中使原樣本線性可分,從而更好地提取非線性特征。
設(shè)一組樣本集X={X1,X2,…,Xn},其中n為樣本個數(shù),KPCA原理如下:
(1)將樣本映射至高維特征空間φ(X);
以網(wǎng)絡中第一個卷積層為例,具體算法過程描述如下:
假設(shè)輸入層有2幅圖像,第一個卷積層中有4個卷積核,卷積核的大小為3×3。
(3)把所提取的主成分作為卷積核的初始值,對卷積神經(jīng)網(wǎng)絡的卷積核w1、w2、w3、w4進行初始化。
實驗1:采用Python中sklearn自帶的數(shù)據(jù)庫生成100個半月形分布數(shù)據(jù),如圖2所示,分別經(jīng)PCA與KPCA進行處理,結(jié)果如圖3和圖4所示。從圖3和圖4中可以看出,經(jīng)PCA處理的數(shù)據(jù)不能有效地將非線性分布的數(shù)據(jù)完全分開,而KPCA能夠有效地使非線性分布數(shù)據(jù)完全分開,從而能更加有效地提取非線性特征。
圖2 生成的半月形分布數(shù)據(jù)
圖3 經(jīng)PCA處理后的數(shù)據(jù)
實驗2:使用Python語言,通過TensorFlow搭建卷積神經(jīng)網(wǎng)絡,其結(jié)構(gòu)為:輸入層,3個卷積層,3個池化層(均采用最大池化方式),感受野大小均為2×2,1個全連接層,包含625個神經(jīng)元,輸出層包含了10個神經(jīng)元;卷積核大小為3×3,個數(shù)分別為:32,64,128。分別用PCA初始化方法和KPCA-CNN,在MNIST手寫數(shù)字識別上進行100次訓練,結(jié)果如圖5所示。
圖5 準確率
由圖5可以看出,KPCA-CNN比PCA初始化CNN在測試集上的準確率整體高出許多。KPCA初始化網(wǎng)絡訓練約70次就可以達到收斂,而PCA初始化網(wǎng)絡訓練約80次才能達到收斂。
針對卷積神經(jīng)網(wǎng)絡中卷積核初始化的問題,提出了一種基于KPCA的初始化方法。實驗1的結(jié)果說明了KPCA比PCA有更好的非線性特征提取能力。實驗2用KPCA和PCA兩種初始化CNN的方法在MNIST數(shù)據(jù)集上進行訓練,由于KPCA提取了原圖像中大量的非線性特征來初始化卷積核,從而增加了網(wǎng)絡識別準確率,加快了網(wǎng)絡的收斂速度,從而表明KPCA能更有效地初始化卷積神經(jīng)網(wǎng)絡。