夏少杰,項(xiàng) 鯤
(浙江工業(yè)大學(xué),浙江 杭州 310012)
數(shù)字識(shí)別的應(yīng)用十分廣泛,尤其是手寫數(shù)字識(shí)別,由于書寫的隨意性很大,造成在識(shí)別過程中具有一定的難度。隨著近幾年人工智能的火熱發(fā)展,對(duì)于數(shù)字識(shí)別提出了很多方法,主要有統(tǒng)計(jì)、神經(jīng)網(wǎng)絡(luò)和聚類分析等,本文采用的方法是BP神經(jīng)網(wǎng)絡(luò)。這是一種前饋反向型神經(jīng)網(wǎng)絡(luò),具有并行處理信息、自組織、自學(xué)習(xí)信息等優(yōu)點(diǎn)。
Mnist數(shù)據(jù)集是一個(gè)手寫體數(shù)據(jù)集,里面包含了大量的手寫體圖像,如圖1所示。
圖1 Mnist數(shù)據(jù)集示例
整個(gè)數(shù)據(jù)集包含了60000行的訓(xùn)練數(shù)據(jù)集(mnist.train)和 10000 行的測(cè)試數(shù)據(jù)集(mnist.test)。每張圖片包含28×28個(gè)像素,將此數(shù)組展開成一個(gè)向量,長(zhǎng)度是28×28=784。因此在Mnist訓(xùn)練數(shù)據(jù)集中mnist.train.images是一個(gè)形狀為 [60000,784]的張量(如圖2所示),第一個(gè)維度數(shù)字用來索引圖片,第二個(gè)維度數(shù)字用來索引每張圖片中的像素點(diǎn)。圖片里的某個(gè)像素的強(qiáng)度值介于0~1之間。
圖2 Mnist訓(xùn)練集數(shù)據(jù)格式
Mnist數(shù)據(jù)集的標(biāo)簽是介于0~9的數(shù)字,把標(biāo)簽轉(zhuǎn)化為“one-hot vectors”,一個(gè)one-hot向量除了某一位數(shù)字是1以外,其余維度數(shù)字都是0,比如標(biāo)簽 0 將表示為([1,0,0,0,0,0,0,0,0,0]),標(biāo)簽 3將表示為([0,0,0,1,0,0,0,0,0,0])。 因此,mnist.train.labels是一個(gè)[60000,10]的數(shù)字矩陣。如圖3所示。
圖3 Mnist訓(xùn)練集標(biāo)簽數(shù)據(jù)格式
人工神經(jīng)網(wǎng)絡(luò)是20世紀(jì)80年代在生物神經(jīng)系統(tǒng)研究的啟發(fā)下發(fā)展起來的一種信息處理方法,是由大量簡(jiǎn)單神經(jīng)元所構(gòu)成的非線性動(dòng)力學(xué)系統(tǒng),它處理信息的方式類似于動(dòng)物大腦的處理方式,即是一種利用神經(jīng)元之間的突起來進(jìn)行信息傳遞的數(shù)學(xué)模型。國(guó)際著名的神經(jīng)網(wǎng)絡(luò)專家、第一個(gè)計(jì)算機(jī)公司的創(chuàng)始人和神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)技術(shù)的研究領(lǐng)導(dǎo)人Hecht-Nielson給神經(jīng)網(wǎng)絡(luò)的定義是:“神經(jīng)網(wǎng)絡(luò)是一個(gè)以有向圖為拓?fù)浣Y(jié)構(gòu)的動(dòng)態(tài)系統(tǒng),它通過對(duì)連續(xù)或斷續(xù)式的輸入作狀態(tài)響應(yīng)而進(jìn)行信息處理”[1]。
BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)(簡(jiǎn)稱 BP 網(wǎng)絡(luò)),是一種反饋型學(xué)習(xí)網(wǎng)絡(luò):輸入層各神經(jīng)元負(fù)責(zé)接收來自外界的輸入信息,并傳遞給中間層各神經(jīng)元;中間層是內(nèi)部信息處理層,負(fù)責(zé)信息變換,根據(jù)信息變化能力的需求,中間層可以設(shè)計(jì)為單隱含層或多隱含層結(jié)構(gòu),最后一個(gè)隱含層傳遞到輸出層各神經(jīng)元的信息;經(jīng)進(jìn)一步處理后完成一次學(xué)習(xí)的正向傳播處理過程,由輸出層向外界輸出信息處理結(jié)果。當(dāng)輸出值和實(shí)際值之間的誤差大于預(yù)定誤差值時(shí),網(wǎng)絡(luò)進(jìn)入誤差的反向傳播階段,誤差通過輸出層,按誤差梯度下降的方式修正各層權(quán)值,向隱含層、輸入層逐層反傳[2]。周而復(fù)始的信息正向傳播和誤差反向傳播過程,是各層權(quán)值不斷調(diào)整的過程,也是神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)訓(xùn)練的過程,這個(gè)過程一直持續(xù)進(jìn)行,直至到網(wǎng)絡(luò)輸出的誤差減少到預(yù)定誤差范圍內(nèi),或訓(xùn)練次數(shù)達(dá)到預(yù)先設(shè)定值[3]。
2.2.1 人工神經(jīng)元模型
神經(jīng)網(wǎng)絡(luò)的基本信號(hào)處理單元是人工神經(jīng)元,是對(duì)生物神經(jīng)元的近似仿真。其模型如圖4所示,表示了一種簡(jiǎn)化的人工神經(jīng)元結(jié)構(gòu)。其輸入輸出關(guān)系可描述為[4]:
式中,xj(j=1,2,…,n)是從其他細(xì)胞的輸出傳來的輸入信號(hào);θ為閾值;權(quán)系數(shù)wj表示連接的強(qiáng)度,就像生物細(xì)胞中突觸的負(fù)載,數(shù)值為正表示激活,數(shù)值為負(fù)表示抑制;f(I)稱為激活函數(shù)。
圖4 神經(jīng)元結(jié)構(gòu)模型
2.2.2 激活函數(shù)
激活函數(shù)是神經(jīng)網(wǎng)絡(luò)中的重要組成部分,由于線性模型的表達(dá)能力不足,采用激活函數(shù)可以導(dǎo)入非線性因素,使神經(jīng)網(wǎng)絡(luò)具有更好的表達(dá)能力。常見的激活函數(shù)如圖5所示。
圖5 激活函數(shù)
2.2.3 BP算法
誤差反向傳播算法(back-propagation algorithm)簡(jiǎn)稱為 BP算法[5,6]。BP網(wǎng)絡(luò)含有輸入層節(jié)點(diǎn)、輸出層節(jié)點(diǎn)和隱含層節(jié)點(diǎn)。其激活函數(shù)通常選用連續(xù)可導(dǎo)的Sigmoid函數(shù):
在系統(tǒng)辨識(shí)中,神經(jīng)網(wǎng)絡(luò)模型通常選用多層并行網(wǎng)的形式,即多層BP網(wǎng)。它的工作原理如下:輸入信號(hào)經(jīng)過輸入層后的輸出信號(hào),傳遞給隱含層的節(jié)點(diǎn),通過激活函數(shù)作用后,把隱含層節(jié)點(diǎn)的輸出信號(hào)傳遞給輸出層接點(diǎn),通過激發(fā)函數(shù)作用后產(chǎn)生出輸出信號(hào),即為神經(jīng)網(wǎng)絡(luò)模型的輸出ym。如果輸出層的輸出有較大誤差,則會(huì)將誤差信號(hào)反饋到輸入端。按照誤差信號(hào)修改各層權(quán)值,當(dāng)過程的輸出yp與神經(jīng)網(wǎng)絡(luò)模型的輸出ym之間的誤差小于一定值時(shí),停止辨識(shí)。
本文采用包含隱含層的BP網(wǎng)絡(luò)對(duì)數(shù)字識(shí)別進(jìn)行仿真。由于樣本訓(xùn)練矩陣是784維的,設(shè)定輸入層有784個(gè)神經(jīng)元,通過反復(fù)試驗(yàn),隱含層設(shè)計(jì)兩層,第一層包含500個(gè)神經(jīng)元,第二層包含300個(gè)神經(jīng)元。對(duì)于輸出層,由于需要識(shí)別0~9共10個(gè)字符,輸出層設(shè)為10個(gè)神經(jīng)元。根據(jù)Mnist數(shù)據(jù)集的標(biāo)簽,輸出端采用“one hot”編碼,例如,對(duì)于輸出結(jié)果“4”,它的輸出端結(jié)果為(0,0,0,0,1,0,0,0,0,0)。
因此,本文設(shè)計(jì)的 BP網(wǎng)絡(luò)為 784×500×300×10的結(jié)構(gòu)。按照BP網(wǎng)絡(luò)的一般設(shè)計(jì)原則,中間層神經(jīng)元的傳遞函數(shù)為雙曲正切函數(shù)tanh。由于輸出已被歸一化到區(qū)間[0,1]中,因此輸出層神經(jīng)元的傳遞函數(shù)可以設(shè)定為softmax函數(shù)。
采用以上網(wǎng)絡(luò)結(jié)構(gòu)對(duì)Mnist數(shù)據(jù)集進(jìn)行訓(xùn)練得到的測(cè)試結(jié)果如圖6所示。
圖6 Mnist測(cè)試集測(cè)試結(jié)果
對(duì)于本文構(gòu)建的神經(jīng)網(wǎng)絡(luò),可以從以下幾個(gè)方向作進(jìn)一步優(yōu)化。
(1)初始化權(quán)值
一般情況下構(gòu)建神經(jīng)網(wǎng)絡(luò)采用隨機(jī)采樣點(diǎn)的初始化方式,但是如果輸入神經(jīng)元個(gè)數(shù)很多的情況下采用正態(tài)分布的隨機(jī)數(shù)初始化可以有效加速網(wǎng)絡(luò)的收斂。
(2)針對(duì)當(dāng)前的網(wǎng)絡(luò)層設(shè)置Dropout
Dropout的意思是在訓(xùn)練過程讓一定比例的神經(jīng)元失效(取值一般是0~1之間的數(shù)),這個(gè)函數(shù)的使用場(chǎng)景是當(dāng)網(wǎng)絡(luò)設(shè)計(jì)比較復(fù)雜時(shí),容易出現(xiàn)過擬合現(xiàn)象,通過設(shè)置Dropout可以減小網(wǎng)絡(luò)復(fù)雜度,有效防止過擬合。
(3)選取不同的激活函數(shù)
針對(duì)不同神經(jīng)網(wǎng)絡(luò),激活函數(shù)也會(huì)影響網(wǎng)絡(luò)的優(yōu)劣。tensorflow中封裝了很多激活函數(shù),主流如relu、softmax、sign等,在調(diào)試過程中可以嘗試不同激活函數(shù)來構(gòu)建網(wǎng)絡(luò),有些情況下可以大幅提升模型的精度。
(4)選取不同的代價(jià)函數(shù)
代價(jià)函數(shù)的不同也會(huì)影響到模型收斂的速度與精度。本文設(shè)計(jì)的網(wǎng)絡(luò)通過測(cè)試發(fā)現(xiàn)采用交叉熵代價(jià)函數(shù)可以得到最優(yōu)模型,常見的還有SSD(差值平方和)、SAD(絕對(duì)誤差和)等。在具體項(xiàng)目中可以根據(jù)構(gòu)建網(wǎng)絡(luò)的特性來選擇合適的代價(jià)函數(shù)。
(5)采用不同優(yōu)化器來最小化代價(jià)函數(shù)
優(yōu)化器選取的不同直接影響了網(wǎng)絡(luò)模型收斂的速度和是否會(huì)陷入局部最優(yōu)解,在tensorflow中封裝的優(yōu)化器,如圖7所示。選擇不同的優(yōu)化器對(duì)網(wǎng)絡(luò)的收斂速度和精度會(huì)有直接影響。
圖7 tensorflow中封裝的優(yōu)化器
(6)學(xué)習(xí)率的設(shè)置
一般而言,學(xué)習(xí)率的設(shè)置不能過大或過小,過大會(huì)導(dǎo)致?lián)p失函數(shù)沒法收斂到一個(gè)極小值,而過小會(huì)使得收斂速度變慢。因此,本文在網(wǎng)絡(luò)優(yōu)化時(shí)設(shè)置學(xué)習(xí)率隨著迭代次數(shù)的增加逐漸變小,這樣一方面可以在訓(xùn)練的前期使模型快速收斂,同時(shí)又可以在訓(xùn)練后期讓模型收斂到一個(gè)理想值。
下圖8是對(duì)本文設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)優(yōu)化后的測(cè)試結(jié)果。從圖6與圖8的對(duì)比可以發(fā)現(xiàn),優(yōu)化后的識(shí)別精度達(dá)到了98.3%,比優(yōu)化前提升了1.3%左右。
圖8 優(yōu)化后的測(cè)試結(jié)果
BP算法因其簡(jiǎn)單、易行、計(jì)算量小、并行性強(qiáng)等優(yōu)點(diǎn),是目前神經(jīng)網(wǎng)絡(luò)訓(xùn)練采用最多也是最成熟的訓(xùn)練算法之一。本文主要描述了BP網(wǎng)絡(luò)在手寫數(shù)字識(shí)別中的應(yīng)用,提出了若干條優(yōu)化方法,并通過實(shí)驗(yàn)獲得了優(yōu)化后的結(jié)果。但BP算法同樣存在學(xué)習(xí)效率低、收斂速度慢、易陷于局部最小狀態(tài)等缺點(diǎn),需要進(jìn)一步完善和改進(jìn)。
為了進(jìn)一步提升手寫數(shù)字的識(shí)別精度,作者后續(xù)會(huì)在神經(jīng)網(wǎng)絡(luò)中引入卷積層,通過卷積層和全連接層的組合來提取圖像中的深層特征,進(jìn)而訓(xùn)練出識(shí)別精度更高的網(wǎng)絡(luò)模型。