陳戈珩, 程青青
(長春工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院, 吉林 長春 130012)
21世紀(jì)以來,世界進(jìn)入信息化時(shí)代。計(jì)算機(jī)技術(shù)的快速發(fā)展,使人們的工作生活變得越來越方便、越來越智能化。它讓人類從很多枯燥乏味的工作中解放出來,在人工智能領(lǐng)域中字符識(shí)別(Optical Character Recognise, OCR)技術(shù)成為其中一個(gè)非常重要的應(yīng)用[1]。
在這個(gè)信息爆炸的時(shí)代,人們的日常學(xué)習(xí)、工作和生活中幾乎每時(shí)每刻都充斥著與字符相關(guān)的各種信息,字符信息是人類從外界獲取信息最重要的方式之一,這些字符信息一般可以分為兩類:手寫體和印刷體。而我們所說的OCR技術(shù)一般指的是對(duì)印刷體字符的識(shí)別技術(shù),原因在于手寫體因人而異,一般沒有統(tǒng)一的字符模板可供計(jì)算機(jī)參考,因此,計(jì)算機(jī)對(duì)這類字符的識(shí)別通常比較困難,不僅識(shí)別率比較低,而且對(duì)手寫體字符的識(shí)別速度相對(duì)印刷體字符來說也比較慢。因此,接下來所提到的字符識(shí)別技術(shù)都是針對(duì)印刷體字符的。印刷體字符通常具有一定的規(guī)則性,而且不論對(duì)于哪一種字體來說,其對(duì)應(yīng)的印刷體字符都有相應(yīng)的字符模板可供參考,這也是印刷體字符的識(shí)別率遠(yuǎn)高于手寫體字符的重要原因之一。
人類對(duì)印刷體字符的識(shí)別技術(shù)早在上個(gè)世紀(jì)初就開始了。1929年,德國科學(xué)家Tausheck提出了光學(xué)文字識(shí)別的概念,這是最早的一種OCR技術(shù)。之后的幾十年,世界各國也相繼開始OCR技術(shù)的研究,但是由于硬件技術(shù)等條件的限制,直到上個(gè)世紀(jì)六七十年代,才相繼有少數(shù)學(xué)術(shù)成果以及基于OCR技術(shù)實(shí)現(xiàn)的產(chǎn)品出現(xiàn)[2]。1966年,IBM公司的Casey和Nagy兩人聯(lián)合發(fā)表了第一篇基于漢字識(shí)別的文章,填補(bǔ)了人類發(fā)展歷史上這一頁的空白。與此同時(shí),日本在OCR技術(shù)上的研究也取得了一定的進(jìn)展,研制出了一款基于印刷文字識(shí)別的郵政編碼識(shí)別系統(tǒng)。我國在OCR技術(shù)方面的研究晚于這些國家,20世紀(jì)70年代才開始對(duì)數(shù)字和符號(hào)的識(shí)別進(jìn)行研究,而且由于條件的限制,研究進(jìn)度相對(duì)較慢,直到90年代,我國對(duì)字符識(shí)別技術(shù)的研究才開始步入正軌,相應(yīng)的技術(shù)和產(chǎn)品才逐漸得到應(yīng)用和普及。
BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)是人工神經(jīng)網(wǎng)絡(luò)的一種,是由Rumelhart和McClelland的團(tuán)隊(duì)1986年提出的,也是目前應(yīng)用最廣泛的人工神經(jīng)網(wǎng)絡(luò)之一[3]??偟膩碚f,BP神經(jīng)網(wǎng)絡(luò)屬于前饋多層神經(jīng)網(wǎng)絡(luò)的一種,它在函數(shù)逼近與預(yù)測分析、模式識(shí)別、分類以及數(shù)據(jù)壓縮等方面具有非常廣泛的應(yīng)用[4]?;竟ぷ髟硎且揽空`差的反向傳播進(jìn)行網(wǎng)絡(luò)訓(xùn)練,以期望網(wǎng)絡(luò)的實(shí)際輸出值與期望輸出值之間的誤差均方差達(dá)到最小。
BP神經(jīng)網(wǎng)絡(luò)的核心部分是BP算法,BP算法的核心思想是以網(wǎng)絡(luò)誤差平方為目標(biāo)函數(shù)、采用梯度下降法來計(jì)算目標(biāo)函數(shù)的最小值[5]。算法的執(zhí)行過程包含兩個(gè)部分,信號(hào)的正向傳播以及誤差的反向傳播。信息首先沿正向傳播,當(dāng)網(wǎng)絡(luò)輸出值與期望輸出值的誤差不滿足要求時(shí),轉(zhuǎn)入誤差的反向傳播階段,并修改各個(gè)神經(jīng)元權(quán)值,通過這樣的反復(fù)迭代過程,最終可以得到期望的網(wǎng)絡(luò)輸出值。
BP神經(jīng)網(wǎng)絡(luò)模型如圖1所示。
圖1 BP神經(jīng)網(wǎng)絡(luò)模型
前面已經(jīng)提到,BP神經(jīng)網(wǎng)絡(luò)是一種具有多層結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò),一個(gè)完整的BP神經(jīng)網(wǎng)絡(luò)由輸入層、隱含層和輸出層組成,其中隱含層可以具有多層[5]。
附加動(dòng)量法相比反向傳播法在進(jìn)行權(quán)值修正時(shí),考慮的因素更多,在反向傳播法的基礎(chǔ)上引入誤差在曲面上的變化趨勢的影響,這樣做的好處就是網(wǎng)絡(luò)在進(jìn)行每一次權(quán)值修正時(shí),都要加上相比于前一次的權(quán)值變化量的值,新的權(quán)值變化量的產(chǎn)生方式依據(jù)反向傳播方法的原理[6]。
不僅如此,附加動(dòng)量法忽略了網(wǎng)絡(luò)上一些無關(guān)緊要的微小變化特性,這樣做不僅能夠使網(wǎng)絡(luò)的訓(xùn)練速度加快,而且可以防止網(wǎng)絡(luò)陷入局部極小值。
下面是帶有附加動(dòng)量因子修正公式:
Δwij(k+1)=(1-mc)ηδiPj+mcΔwij(k)
Δbi(k+1)=(1-mc)ηδi+mcΔbi(k)
式中:mc----動(dòng)量因子,取值0或1;
k----訓(xùn)練次數(shù)。
附加動(dòng)量法就是利用動(dòng)量因子將最新的權(quán)值修正情況傳遞下去。從上式可以看出,動(dòng)量因子取值不同,權(quán)值的變化情況是截然不同的。當(dāng)mc=0時(shí),權(quán)值依據(jù)梯度法的規(guī)則變化;當(dāng)mc=1時(shí),自動(dòng)忽略梯度法產(chǎn)生的權(quán)值變化,并將最新的權(quán)值變化設(shè)定為當(dāng)前的權(quán)值變化。
另外,附加動(dòng)量法規(guī)定了兩種特殊情況,一是修正后的權(quán)值導(dǎo)致誤差產(chǎn)生較大的變化,二是誤差變化率超過當(dāng)前設(shè)定的最大誤差變化率,最大誤差變化率應(yīng)當(dāng)大于等于1,通常取1.04。這兩種情況看似在說明同一個(gè)問題,其實(shí)不然,因?yàn)檎`差的產(chǎn)生不僅僅是因?yàn)闄?quán)值的改變,第一種情況說明的僅僅是因?yàn)闄?quán)值改變導(dǎo)致的誤差,屬于局部誤差的范圍,而第二種情況介紹的是全局誤差。當(dāng)這兩種情況發(fā)生時(shí),應(yīng)當(dāng)舍棄當(dāng)前計(jì)算得出的權(quán)值變化[7]。這就要求在進(jìn)行程序設(shè)計(jì)時(shí)注意選用正確的動(dòng)量因子的值,具體值及判斷公式如下:
式中:SSE(K)----第K次的誤差變化率。
考慮到一個(gè)固定的學(xué)習(xí)效率可能不能完全適應(yīng)訓(xùn)練前后期的要求,文中采用可變的學(xué)習(xí)效率。首先,檢查修正后的權(quán)值是否能夠真正有效降低誤差,如果能,說明當(dāng)前選取的學(xué)習(xí)效率較低,此時(shí)適當(dāng)提高學(xué)習(xí)效率;如果不能有效降低誤差,說明當(dāng)前學(xué)習(xí)效率可能過高,適當(dāng)降低學(xué)習(xí)效率,直到網(wǎng)絡(luò)的學(xué)習(xí)過程趨于穩(wěn)定為止。這樣做的好處是,可以保證網(wǎng)絡(luò)時(shí)刻都是以當(dāng)前可以接受的最大效率進(jìn)行學(xué)習(xí),可以大大縮短網(wǎng)絡(luò)訓(xùn)練的時(shí)間。
具體的自適應(yīng)學(xué)習(xí)效率公式及條件如下:
式中:η(k)----第k次的學(xué)習(xí)效率。
用神經(jīng)網(wǎng)絡(luò)對(duì)字母進(jìn)行識(shí)別之前需要對(duì)字母進(jìn)行歸一化處理,用一個(gè)7行5列的矩陣來對(duì)字母進(jìn)行數(shù)字化的處理,其中有數(shù)據(jù)的地方用1表示,反之則用0表示。字母A、B、C的數(shù)字化過程如圖2所示。
也可以用1*35的向量來表示數(shù)字化處理過后的字母。則可以表示為:
LetterA=[00100010100101010001111111000110001]
LetterB=[11110100011000111110100011000111110]
LetterC=[01110100011000010000100001000101110]
圖2 數(shù)字化字母
由此可以得到26個(gè)標(biāo)準(zhǔn)字母的神經(jīng)網(wǎng)絡(luò)輸入樣本,將輸入樣本定義為alphabet向量矩,其中alphabet=[letterA,letterB,…,letterZ]。由于每個(gè)字母都由35個(gè)元素組成一個(gè)向量,故alphabet是一個(gè)35*26的矩陣,故將網(wǎng)絡(luò)輸出矩陣定義為26*26的單位陣,記為:target=eye(26)。在實(shí)驗(yàn)時(shí),將理想標(biāo)準(zhǔn)信號(hào)和加入噪聲的標(biāo)準(zhǔn)輸入信號(hào)這兩類數(shù)據(jù)分別作為數(shù)據(jù)的輸入信號(hào)。
在對(duì)BP網(wǎng)絡(luò)設(shè)計(jì)時(shí),隱層節(jié)點(diǎn)個(gè)數(shù)的選擇是BP網(wǎng)絡(luò)的重要環(huán)節(jié),它也是網(wǎng)絡(luò)實(shí)現(xiàn)預(yù)測成敗的關(guān)鍵。在實(shí)際的預(yù)測實(shí)驗(yàn)中,隱層節(jié)點(diǎn)個(gè)數(shù)過多會(huì)導(dǎo)致網(wǎng)絡(luò)學(xué)習(xí)過度,學(xué)習(xí)時(shí)間劇增。隱層節(jié)點(diǎn)數(shù)過少,則不能達(dá)到所需要的實(shí)驗(yàn)預(yù)測要求。由此可見,隱層節(jié)點(diǎn)對(duì)于神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)和計(jì)算特性起著非常大的作用[8]。
實(shí)驗(yàn)中,根據(jù)Kolmogorov定理和單隱層的設(shè)計(jì)經(jīng)驗(yàn)公式確定隱層節(jié)點(diǎn)數(shù)范圍介于8~17之間。
通過實(shí)驗(yàn)的驗(yàn)證和誤差值的分析,將最終值確定為14。此時(shí),BP網(wǎng)絡(luò)的輸出顯示以及網(wǎng)絡(luò)訓(xùn)練速度和精度因素都是最好的。實(shí)驗(yàn)仿真如圖3~圖5所示。
圖3 理想標(biāo)準(zhǔn)信號(hào)訓(xùn)練狀態(tài)圖
圖4 理想標(biāo)準(zhǔn)信號(hào)訓(xùn)練誤差性能曲線
文中選擇MATLAB開發(fā)環(huán)境,基于MATLAB對(duì)于圖像、神經(jīng)網(wǎng)絡(luò)等提供的工具箱函數(shù)建立了BP神經(jīng)網(wǎng)絡(luò),并對(duì)獲取的樣本進(jìn)行識(shí)別。
圖5 訓(xùn)練回歸曲線
實(shí)驗(yàn)過程中,為了使產(chǎn)生的網(wǎng)絡(luò)具有一定的容錯(cuò)能力,需要采用BP網(wǎng)絡(luò)對(duì)不同的信號(hào)進(jìn)行訓(xùn)練,再使用trainlm函數(shù)達(dá)到快速訓(xùn)練的目的,在這個(gè)過程中,網(wǎng)絡(luò)的學(xué)習(xí)速率和沖量參數(shù)的設(shè)定均為自適應(yīng)改變。先將理想信號(hào)輸入,直到平方和誤差足夠小再停止訓(xùn)練。文獻(xiàn)[9]在實(shí)驗(yàn)時(shí),將訓(xùn)練結(jié)束的條件規(guī)定為:最大次數(shù)1 000,誤差平方和為0.000 01。通過MATLAB訓(xùn)練后得到實(shí)驗(yàn)結(jié)果:TRAINLM,Epoch 368/1000,SEE 3.68e-05/1e-05,Gradient 9.972e-06 TRAINLM,Performance goal met。由此可見,經(jīng)過368次訓(xùn)練后誤差達(dá)到要求。實(shí)驗(yàn)仿真如圖6~圖8所示。
圖6 加入噪聲信號(hào)的訓(xùn)練狀態(tài)圖
圖7 加入噪聲信號(hào)的訓(xùn)練誤差性能曲線
圖8 訓(xùn)練回歸曲線圖
接下來進(jìn)行的是含有噪聲的信號(hào)實(shí)驗(yàn),選用15組帶有噪聲的信號(hào),將加入噪聲的均值設(shè)定為0.1和0.2。這是為了保證神經(jīng)網(wǎng)絡(luò)既能夠?qū)肼曅盘?hào)識(shí)別,又能夠?qū)τ诶硐肭闆r下的字母進(jìn)行識(shí)別。為了保證網(wǎng)絡(luò)在識(shí)別理想輸入向量的穩(wěn)定性,要在輸入時(shí)滿足同時(shí)輸入有誤差向量和兩倍重復(fù)的無誤差信號(hào)。運(yùn)行程序,查看識(shí)別錯(cuò)誤與噪聲信號(hào)的關(guān)系,實(shí)驗(yàn)結(jié)果如圖9~圖11所示。
圖9 第一次運(yùn)行結(jié)果
通過三次結(jié)果的對(duì)比分析,可以看出每一次的運(yùn)行結(jié)果都存在差異,這是因?yàn)樵趯?shí)驗(yàn)的過程中,每次運(yùn)行時(shí)產(chǎn)生的隨機(jī)數(shù)是不同的。
由實(shí)驗(yàn)數(shù)據(jù)可以得出,當(dāng)噪聲小于0.15的時(shí)候,兩個(gè)網(wǎng)絡(luò)的識(shí)別錯(cuò)誤率基本上是相同的,而當(dāng)噪聲不斷增加時(shí),經(jīng)過訓(xùn)練的網(wǎng)絡(luò)會(huì)明顯比沒有經(jīng)過訓(xùn)練的網(wǎng)絡(luò)識(shí)別錯(cuò)誤率要低,噪聲越大,差距也會(huì)越大。
圖10 第二次運(yùn)行結(jié)果
圖11 第三次運(yùn)行結(jié)果
編輯alphabet_recognise.m代碼,運(yùn)行程序,結(jié)果如圖12~圖15所示。
圖12 含噪聲的字母A顯示圖
圖13 經(jīng)過訓(xùn)練后的網(wǎng)絡(luò)顯示的A圖
圖14 含噪聲的字母J顯示圖
圖15 經(jīng)過訓(xùn)練后的網(wǎng)絡(luò)顯示的J圖
利用BP網(wǎng)絡(luò)對(duì)有噪聲的字母進(jìn)行識(shí)別和仿真,結(jié)果表明,此網(wǎng)絡(luò)具有聯(lián)想記憶和抗干擾功能,對(duì)于字母具有一定的辨別能力,可以作為一種對(duì)字母識(shí)別的有效方法。改進(jìn)后的BP傳播算法在加快訓(xùn)練速度的基礎(chǔ)上還解決了在實(shí)驗(yàn)時(shí)網(wǎng)絡(luò)陷入局部極小值的問題,在訓(xùn)練過程中可以根據(jù)當(dāng)時(shí)的具體情況來自動(dòng)調(diào)整學(xué)習(xí)速率,從而將學(xué)習(xí)速率和誤差值達(dá)到最佳的平衡狀態(tài)。在實(shí)驗(yàn)過程中發(fā)現(xiàn),均值為0~0.15之間的噪聲環(huán)境下,兩個(gè)網(wǎng)絡(luò)都能夠準(zhǔn)確的進(jìn)行識(shí)別。但是當(dāng)所加的噪聲均值超過0.15時(shí),待識(shí)別字符在噪聲作用下不再接近于理想字符,無噪聲訓(xùn)練網(wǎng)絡(luò)的出錯(cuò)率急劇上升,此時(shí)有噪聲訓(xùn)練網(wǎng)絡(luò)的性能較好。為了獲得更高的識(shí)別準(zhǔn)確率,可以訓(xùn)練更多的樣本,盡量選擇一些帶有噪聲的字母來多次訓(xùn)練網(wǎng)絡(luò),使得識(shí)別的準(zhǔn)確率更高。