魏爽

摘要:手寫數(shù)字識(shí)別是計(jì)算機(jī)視覺和模式識(shí)別的一個(gè)重要研究方向。該領(lǐng)域的研究有了很大的進(jìn)步,但是仍有待改進(jìn)之處。文章提出了一個(gè)基于主成分分析的單隱層神經(jīng)網(wǎng)絡(luò)分類器,該分類器通過主成分分析減少了特征向量的維度,在保證識(shí)別準(zhǔn)確率的情況下減少了計(jì)算量,提高了分類器性能。使用MNIST數(shù)據(jù)集對(duì)分類器進(jìn)行訓(xùn)練,并驗(yàn)證了其性能。
關(guān)鍵詞:手寫數(shù)字識(shí)別;神經(jīng)網(wǎng)絡(luò);主成分分析;模式識(shí)別;計(jì)算機(jī)視覺
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)01-0058-02
0 引言
手寫識(shí)別是指將在手寫設(shè)備上書寫時(shí)產(chǎn)生的有序軌跡信息化轉(zhuǎn)化為文字的過程,常用來解決計(jì)算機(jī)視覺的圖像處理和模式識(shí)別領(lǐng)域的問題。手寫數(shù)字識(shí)別的研究雖然已經(jīng)有了很大的進(jìn)步[1],但是在實(shí)際使用中,識(shí)別的錯(cuò)誤率和性能仍有待改進(jìn)。通過盡可能多的增加特征的數(shù)量,可以獲得較高的識(shí)別準(zhǔn)確率。但是這樣就會(huì)增加了分類器的復(fù)雜度,計(jì)算量也會(huì)隨之增加。采用多層神經(jīng)網(wǎng)絡(luò)可以取得較高的準(zhǔn)確率,但是計(jì)算量大,訓(xùn)練的時(shí)間長。
利用主成分分析(Principal Component Analysis,PCA)可以減少分類器所需的特征的數(shù)量,進(jìn)而降低分類器復(fù)雜度以及計(jì)算量。PCA通過將具有一定相關(guān)性的變量重新組合,得到一組新的互相無關(guān)的變量來代替原來的變量[2,3]。常用的方法是對(duì)原始變量進(jìn)行線性組合,得到新的變量。新生成的變量就叫做主成分。
通過利用PCA對(duì)訓(xùn)練集數(shù)據(jù)進(jìn)行特征提取,簡化特征向量的維度,將PCA的輸出作為神經(jīng)網(wǎng)絡(luò)分類器的輸入,得到一個(gè)基于PCA的神經(jīng)網(wǎng)絡(luò)分類器模型,如圖1所示。
1 相關(guān)概念
1.1 神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)由互相連接的神經(jīng)元組成。神經(jīng)元通過帶權(quán)重的連接傳遞信號(hào),各個(gè)神經(jīng)元的功能由網(wǎng)絡(luò)結(jié)構(gòu)決定。每個(gè)神經(jīng)元將接收到的其他神經(jīng)元的輸入信號(hào)的總值與該神經(jīng)元的閾值進(jìn)行比較,然后通過激活函數(shù)得到該神經(jīng)元的輸出。神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)就是根據(jù)訓(xùn)練樣本數(shù)據(jù)來調(diào)整神經(jīng)元之間的連接權(quán)重以及各個(gè)功能神經(jīng)元的閾值。
通過使用反向傳播算法訓(xùn)練神經(jīng)網(wǎng)絡(luò),調(diào)整隨機(jī)初始化的權(quán)值,以最小化分類器的誤差。反向傳播神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程分兩步:首先,將訓(xùn)練樣本輸入到輸入層,神經(jīng)網(wǎng)絡(luò)一層一層向前傳播直到輸出層;如果輸出值和預(yù)期的輸出值不同,計(jì)算出輸出誤差,將該誤差反向傳播并調(diào)整各個(gè)連接權(quán)值。
首先,將權(quán)值初始化為-0.5~0.5之間的隨機(jī)值。通過如(1)所示sigmoid激活函數(shù)來比較不同函數(shù)的準(zhǔn)確率。通過前向傳播計(jì)算隱層和輸出層的實(shí)際輸出值,然后通過該輸出值和期望的輸出值計(jì)算誤差梯度。然后從后往前逐層傳播輸出誤差,并用該誤差修正權(quán)值。用訓(xùn)練樣本集中的所有樣本重復(fù)該過程。通過這個(gè)迭代過程,可以最小化誤差。
g(z)= (1)
z=∑ni=1XiWi-θ (2)
其中,Z為激活函數(shù)的輸入值,n為神經(jīng)元個(gè)數(shù),Xi是第i個(gè)神經(jīng)元的輸入值,Wi是連接到神經(jīng)元的第i個(gè)權(quán)值,θ是神經(jīng)元的閾值。
1.2 主成分分析(PCA)
PCA主要用來進(jìn)行特征提取,算法實(shí)現(xiàn)如下:
(1)計(jì)算訓(xùn)練樣本數(shù)據(jù)集X在每一個(gè)維度的平均值u,再將訓(xùn)練樣本的值減去該平均值u;
(2)計(jì)算協(xié)方差矩陣C,C的特征向量V以及C的本征值D,如(3)、(4)所示;
C=X*XT (3)
V-1*CV=D (4)
(3)對(duì)特征向量和特征值進(jìn)行排序,選擇前K個(gè)特征向量。通過訓(xùn)練集乘前K個(gè)特征向量,將原始樣本集X投影到K維空間。
Z=X*V(1:K) (5)
1.3 交叉驗(yàn)證
在模式識(shí)別模型的訓(xùn)練和性能評(píng)估中,驗(yàn)證是重要的一環(huán)。用訓(xùn)練集訓(xùn)練模型,用測試集對(duì)模型進(jìn)行評(píng)估。通過驗(yàn)證可以有效防止模型過擬合和欠擬合的情況發(fā)生。
交叉驗(yàn)證是一種常用的驗(yàn)證方法,其基本思想是重復(fù)使用數(shù)據(jù)。把給定的數(shù)據(jù)集切分為訓(xùn)練集和測試集。再用這些數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練和測試。通過反復(fù)重復(fù)該過程選擇最優(yōu)的模型。交叉驗(yàn)證分為簡單交叉驗(yàn)證、S折交叉驗(yàn)證和留一交叉驗(yàn)證。
S折交叉驗(yàn)證做法如下:隨機(jī)將數(shù)據(jù)集平均分為S個(gè)互不相交的子集,用其中的S-1個(gè)子集作為訓(xùn)練集,用剩下的1個(gè)子集作為測試集;訓(xùn)練、測試數(shù)據(jù)的選擇方式有S種,用這S種數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練、測試分別得到S個(gè)模型;最后在這S個(gè)模型中選擇一個(gè)最優(yōu)的模型。
2 分類器設(shè)計(jì)
該神經(jīng)網(wǎng)絡(luò)分類器采用單隱層神經(jīng)網(wǎng)絡(luò),由三層構(gòu)成:輸入層、隱層以及輸出層。輸入為66個(gè)神經(jīng)元,隱層為99個(gè)神經(jīng)元,輸出層為10個(gè)神經(jīng)元(每一個(gè)神經(jīng)元對(duì)應(yīng)0到9中的一個(gè)數(shù)字)。圖1中PCA的輸出即為該分類器的輸入。隱層的神經(jīng)元是根據(jù)實(shí)驗(yàn),進(jìn)行交叉驗(yàn)證,選擇準(zhǔn)確率最高的結(jié)點(diǎn)數(shù)組成。通過前向傳播算法,對(duì)數(shù)字進(jìn)行分類,輸出到對(duì)應(yīng)的輸出層神經(jīng)元。根據(jù)這10個(gè)輸出神經(jīng)元的值,選擇值最高的神經(jīng)元對(duì)應(yīng)的數(shù)字作為分類器的輸出。
3 實(shí)驗(yàn)及結(jié)果
實(shí)驗(yàn)語言使用Python。Python語言語法簡單,包含了大量的工具包,能快速地實(shí)現(xiàn)各種算法,在科學(xué)計(jì)算、人工智能等各個(gè)領(lǐng)域都有廣泛使用。實(shí)驗(yàn)的數(shù)據(jù)采用MNIST數(shù)據(jù)集。MNIST數(shù)據(jù)集是一個(gè)手寫體數(shù)字的數(shù)據(jù)集,包括了60000個(gè)訓(xùn)練樣本,10000個(gè)測試樣本。每一個(gè)樣本都是一個(gè)28×28個(gè)像素的灰度圖像,即每個(gè)樣本有784個(gè)特征。灰度值的范圍是0-255。
不同的人寫數(shù)字的風(fēng)格不同,寫的大小也不同。因此,在進(jìn)行分類之前要對(duì)原始數(shù)據(jù)進(jìn)行預(yù)處理。首先,要將原始數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理以消除數(shù)據(jù)中的噪音,得到一組同一格式的數(shù)據(jù)集。MNIST的數(shù)據(jù)的每一個(gè)樣本的尺寸都是一致的,通過將每一個(gè)像素的灰度值除以255,就將所有的數(shù)值都?xì)w一化為0~1之間的值。
通過使用PCA將784個(gè)特征壓縮為66個(gè)特征,并將這66個(gè)特征作為神經(jīng)網(wǎng)絡(luò)的輸入。神經(jīng)網(wǎng)絡(luò)的十個(gè)輸出的標(biāo)簽分別為0~9十個(gè)數(shù)字。MNIST數(shù)據(jù)集訓(xùn)練樣本數(shù)量大,實(shí)驗(yàn)采用10-折交叉驗(yàn)證,將60000個(gè)訓(xùn)練樣本且分為10個(gè)子集,每個(gè)子集有6000個(gè)樣本。進(jìn)行10次交叉驗(yàn)證,最后得到10個(gè)模型,具體步驟如下:
(1)開始第i(i=1~10)次實(shí)驗(yàn);(2)初始化分類器的參數(shù):用隨機(jī)數(shù)初始化各個(gè)神經(jīng)元連接的權(quán)值,設(shè)置隱層神經(jīng)元h,迭代次數(shù)i,以及來自PCA輸出值的輸入的數(shù)量K;(3)從54000個(gè)訓(xùn)練樣本中選擇一個(gè)樣本x,并將該樣本傳給分類器;(4)分類器計(jì)算出輸出值Y;(5)如果Y的值和X的期望值,即真實(shí)值y不同,計(jì)算兩者的誤差E=y-Y;(6)將誤差E反向傳給該神經(jīng)網(wǎng)絡(luò)模型并根據(jù)E修正各個(gè)連接權(quán)值;(7)3至5重復(fù)i次;(8)對(duì)54000個(gè)樣本重復(fù)執(zhí)行3至6;(9)用模型對(duì)剩下的6000個(gè)樣本進(jìn)行分類測試;(10)計(jì)算9的準(zhǔn)確率和錯(cuò)誤率;(11)對(duì)10-折交叉驗(yàn)證數(shù)據(jù)重復(fù)2至10,第j次實(shí)驗(yàn)選擇切分的第j個(gè)6000個(gè)樣本子集作為測試集;(12)計(jì)算10-折交叉驗(yàn)證的平均誤差,保存每次的模型參數(shù);(13)對(duì)不同的h、i、K進(jìn)行1-12實(shí)驗(yàn),得到最大準(zhǔn)確率、計(jì)算量最小的模型。
通過使用多個(gè)訓(xùn)練集進(jìn)行訓(xùn)練得到最佳參數(shù)。對(duì)使用PCA和不使用PCA的情況都進(jìn)行了訓(xùn)練實(shí)驗(yàn)并對(duì)比其準(zhǔn)確率的差別。
不使用PCA時(shí),實(shí)驗(yàn)過程與使用PCA的過程一樣,只是輸入的數(shù)量為784,即神經(jīng)網(wǎng)絡(luò)有784個(gè)輸入節(jié)點(diǎn),397個(gè)隱層節(jié)點(diǎn)和10個(gè)輸出節(jié)點(diǎn)。不使用PCA時(shí),迭代1000次,交叉驗(yàn)證平均準(zhǔn)確率98.27%,用時(shí)45011秒。
使用PCA時(shí),將特征向量從784維降低到66維,大大降低了計(jì)算量。通過實(shí)驗(yàn)發(fā)現(xiàn),281個(gè)特征覆蓋了99%的方差,103個(gè)特征覆蓋了95%的方差,53個(gè)特征覆蓋了90%的方差。使用PCA時(shí),迭代1000次,交叉驗(yàn)證平均準(zhǔn)確率98.27%,用時(shí)45011秒。
從實(shí)驗(yàn)結(jié)果分析,選擇了K=66,隱層神經(jīng)元數(shù)量為99,迭代次數(shù)為1000的模型。通過對(duì)比使用PCA和不使用PCA的模型的訓(xùn)練時(shí)間,可以看出在準(zhǔn)確率基本相同的情況下,使用PCA可以減少接近40%的計(jì)算時(shí)間。
經(jīng)過交叉驗(yàn)證,分別選擇了不使用PCA和使用PCA的最佳模型。再用MNIST數(shù)據(jù)集的測試集數(shù)據(jù)對(duì)該模型進(jìn)行驗(yàn)證。為了取得更好的結(jié)果,將隱層的神經(jīng)元數(shù)量分別增加到200、300、500進(jìn)行訓(xùn)練并用這10000個(gè)樣本進(jìn)行驗(yàn)證測試,分別得到了98.2%、98.3%以及98.6%的準(zhǔn)確率。對(duì)于不使用PCA的模型,模型訓(xùn)練的時(shí)間為27109秒。對(duì)于使用PCA的模型,模型訓(xùn)練的時(shí)間為4223秒。在本次實(shí)驗(yàn)中,使用PCA的神經(jīng)網(wǎng)絡(luò)可以減少約80%的計(jì)算時(shí)間,且識(shí)別準(zhǔn)確率更高。
4 結(jié)語
從最后的驗(yàn)證結(jié)果看出,采用PCA的單隱層神經(jīng)網(wǎng)絡(luò)系統(tǒng)識(shí)別準(zhǔn)確率接近98.4%,且大大降低了計(jì)算量,這對(duì)該模型運(yùn)行的平臺(tái)的要求不高,降低了部署成本。約有1.6%的誤分類,這主要是由書寫模糊和噪音造成的。下一步要對(duì)模糊書寫、不同的書寫習(xí)慣的識(shí)別進(jìn)行研究,以便更好地進(jìn)行識(shí)別。此外,噪音消除方面的研究也是下一步研究的一個(gè)方向。
參考文獻(xiàn)
[1] 唐世豪.基于KNN的手寫數(shù)字識(shí)別分析[J].通訊世界,2019,26(01):271-272.
[2] 張持健,劉雪,張賀,張燕習(xí)等.基于PCA和非線性SVC的小數(shù)據(jù)人臉識(shí)別[J].無線電通信技術(shù),2019,45(01):73-77.
[3] 張行文,董元和.基于多層感知機(jī)網(wǎng)絡(luò)的手寫數(shù)字識(shí)別算法[J].電腦知識(shí)與技術(shù),2018,14(32):217-219.
Abstract:Written digit recognition is an important field of computer vision and pattern recognition. Great progresses have been made in this field, but it can still be improved. A digit recognition classifier based on single hidden layer neural network with principle component analysis has been proposed. This classifier reduces the features by using principle component analysis. Computation requirements are reduced without compromising accuracy. Performance of the classifier has been improved. The proposed classifier is trained and examined with MNIST data set.
Key words:written digit recognition; neural network; PCA; pattern recognition; computer vision