周添一,趙 磊
(山東理工大學 計算機科學與技術學院, 山東 淄博 255049)
手寫字體識別屬于計算機視覺中的圖像識別問題,Lecun等[1]首次將卷積神經網絡(Convolutional neural network,CNN)用于手寫數字識別并取得巨大成功[2]。 目前有許多針對卷積神經網絡的研究[3],這些研究從多角度探究如何改進其結構,并取得了如VGG結構[4]等突破性研究成果。 這些研究表明,經過良好設計的卷積神經網絡模型在復雜圖像識別問題上有巨大的優勢。 但深層卷積神經網絡模型訓練需要消耗巨大的計算資源,且模型收斂緩慢。 因此,模型訓練需要借助高性能計算設備,如GPU和計算集群。 手寫字符圖像識別是非常復雜的大規模圖像識別任務。 手寫字符種類繁多,僅常用漢字就多達3 000多個,字符筆畫之間的相互組合產生了復雜的特征。 人與人之間的手寫體差異非常大,且手寫體字符中字符粘連現象普遍存在。 本文基于VGG結構的設計思想,改進用于手寫數字識別的LeNet-5模型,提出用于手寫漢字識別的深層卷積神經網絡模型。
谷歌研究院的Ioffe等[5]提出,通過減輕深層神經網絡訓練時的內部協轉移(internal covariate shift),可以有效提高深度神經網絡訓練速度,并提出了Batch-Normalization(B-N)算法。 本文將B-N算法等多種優化方法應用到卷積神經網絡模型的訓練當中,探究不同優化方法帶來的訓練加速效果,在計算資源有限的情況下(只依靠單CPU主機),重點解決模型以有限的迭代訓練次數快速收斂問題, 以實驗結果為依據,提出可快速收斂的深層卷積神經網絡模型的訓練方法。
本文使用手寫數字數據集和手寫漢字數據集。手寫數字數據集為Mnist數據集[6],該數據集較小,主要用來進行訓練優化時的對比試驗。 手寫漢字數據集為中國科學院自動化研究所開源的手寫中文字庫中的HWDB1.1 脫機字庫[7],該數據集用于訓練深層卷積神經網絡模型。
Mnist手寫數字數據集涵蓋全部的10個阿拉伯數字,每個數字有大概7 000種不同的手寫字體,數據集由70 000張灰度圖組成,數據集信息見表1。數據集又分為訓練集和測試集兩個子集,訓練集包含60 000張圖片,測試集包含10 000張圖片,每張圖片大小均為28×28像素的標準形式。 數據集中的所有圖片以.png格式保存,圖片每個像素占1字節的存儲空間,灰度值均在(0,255)之間。
表1 Mnist數據集
Tab.1 Mnist dataset

Mnist圖片總數量/張圖片大小/像素每個數字樣本數量/個圖片類型訓練集60 00028×286 000灰度圖測試集10 00028×281 000灰度圖
中國科學院自動化研究所公開的HWDB1.1脫機數據庫包含3 755個漢字,具體信息見表2,每個漢字由300個人書寫,每人為每類漢字貢獻一個樣本,整個數據集被分成兩個部分:訓練集和測試集。 訓練集中每個漢字包含240個樣本,測試集包含余下的60個樣本,訓練集和測試集數據沒有交叉。 HWDB1.1數據集以壓縮的方式發布,在使用數據之前需要將其解碼,解碼后的圖片為.png格式,圖片像素灰度值均在(0,255)之間。
受限于單一主機的內存較小,讀取全部數據集進行訓練非常困難。 本文選取HWDB1.1數據集中最常用的100個漢字,使用這100個漢字包含的全部數據集組成本文子集,對卷積神經網絡模型進行訓練,所用子集的具體信息見表2。
Mnist數據集中的圖片均是28×28像素的標準化灰度圖,字符信息處于圖片的中心位置,數據集不需要預處理過程。 解碼后的HWDB1.1數據集中的圖片是大小參差不一的RGB圖片,而卷積神經網絡模型需要接收標準大小的圖片作為輸入,因此在使用數據集對本文模型進行訓練之前,需要對所有數據圖像進行預處理。
表2 HWDB1.1數據集與本文子集
Tab.2 HWDB1.1 dataset and subset of this paper

數據集類別/個訓練集數量/類測試集數量/類全樣本數/個HWDB1.13 755240601 121 749本文子集1002406029 711


(a)原圖(b)標準圖 圖1 數據預處理Fig.1 Data pre-processing
基于VGG結構設計思想構建的深層卷積神經網絡模型,設計時引入B-N等優化方法,有效地加快了模型收斂速度。

(1)
式中yi為B-N算法的最終輸出。
訓練迭代過程中通過指數加權平均的方法,計算近似全部樣本X的均值μpop和方差σ2pop,即:
μpop=θμpop+(1-θ)μ
(2)
σ2pop=θσ2pop+(1-θ)σ2
(3)
式中θ為衰減權重,它控制著歷史迭代過程中的計算值所占的比重。 當模型訓練好后,實際應用中需要讀取單個圖片樣本進行預測,μpop和σ2pop用于此時B-N算法中標準化計算。
Simonyan等[4]主要探究卷積網絡結構中網絡深度對模型識別能力的影響,并根據實驗結果提出了VGG結構。 該結構的設計思想是使用多個較小的卷積核代替原網絡中較大的卷積核,這樣能顯式地增加網絡的深度。 VGG策略如圖2所示,對于14×14的特征圖,使用1個7×7的卷積核進行卷積運算和使用3個3×3的卷積核進行運算,都將得到8×8的輸出圖。 每次使用卷積核進行卷積計算后都進行非線性激活函數映射,這將隱式地增加網絡決策函數的非線性程度,有利于提高網絡的識別效果。

圖2 VGG策略Fig.2 VGG strategy
LeNet-5模型中有兩個卷積層,每個卷積層中使用若干5×5的卷積核。 根據VGG結構的設計策略,手寫漢字識別模型為采用若干個3×3的卷積核的四層卷積網絡結構,每一個卷積層后都設計一個下采樣層,用于減少網絡計算參數,并提高模型健壯性。由于手寫漢字圖片的特征復雜,模型中的每個卷積層應該包含更多的卷積核。 本文設計的四個卷積層中所含卷積核的數量依次為64、128、256、512[4],低維特征在后面的卷積層中將通過卷積計算進行組合,產生更多的復雜高維特征,因此卷積核的數量在四個卷積層中依次遞增。 全連接神經網絡層數依然為三層,每層的神經元依次為1 024、512、100,最后一層神經元數量與最終分類類別數量相同,模型結構如圖3所示。
手寫漢字識別模型接收64×64像素大小的標準灰度圖作為輸入。 C1層有64個深度為1的卷積核,該層有3×3×64+2=578個參數,共輸出64張32×32的特征圖。 C2層有128個深度為64的卷積核,該層有3×3×128×64+2=73 730個參數,共輸出128張16×16的特征圖,每一張特征圖均為C1層輸出的64張特征圖經過卷積計算組合而來,代表提取出的高維特征。 C3層有256個深度為128的卷積核,該層有3×3×256×128+2=294 914個參數,共輸出256張8×8的特征圖,其中每張特征圖都由C2層輸出的128張特征圖組合而來。 C4層有512個深度為256的卷積核,該層有3×3×512×256+2=1 179 650個參數,該層輸出的512張4×4特征圖均由C3層輸出的256張特征圖組合而來。 C4層輸出的512張特征圖在送入F1層之前需要展開成一個512×4×4=8 192維向量,與F1中的1 024個神經元以全連接的方式進行連接,因此F1層共有8 192×1 024+2=8 388 610個參數。 F2層共有1 024×512+2=524 290個參數,output沒有使用B-N算法,因此該層共有512×100+100=51 300個參數。

(a)卷積網絡結構

(b)單個卷積層圖3 手寫漢字識別模型Fig.3 Handwritten Chinese character recognition model
訓練實驗共分為兩部分:第一部分基于Mnist手寫數字集和LeNet-5模型展開,以探究不同優化方法對模型訓練的影響; 第二部分基于HWDB1.1數據子集訓練手寫漢字識別模型。 本文模型的訓練方法與文獻[4]中卷積神經網絡模型的相似,即訓練過程中以基于Softmax構造的損失函數為優化目標,使用基于mini-batch的隨機梯度下降方法,mini-batch大小均設置為100。
實驗共設計了四個不同的訓練版本,用于探究在同一參數設定下不同訓練方法的差異,四個模型的參數設置見表3。 表中A模型和B模型用于檢測不同的梯度下降算法對模型收斂速度的影響,A模型和C模型用于檢測B-N算法的效果,D模型綜合了B模型和C模型的優化方法。 B模型和D模型中動量參數均設置為0.9。 由于手寫數字識別模型結構較為簡單,容易收斂,因此四個模型訓練迭代次數均設置為1 000次。
表3 模型訓練設置
Tab.3 Model training configuration

模型學習率mini-batch優化方法B-NA0.01100隨機梯度下降算法否B0.01100動量隨機梯度下降算法否C0.01100隨機梯度下降算法是D0.01100動量隨機梯度下降算法是
模型的訓練優化算法應用基于mini-batch的動量隨機梯度下降算法,并加入L2正則化和dropout方法以減輕模型過擬合現象,權值衰減率設置為0.000 5,神經元失活概率設置為0.5。
網絡中的初始學習率設定為0.01,模型訓練采用學習率遞減的策略,以保證最終的訓練結果更接近最優解。 設定學習率衰減參數為0.94,每迭代訓練100次進行一次學習率衰減。 模型每迭代訓練25次,計算一次模型在當前mini-batch數據下的識別準確率;每迭代訓練100次,計算一次模型在測試集上識別準確率。 在模型訓練時,應盡可能大地設置訓練循環次數,當觀察到模型在測試集上的識別準確率不再增加后,便停止訓練過程。
實驗設計的四個模型在Mnist測試集上的準確率變化曲線如圖4所示。 圖(a)表示模型A的訓練過程,該模型使用隨機梯度下降算法(Stochastic Gradient Descent, SGD),從圖中可以看出該模型在測試集上的識別準確率在訓練過程中以非常緩慢的速度曲折上升,經過1 000次迭代后準確率只達到了70%。 圖(b)表示的模型B在模型A的基礎上進行了優化,訓練過程中使用動量隨機梯度下降算法(Stochastic Gradient Descent with Momentum, SGD momentum),從圖中可以看出模型經過200次迭代達到80%的識別準確率,在后續的迭代過程中收斂速度減緩,模型識別準確率漸漸達到95%左右,而且在整個訓練過程中,模型B的識別準確率波動相比較于模型A的更小。 圖(c)表示的模型C在模型A的基礎上,加入B-N算法用于優化訓練過程,從圖中可以看出,該模型在200次迭代后達到92%左右的準確率,這比模型B的收斂速度還要快,而且模型C經過1 000次迭代之后,識別準確率能達到97%左右,同樣要高于模型B的,但模型C在訓練前期快速收斂的過程中識別準確率的波動較大。 圖(d)表示的模型D同時使用B-N算法和動量梯度下降算法,從圖中的曲線可以看出該模型在經過200次迭代同樣達到92%的識別準確率,而且在此過程中,模型D相比較于模型C在訓練過程中波動更小,這表明兩種優化方法的優勢都能得到發揮。

(a)模型A:SGD,無B-N標準化

(b)模型B:SGD momentum,無B-N標準化

(c)模型C:SGD,B-N標準化

(d)模型D:SGD momentum,B-N標準化圖4 四種模型準確率變化曲線Fig.4 The accuracy curves of four models
手寫漢字識別模型的訓練經過6 000次迭代后,模型在訓練集上的識別準確率一直保持在95%左右,又經過了1 000次迭代后并沒有很大地提升,此時手動停止訓練過程。 訓練過程中的損失變化曲線如圖5(a)所示,訓練過程中模型在訓練集上的識別準確率如圖5(b)所示,從中可以看出,本文模型中應用B-N等多種優化方法后,在訓練過程中收斂速度很快。

(a) 損失函數變化曲線

(b) 模型在訓練集上識別準確率圖5 手寫漢字識別模型實驗結果 Fig.5 Experiment results of handwritten Chinese character recognition model
訓練結束后,本文使用訓練好的模型在測試集上進行識別測試,測試集有5 989張圖片,最終識別準確率為96.77%。根據CFCA官方給出的數據,人類對漢字手寫體的識別準確率約為96.13%。
綜上所述,可以得出如下結論:
1)基于卷積神經網絡結構設計的識別模型對手寫體識別表現良好。
2)對于同一種結構的模型,不同的優化方法在訓練過程中表現出巨大的差異,不適當的方法可能會導致具有強大識別能力的模型在可接受的時間范圍內仍然處于非常差的識別準確率。 例如在本文試驗中,構建的模型在經過1 000次迭代訓練后最高可以達到97%的識別準確率,但模型A在經過1 000次迭代后只能達到70%的識別準確率。
3)應用B-N算法的深度卷積神經網絡模型在訓練過程中能快速收斂。 本文模型迭代訓練2 000次后,在訓練集上的識別率達到95%左右,迭代計算5 000次后,模型基本達到飽和狀態。