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