李建新
(廣州工商學(xué)院 計算機(jī)科學(xué)與工程系,廣州528138 )
目前,手寫體數(shù)字識別是人工智能機(jī)器學(xué)習(xí)領(lǐng)域眾多研究者關(guān)注的一個熱點(diǎn),廣泛應(yīng)用于公安、稅務(wù)、交通、金融、教育等行業(yè)的實踐活動中。在實際應(yīng)用中,對手寫數(shù)字單字識別率的要求比手寫普通文字識別要苛刻許多,識別精度需要達(dá)到更高的水平。由于手寫數(shù)字識別沒有文字識別那樣的上下文,不存在語意的相關(guān)性,而數(shù)據(jù)中的每一個數(shù)字又至關(guān)重要。因此,提高手寫數(shù)字識別率,成為人工智能的重要研究領(lǐng)域。
人工神經(jīng)網(wǎng)絡(luò)是一種類似于大腦神經(jīng)突觸聯(lián)接的結(jié)構(gòu),進(jìn)行信息處理的數(shù)學(xué)模型,具有學(xué)習(xí)和記憶功能,可以讓神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)各個模式類別中的大批量訓(xùn)練樣本,記憶各個模式類別中的樣本特征。在識別樣本時,將逐個與記憶中各模式類別的樣本特征相比較,從而確定樣本所屬類別。人工神經(jīng)網(wǎng)絡(luò)通過學(xué)習(xí)調(diào)整內(nèi)部大量節(jié)點(diǎn)之間相互連接的關(guān)系,可獲得眾多優(yōu)化的模型參數(shù)。
手寫體數(shù)字識別系統(tǒng)由輸入、預(yù)處理、識別等環(huán)節(jié)組成,系統(tǒng)架構(gòu)如圖1 所示。
輸入環(huán)節(jié)包括MNIST 手寫體數(shù)據(jù)集輸入和用戶預(yù)測圖片里的手寫體數(shù)字;預(yù)處理環(huán)節(jié)主要指用戶手寫體數(shù)字預(yù)測圖片的預(yù)處理;識別環(huán)節(jié)包括卷積神經(jīng)網(wǎng)絡(luò)、分類識別器、損失函數(shù)和優(yōu)化器。卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)數(shù)字手寫體0~9 特征提取,分類識別是手寫體數(shù)字識別最關(guān)鍵的部分。經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)提取來的特征被送到分類器中,對其進(jìn)行分類識別。分類識別器由softmax 完成,softmax 得到當(dāng)前樣例中屬于不同種類的概率分布情況。
優(yōu)化器在神經(jīng)網(wǎng)絡(luò)訓(xùn)練和測試過程中,根據(jù)計算結(jié)果與損失函數(shù)要求,調(diào)節(jié)模型可變參數(shù),讓神經(jīng)網(wǎng)絡(luò)參數(shù)盡快達(dá)到理想誤差范圍。
訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)時,需要大量的數(shù)據(jù)、設(shè)置卷積的層數(shù)、卷積核大小、池化的方式(最大、平均)、損失函數(shù)、設(shè)置目標(biāo)(如:手寫數(shù)字的識別,輸出一個10 維向量)等,讓卷積神經(jīng)網(wǎng)絡(luò)通過不斷的訓(xùn)練更新參數(shù),向設(shè)置的目標(biāo)靠近,最后可以通過這些參數(shù)來預(yù)測樣本。
圖1 手寫體數(shù)字識別系統(tǒng)組成Fig.1 Composition of handwritten digit recognition system
通常情況下,假設(shè)樣本由K個類組成,共有m個,則數(shù)據(jù)集可由式(1)表示:
式中,x(i)∈R(n +1);y(i)∈{1,2,…,K},n +1 為特征向量x的維度。
MNIST 是機(jī)器學(xué)習(xí)中的一個數(shù)據(jù)集,包含0~9的不同人手寫數(shù)字圖片。數(shù)據(jù)集由60 000 個手寫數(shù)字訓(xùn)練樣本和10 000 個手寫數(shù)字測試樣本組成,每個樣本是一張28 * 28 像素的灰度手寫數(shù)字圖片。則MNIST 數(shù)據(jù)集的訓(xùn)練集m=60 000,n +1=784,K=10、MNIST 數(shù)據(jù)集的測試集m=10 000,n+1=784,K=10;分別由式(2)、式(3)表示為:
機(jī)器學(xué)習(xí)模型設(shè)計時,將提供大量的數(shù)據(jù)以訓(xùn)練一個手寫體數(shù)字的機(jī)器學(xué)習(xí),所得到的模型參數(shù),最終用于預(yù)測用戶圖片里面的數(shù)字。
卷積神經(jīng)網(wǎng)絡(luò)是系統(tǒng)的核心部分,是由輸入層、多個卷積層、多個池化層、多個全連接層以及輸出組成的多層感知器。卷積層為局部連接,用于提取圖像特征;池化層用于進(jìn)一步降低輸出參數(shù)數(shù)量,提高了模型的泛化能力;全連接層進(jìn)行特征關(guān)系和權(quán)重值計算,完成分類處理。手寫體數(shù)字識別卷積神經(jīng)網(wǎng)絡(luò)的組成示意如圖2 所示。
在TansorFlow 中卷積層、池化層和全連接層部分代碼如下:
圖2 手寫體數(shù)字識別卷積神經(jīng)網(wǎng)絡(luò)組成Fig.2 Composition of convolution neural network for handwritten digit recognition
為了提高卷積神經(jīng)網(wǎng)絡(luò)對手寫體數(shù)字識別的準(zhǔn)確率,可以通過多種途徑來實現(xiàn)。如:增加卷積層數(shù)量,以便進(jìn)行更高層次的特征提??;改變各卷積層的卷積核大小,以便調(diào)整特征提取范圍,或改變卷積步長;增加卷積層中卷積核的數(shù)量,意味著提取特征圖的數(shù)量(一個卷積核卷積出來一個特征圖),也就意味著可以從更多的角度提取原圖的特征,避免視角單一,卷積出來多個特征圖后要重新組織輸出形態(tài),用以適應(yīng)下一層的輸入要求。
分類器采用Softmax 回歸算法,該算法能將二分類的Logistic 回歸問題擴(kuò)展至多分類。Softmax 回歸算法對于給定的輸入值x(i),輸出的K個估計概率可由式(4)[1]表示:
其中,K為類別的個數(shù),和bi為第i個類別對應(yīng)的權(quán)重向量和偏移向量,在TensorFlow 中用張量表示。
上述Softmax 回歸算法在TansorFlow 中的相應(yīng)代碼如下:
通常采用的損失函數(shù)“交叉熵”(cross -entropy),如式(5)[2]所示:
式中,y為預(yù)測概率的分布,y' 為實際樣本的標(biāo)簽值。
TensorFlow 中提供了8 種優(yōu)化器,即BGD、SGD、Momentum、Nesterov Momentum、Adagrad、Adadelta、RMSprop 和Adam,模型訓(xùn)練一般采用梯度下降優(yōu)化器。
在TansorFlow 中,損失函數(shù)、學(xué)習(xí)率為learning_rate 的優(yōu)化器代碼[2]如下:
由以上系統(tǒng)組成可知,MNIST 數(shù)據(jù)集、卷積神經(jīng)網(wǎng)絡(luò)與分類器、損失函數(shù)和優(yōu)化器是人工神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)模型訓(xùn)練機(jī)制的組成部分。
通過對MNIST 數(shù)據(jù)集的訓(xùn)練和測試,模型參數(shù)達(dá)到要求并予以保存。在用戶實際應(yīng)用時可以導(dǎo)入模型參數(shù)對用戶手寫數(shù)字識別。由于MNIST 數(shù)據(jù)集手寫數(shù)字以張量形式存在,其形態(tài)為1 維[784],而用戶手寫數(shù)字可以各種像素的數(shù)字圖像存在,故用戶手寫數(shù)字在識別前需要將其圖像進(jìn)行預(yù)處理,需與MNIST 數(shù)據(jù)集28×28 像素達(dá)到一致。
預(yù)處理對于系統(tǒng)設(shè)計非常重要,經(jīng)過預(yù)處理后的圖像才能進(jìn)行特征提取。因此,預(yù)處理的好壞直接影響著識別結(jié)果。因?qū)氲狞c(diǎn)陣圖形大小各異,需將點(diǎn)陣圖形壓縮成與MNIST 數(shù)據(jù)集中的大小相一致,調(diào)整用戶手寫數(shù)字灰度圖像形態(tài)為[28,28];隨后將用戶手寫數(shù)字圖像轉(zhuǎn)換為灰度圖像?;叶葓D像像素值純黑色的灰度級別為0,純白色的灰度級別為255,介入兩者之間還有許多灰度級別。由于MNIST 數(shù)據(jù)集圖片像素純白色~純黑色采取正規(guī)化的0~1 區(qū)間,故用戶手寫數(shù)字灰度圖像也須進(jìn)一步正規(guī)化到0~1 區(qū)間。用戶手寫數(shù)字預(yù)處理流程如圖3 所示。
圖3 用戶手寫數(shù)字預(yù)處理流程Fig.3 Preprocessing process and code of handwritten digits
經(jīng)處理后的數(shù)字圖片格式與MNIST 數(shù)據(jù)集的圖片格式相同,則可將圖片輸入到網(wǎng)絡(luò)中進(jìn)行識別。
對用戶手寫數(shù)字圖像進(jìn)行檢測的卷積神經(jīng)網(wǎng)絡(luò),與MNIST 數(shù)據(jù)集的訓(xùn)練和測試的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)相同。模型參數(shù)為MNIST 數(shù)據(jù)集的訓(xùn)練與測試得到并保存模型參數(shù),主要是卷積神經(jīng)網(wǎng)絡(luò)的各層參數(shù)。只要恢復(fù)、使用之前保存的模型參數(shù),用這些已知的參數(shù)構(gòu)建卷積神經(jīng)網(wǎng)絡(luò),通過其將用戶手寫數(shù)字圖像從卷積神經(jīng)網(wǎng)絡(luò)輸入,以完成到輸出的映射,獲得相應(yīng)數(shù)字。
TensorFlow 是一個開源的機(jī)器學(xué)習(xí)框架,在圖形分類、音頻處理、推薦系統(tǒng)和自然語言處理等場景下有著豐富的應(yīng)用,并提供了多種編程語言的接口。本系統(tǒng)建立在TensorFlow 平臺上,分二部分完成:
2.3.1 建立模型參數(shù)
(1)導(dǎo)入MNIST 數(shù)據(jù)集,并構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)模型;
(2)對學(xué)習(xí)模型進(jìn)行訓(xùn)練和測試;
(3)評價學(xué)習(xí)模型是否為最佳模型參數(shù),是則保存模型參數(shù),否則修改學(xué)習(xí)模型,繼續(xù)執(zhí)行(2)、(3)步驟。
2.3.2 用戶手寫數(shù)字識別
(1)數(shù)字預(yù)處理,以使用戶手寫數(shù)字與MNIST數(shù)據(jù)集一致;
(2)使用保存的模型參數(shù)構(gòu)建用戶手寫數(shù)字識別模型;
(3)用戶手寫數(shù)字輸入手寫數(shù)字識別模型,得到用戶手寫數(shù)字輸出。
實驗分為無卷積神經(jīng)網(wǎng)絡(luò)和有卷積神經(jīng)網(wǎng)絡(luò)。實驗以損失函數(shù)、訓(xùn)練數(shù)據(jù)準(zhǔn)確率和測試數(shù)據(jù)準(zhǔn)確率為參考,見表1。
表1 訓(xùn)練損失值與數(shù)據(jù)準(zhǔn)確率Tab.1 Training loss and data accuracy
由表1 中上半部數(shù)據(jù)可知,隨著學(xué)習(xí)率的增加,損失函數(shù)值的減少,訓(xùn)練準(zhǔn)確率和測試準(zhǔn)確率均增加,但學(xué)習(xí)率增加過大。如,學(xué)習(xí)率為1.0 和1.5 時,導(dǎo)致數(shù)據(jù)準(zhǔn)確率發(fā)生振蕩。
由表1 中下半部數(shù)據(jù)可知,當(dāng)學(xué)習(xí)率小于0.65時,前20 輪訓(xùn)練損失函數(shù)收斂很快,訓(xùn)練準(zhǔn)確率和測試準(zhǔn)確率很快達(dá)到0.98 以上,最高為1。學(xué)習(xí)率過大,如0.75,損失函數(shù)找不到最小點(diǎn),無法收斂,甚至出現(xiàn)未定義或不可表示的值。
通過實驗比較了無卷積和卷積在神經(jīng)網(wǎng)絡(luò)中的作用,對學(xué)習(xí)訓(xùn)練參數(shù)、優(yōu)化器也做了比較,取得了相應(yīng)數(shù)據(jù),學(xué)習(xí)率大小對無卷積神經(jīng)網(wǎng)絡(luò)影響為引起數(shù)據(jù)準(zhǔn)確率發(fā)生振蕩,對有卷積神經(jīng)網(wǎng)絡(luò)影響為引起損失函數(shù)找不到最小點(diǎn),數(shù)據(jù)準(zhǔn)確率大幅度下降。在學(xué)習(xí)率大小合適條件下有卷積神經(jīng)網(wǎng)絡(luò)的損失值和學(xué)習(xí)率均明顯優(yōu)于無卷積神經(jīng)網(wǎng)絡(luò),實驗結(jié)果挖掘了神經(jīng)網(wǎng)絡(luò)對圖形內(nèi)在的特性。
本研究是手寫體數(shù)字識別系統(tǒng)開發(fā)的組成部分,其成果對整個系統(tǒng)開發(fā)工作奠定了很好的基礎(chǔ)。