張志佳, 吳天舒,, 劉云鵬, 方景哲, 李雅紅
(1. 沈陽工業(yè)大學 軟件學院, 沈陽 110870; 2. 中國科學院 沈陽自動化研究所, 沈陽 110016)
手寫體數(shù)字識別已經(jīng)應用在金融稅務、郵寄分類和智能終端產(chǎn)品等諸多領域,目前單模型識別率已達到99.1%左右.由于各應用領域數(shù)據(jù)量急劇增大及人工智能的發(fā)展,對手寫體數(shù)字的識別準確率和識別速度提出了更高的要求.作為模式識別的一個重要方法,面向手寫體數(shù)字識別的神經(jīng)網(wǎng)絡得到了廣泛的應用,其中常見的神經(jīng)網(wǎng)絡應用方法是20世紀提出的Lenet-5卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)[1],但其識別準確率不夠高,難以滿足應用準確度的要求.
以Lenet-5結(jié)構(gòu)為主要代表的卷積神經(jīng)網(wǎng)絡由于當時計算機性能受限,無法對算法參數(shù)和結(jié)構(gòu)給出直觀解釋,一直以來沒有受到學術和工業(yè)界的廣泛關注.隨著機器學習與深度學習的發(fā)展,在2012年Alex及其團隊提出Alexnet,贏得2012年Imagenet冠軍之后,卷積神經(jīng)網(wǎng)絡引起了廣大研究人員的關注[2].近兩年由于計算機硬件性能的不斷提升,卷積神經(jīng)網(wǎng)絡有了突飛猛進的發(fā)展,涌現(xiàn)出大量優(yōu)秀的研究成果.
目前許多卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)在大型數(shù)據(jù)庫上的表現(xiàn)十分優(yōu)異,但這些網(wǎng)絡因為結(jié)構(gòu)較為復雜(如若用在手寫體數(shù)字識別問題上會出現(xiàn)過擬合的現(xiàn)象)導致識別準確率較低.同時若想訓練這些復雜的網(wǎng)絡結(jié)構(gòu)需要性能極高的GPU作為硬件資源,這并不符合手寫體數(shù)字識別這一問題的實際應用背景.
本文針對提高手寫體數(shù)字識別準確率與識別速度這一問題,設計并構(gòu)建出一種連續(xù)非對稱卷積神經(jīng)網(wǎng)絡結(jié)構(gòu),并通過CUDA并行計算和Cudnn加速庫對手寫體數(shù)字識別進行加速.通過試驗對比證明,本文方法的識別準確率和識別速度均有明顯提升.
本文設計一種連續(xù)非對稱卷積結(jié)構(gòu)對輸入圖像進行特征提取,利用Dropout正則化在防止過擬合的同時提升網(wǎng)絡的擬合能力,并采用極限學習機為網(wǎng)絡增加稀疏性.
卷積神經(jīng)網(wǎng)絡能夠有效識別圖像,主要是因為卷積層很適合針對圖像進行特征提取.卷積層擁有局部感知,與人類的視覺神經(jīng)感知結(jié)構(gòu)更為相似.卷積層能否提取得到有效特征直接影響到卷積神經(jīng)網(wǎng)絡對圖像的識別效果.所以在卷積層一般使用多神經(jīng)元結(jié)構(gòu),而多神經(jīng)結(jié)構(gòu)會導致卷積層網(wǎng)絡權值數(shù)量的增大,影響輸入圖像的識別速度.
為了在提取有效特征的同時降低網(wǎng)絡權值的數(shù)量,本文提出了連續(xù)非對稱卷積結(jié)構(gòu)提取輸入圖像的特征,在保證網(wǎng)絡結(jié)構(gòu)提取特征能力的同時可以降低網(wǎng)絡參數(shù)個數(shù).連續(xù)非對稱卷積結(jié)構(gòu)以1×n和n×1為模塊,這一組連續(xù)非對稱卷積結(jié)構(gòu)僅有2×n個參數(shù),而一個n×n的卷積核需要n2個參數(shù).
通過輸入不同尺寸的圖像發(fā)現(xiàn),當特征圖分辨率過高時不適合使用連續(xù)非對稱卷積結(jié)構(gòu),信息丟失嚴重.當特征圖分辨率過低時連續(xù)非對稱卷積結(jié)構(gòu)加速效果不再明顯.在設計網(wǎng)絡結(jié)構(gòu)過程中得出連續(xù)非對稱卷積結(jié)構(gòu)適用范圍的經(jīng)驗值:適合分辨率為10×10~30×30之間的特征圖.
在手寫體數(shù)字識別過程中,數(shù)字圖像的分辨率較低,特征圖尺寸在10×10~30×30之間,所以本文采用連續(xù)非對稱卷積結(jié)構(gòu)應用于手寫體數(shù)字識別問題.
以數(shù)字5的某一樣本作為輸入圖像,經(jīng)由尺寸為1×3的32個卷積核神經(jīng)元組成的卷積后提取得到的特征圖如圖1a所示,再經(jīng)由尺寸為3×1的32個神經(jīng)元卷積核的卷積后得到的特征圖如圖1b所示.圖2為對輸入圖像直接使用由32個神經(jīng)元組成的3×3卷積提取得到的特征圖.
圖1 1×3卷積與3×1卷積特征圖Fig.1 Feature diagrams of 1×3 and 3×1 convolution
圖2 3×3卷積特征圖Fig.2 Feature diagrams of 3×3 convolution
通過對比特征圖1、2可知,使用連續(xù)非對稱卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)提取得到的特征與直接使用傳統(tǒng)對稱卷積結(jié)構(gòu)提取得到的特征圖幾乎一致.當特征圖分辨率較高時,先使用連續(xù)非對稱卷積結(jié)構(gòu)提取圖像特征,可以既減少權值個數(shù),又提升網(wǎng)絡速度,得到有效的特征圖;當特征圖分辨率降低后,特征圖尺寸減小,通過連續(xù)非對稱卷積結(jié)構(gòu)減少權值個數(shù)達到加速的效果不再明顯,可以直接使用傳統(tǒng)對稱卷積結(jié)構(gòu).
為了增大特征提取部分的擬合能力,本網(wǎng)絡結(jié)構(gòu)引入Dropout正則化,在防止過擬合的同時增加網(wǎng)絡的擬合能力.Dropout正則化每次都按照設置的概率關掉該層一部分的感知器,相當于產(chǎn)生一個新的模型,在若干次迭代后做融合,這樣便既滿足了網(wǎng)絡的擬合要求,又防止過擬合現(xiàn)象的發(fā)生.本網(wǎng)絡中Dropout關閉概率通過設計網(wǎng)絡結(jié)構(gòu)過程中的經(jīng)驗值得出.
本網(wǎng)絡結(jié)構(gòu)在特征提取部分采用兩組連續(xù)非對稱卷積結(jié)構(gòu)與一組傳統(tǒng)卷積結(jié)構(gòu)相結(jié)合的方式.第1組連續(xù)非對稱卷積結(jié)構(gòu)每層為32個神經(jīng)元;第2組連續(xù)非對稱卷積結(jié)構(gòu)每層為64個神經(jīng)元,Dropout正則化隨機關閉概率為0.2;第3組為2層連續(xù)對稱卷積結(jié)構(gòu),2層連續(xù)對稱卷積結(jié)構(gòu)每層采用128個神經(jīng)元,Dropout正則化隨機關閉概率為0.4.使用連續(xù)小尺寸對稱卷積結(jié)構(gòu)能提高網(wǎng)絡的非線性表達能力,更好地提取局部特征[3].所有的池化層均采用最大池化的方式,網(wǎng)絡結(jié)構(gòu)參數(shù)如表1所示.
表1 提取特征部分各層參數(shù)Tab.1 Parameters for each layer of extracted feature parts
極限學習機(ELM)是由Huang等提出的一種分類器[4],對于單隱層神經(jīng)網(wǎng)絡,極限學習機可以隨機初始化權重和偏置,并得到相應的隱節(jié)點輸出,極限學習機示意圖如圖3所示.
假設對任意樣本(xj,tj)進行分類,其中xj=[xj1,xj2,…,xjn]T,tj=[tj1,tj2,…,tjn]T,若要輸出的誤差最小,則需
(1)
即
(2)
圖3 極限學習機網(wǎng)絡結(jié)構(gòu)Fig.3 Network structure of extreme learning machine
式中:xj為輸入矩陣;oj為輸出矩陣;tj為期望矩陣;βi為第i個隱層單元的輸出權重;g(x)為激活函數(shù);wi為第i個隱層單元的輸入權重;bi為偏置常數(shù)矩陣.
式(2)可用矩陣表示為
hβ=T
(3)
式中:h為隱藏節(jié)點的輸出;β為輸出權重;T為期望的輸出.
為了使網(wǎng)絡誤差最小,應滿足
(4)
式(4)等價于最小損失函數(shù)
(5)
在ELM算法中,一旦輸入權重wi和隱層的偏置bi被隨機確定,隱層的輸出矩陣h就被唯一確定,訓練單隱層神經(jīng)網(wǎng)絡便可以轉(zhuǎn)化為求解一個線性系統(tǒng).
在提取特征圖后使用ELM可以從有限的輸入數(shù)據(jù)中學習到相對稀疏的特征,本網(wǎng)絡結(jié)構(gòu)利用ELM對經(jīng)過特征提取得到的特征圖進行分類.在經(jīng)過ELM后連接兩層全連接層和Relu激活函數(shù),增大網(wǎng)絡的擬合能力,再利用Softmax進行多分類.
由于采用連續(xù)非對稱卷積神經(jīng)網(wǎng)絡結(jié)構(gòu),使得網(wǎng)絡結(jié)構(gòu)深度增加,在訓練過程中容易產(chǎn)生梯度消失和梯度爆炸的現(xiàn)象,所以引入了BatchNormalization正則化和MSRA初始化,防止梯度消失和梯度爆炸現(xiàn)象的發(fā)生[5].
BatchNormalization正則化通過修改網(wǎng)絡每層的輸出結(jié)果,使輸出滿足高斯分布,防止梯度消失和梯度爆炸的出現(xiàn).
首先對輸出結(jié)果根據(jù)每一維度的均值和方差進行歸一化處理,即
(6)
對經(jīng)過修正的輸出特征向量做線性變換,使輸出特征向量在滿足高斯分布的同時保留原有的輸出信息,即
(7)
式中:yk為經(jīng)過線性變換的輸出;rk和αk由BP反向傳播在訓練過程中確定.
本網(wǎng)絡在各卷積層和全連接層后加入BatchNormalization正則化,保證各卷積層和全連接層可以通過反向傳播學習得到有效的權重.
本網(wǎng)絡通過對比三種初始化方法:高斯分布的隨機數(shù)初始化、哈維爾初始化和MSRA初始化后,選擇MSRA初始化解決由連續(xù)非對稱卷積導致網(wǎng)絡出現(xiàn)梯度消失的現(xiàn)象.
1) 隨機數(shù)初始化.由于采用連續(xù)非對稱卷積結(jié)構(gòu)增大網(wǎng)絡結(jié)構(gòu)深度,如果以高斯分布的隨機數(shù)進行初始化將會出現(xiàn)梯度彌散或者梯度爆炸的現(xiàn)象.例如采用均值為0,方差為1的高斯分布做初始化,隨著前向傳播過程中隱層數(shù)目的增多,方差不斷減小,最后趨近于0,將導致所有神經(jīng)元輸出完全相等,網(wǎng)絡結(jié)構(gòu)整體失去活力.
2) 哈維爾初始化.若采用哈維爾初始化依舊面臨梯度彌散的問題,哈維爾初始化針對深層網(wǎng)絡存在梯度消失和梯度爆炸的現(xiàn)象,將權重的初始化與該權重所在層的神經(jīng)元個數(shù)關聯(lián)起來,神經(jīng)元個數(shù)應與權重始化的值成反比.但當深層網(wǎng)絡使用Relu激活函數(shù)時,若Relu激活函數(shù)的輸入小于0,將會發(fā)生截斷,所以權重的方差依舊在不斷衰減.
3)MSRA初始化.MSRA初始化是在哈維爾初始化的基礎上,認為該層原神經(jīng)元個數(shù)只有真實數(shù)目的一半,因此防止了Relu激活函數(shù)對小于0的輸入產(chǎn)生截斷.
CUDA是Nvidia基于GPU推出的并行計算架構(gòu),由多個線程組成一個線程塊,再由多個線程塊組成一個柵格[6].使用CUDA訓練網(wǎng)絡結(jié)構(gòu)過程如圖4所示.
圖4 CUDA并行計算示意圖Fig.4 Schematic diagram of CUDA parallel computing
Cudnn是Nvidia針對深度神經(jīng)網(wǎng)絡設計的GPU加速庫,被廣泛應用于各種深度學習開源框架中.CUDA與Cudnn對卷積神經(jīng)網(wǎng)絡的加速主要體現(xiàn)在對卷積運算的加速.卷積神經(jīng)網(wǎng)絡主要應用在圖像領域,而圖像本身數(shù)據(jù)量較大,對圖像進行卷積運算就需要花費大量的時間;而Cudnn能夠?qū)⑦@些復雜的矩陣運算轉(zhuǎn)化為子矩陣乘法運算,并且利用CUDA進行多線程運算,從而實現(xiàn)對卷積的并行加速[7].
假設當前卷積層為l,每次輸入的圖像為C個顏色通道,分辨率為W×H,并以M個圖像樣本批量隨機訓練,卷積層記為D∈RWHMC.設當前卷積層由K個神經(jīng)元組成,卷積模板尺寸為S×Q,偏置為b,卷積層記為F∈RKCQS.卷積層輸出M∈iNKPQ可表示為
(8)
δ=av+S-s-1-w
(9)
φ=pu+Q-q-1-h
(10)
式中:u,v分別為垂直與豎直方向卷積的移動步長;h,w分別為卷積補0的長度和寬度;p,a分別為卷積輸出的長和寬.
由三重嵌套求和公式可知,卷積計算量極大,所以將卷積操作轉(zhuǎn)換成若干子矩陣相乘.將輸入D劃分為若干個子矩陣Dm,將卷積模板重新組裝成矩陣Fm,這樣三重嵌套求和運算便轉(zhuǎn)換為矩陣Fm和若干個子矩陣Dm相乘,達到了加速計算的目的[8].
通過調(diào)用Cudnn并行計算加速庫,使前向傳播用時明顯縮短,對比在GPU下前向傳播速度有明顯提升.
本文采用的硬件平臺是Intel(R)Core(R)CPUI5-4570,3.2GHz,4核處理器,NVIDIA(R)GTX(R) 1050TI.軟件配置為Ubuntu14.04版64位操作系統(tǒng),利用了Caffe深度學習開源框架,CUDA并行計算庫,Cudnn深度神經(jīng)網(wǎng)絡加速庫,OpenBLAS矩陣運算加速庫,Anaconda的Python計算環(huán)境發(fā)行版及opencv3.0計算機視覺庫.
采用MNIST手寫數(shù)字數(shù)據(jù)庫進行訓練和測試.MNIST為Google實驗室和紐約大學建立的手寫數(shù)字數(shù)據(jù)庫,包括了0~9這10個數(shù)字,是手寫體字符識別這一領域廣泛使用的標準庫.MNIST包含訓練集6萬張,測試集1萬張,每張圖像大小均為28×28,數(shù)據(jù)庫樣本圖像如圖5所示.
圖5 MNIST部分樣本圖像Fig.5 MNIST partial sample image
將本文提出的連續(xù)非對稱卷積網(wǎng)絡結(jié)構(gòu)與Lenet-5網(wǎng)絡結(jié)構(gòu)在MNIST數(shù)據(jù)集中進行識別準確率與識別速度的對比實驗,本文提出的網(wǎng)絡結(jié)構(gòu)參數(shù)如表2所示,實驗結(jié)果如表3所示.
表3中前4項網(wǎng)絡類型是針對本文提出的網(wǎng)絡結(jié)構(gòu)進行試驗,后2項是對Lenet-5網(wǎng)絡結(jié)構(gòu)的試驗結(jié)果.通過對比可以發(fā)現(xiàn),相比Lenet-5,本文提出的連續(xù)非對稱卷積與極限學習機結(jié)合的結(jié)構(gòu)識別準確率和識別速度都有提升;相比連續(xù)對稱卷積結(jié)構(gòu),達到了相同的識別準確率并且提升了識別速度.相同的網(wǎng)絡結(jié)構(gòu)在使用CUDA與Cudnn情況下,由于GPU運算精度更高,識別準確率也會有部分提升.
表2 網(wǎng)絡結(jié)構(gòu)參數(shù)Tab.2 Parameters for network structure
表3 實驗對比結(jié)果Tab.3 Experimental comparison results
將本文提出的連續(xù)非對稱卷積與極限學習機結(jié)合的結(jié)構(gòu)與其它在MNIST數(shù)據(jù)庫上進行測試的手寫體數(shù)字識別算法進行對比,對比算法包括:基于統(tǒng)計和結(jié)構(gòu)特征的手寫體數(shù)字識別[9]、基于自適應深度置信網(wǎng)絡的圖像分類[10]及基于原型生成技術的手寫體數(shù)字識別[11],各算法識別準確率如表4所示.
表4 MNIST數(shù)據(jù)庫中算法比對Tab.4 Algorithms tested on MNIST database
通過對比各算法在MNIST上測試的準確率可知,本文提出的連續(xù)非對稱卷積與極限學習機結(jié)合的結(jié)構(gòu)在準確率上有明顯提升.
雖然本方法有較高的識別準確率,但是還有部分歧義圖像仍未能正確識別,例如數(shù)字4和數(shù)字6之間的歧義如圖6所示.
圖6 測試集中存在歧義的圖像Fig.6 Ambiguous images in testing set
選取圖6中圖像進行測試,表5為網(wǎng)絡結(jié)構(gòu)判斷輸入圖像中的數(shù)字分別為0~9的概率.
表5 圖像中的數(shù)字分別為0~9的概率Tab.5 Probability of numbers from 0 to 9 in image
由于網(wǎng)絡判斷最大輸出概率為最終識別結(jié)果,所以本網(wǎng)絡判斷出了錯誤結(jié)果,將圖像中的數(shù)字識別為4.通過觀察表5中數(shù)據(jù)概率可知,輸出的9個數(shù)字中,數(shù)字0、4和6的概率都明顯高于其它數(shù)字,其中數(shù)字4和6的概率最為相近,這也符合肉眼觀察圖像的結(jié)果.若要正確識別歧義圖像,簡單有效的方法是使用模型融合,利用投票原則判斷歧義圖像.
本文提出了一種針對手寫體數(shù)字識別的連續(xù)非對稱卷積神經(jīng)網(wǎng)絡結(jié)構(gòu),并結(jié)合極限學習機、Dropout正則化和MSRA初始化提升了識別準確率.通過在MNIST數(shù)據(jù)集的測試結(jié)果表明,本結(jié)構(gòu)的識別準確率達到了99.62%.未來將利用深度可分離卷積,通過剪枝與量化的方式對本網(wǎng)絡結(jié)構(gòu)進行進一步壓縮與加速,使壓縮后的網(wǎng)絡結(jié)構(gòu)可在嵌入式設備上運行.