劉 煬,湯傳玲,王 靜,石文瑩,趙小蘭
(合肥工業(yè)大學,安徽 合肥 230009)
神經網(wǎng)絡是一種由簡單單元組成的具有適應性的廣泛并行互連的網(wǎng)絡,其組織能夠對真實世界物體做模擬生物神經系統(tǒng)的交互反應。神經網(wǎng)絡已經成為一門比較重要的交叉性學科,被廣泛應用于智能控制、模式識別、輔助決策、信號處理和計算機視覺等領域。BP(Back Propagation)神經網(wǎng)絡在各門學科領域中都有非常重要的實用價值,也是在模式識別中應用最廣泛的一種人工神經網(wǎng)絡,它具有很強的自學習、自適應能力以及非線性逼近能力。由于基于誤差梯度下降的BP算法易于陷入局部極小點而不收斂,目前,已經有很多學者對BP算法進行了研究,并針對它的這些缺陷提出了一些改進方法。
BP網(wǎng)絡是采用誤差反向傳播算法的多層前饋網(wǎng)絡,網(wǎng)絡的輸入和輸出是一種非線性映射關系,其中,神經元的傳遞函數(shù)為Sigmod函數(shù)。
BP網(wǎng)絡的學習規(guī)則是采用梯度下降算法。在網(wǎng)絡學習的過程中,將輸出層節(jié)點的期望輸出(目標輸出)與實際輸出(計算輸出)的均方誤差一一逐層向輸入層進行反向傳播,再分配給各連接節(jié)點,并且計算出各連接節(jié)點的參考誤差。在這個基礎上可以調整各連接權值,使所獲得的網(wǎng)絡的期望輸出與實際輸出的均方誤差達到最小。
將第j個樣本輸入到網(wǎng)絡時,得到均方誤差為:
其中,ei,j表示輸入第 j個樣本時,輸出層第 i個節(jié)點的期望輸出值 yi,j與實際輸出值間 的 差 值 , 即 ei,j=yi,j-;n0為輸出層的節(jié)點數(shù)。
連接權的調整主要有成批處理和逐個處理兩種方法。成批處理是指一次性將所有訓練樣本輸入,并計算總誤差,然后調整連接權。逐個處理是指每輸入一個樣本就調整一次連接權值。本文采用逐個處理的方法,并根據(jù)誤差的負梯度來修改連接權值。
BP網(wǎng)絡的學習規(guī)則為:
設BP網(wǎng)絡有1個隱含層,由神經元的輸入與輸出關系得:
BP網(wǎng)絡可以存儲和學習大量的輸入—輸出模式映射關系,且無需事先揭示和描述這種映射關系的數(shù)學方程。在人工神經網(wǎng)絡的實際應用中,很多神經網(wǎng)絡模型就是采用BP網(wǎng)絡及其變化形式的。
BP神經網(wǎng)絡模型拓撲結構包括輸入層、隱層和輸出層3層,如圖1所示。
圖1 BP神經網(wǎng)絡拓撲結構
BP算法的程序實現(xiàn)的具體步驟如下:
(1)網(wǎng)絡初始化。設計網(wǎng)絡連接結構,規(guī)定輸入變量和輸出變量個數(shù)、隱含的層數(shù)和各層神經元的個數(shù),對W(位于隱層到輸出層之間)、權值矩陣V(位于輸入層到隱層之間)賦隨機數(shù),將訓練次數(shù)計數(shù)器q和樣本模式計數(shù) p置為 1,學習率 η設為 0~1內的小數(shù),誤差 E置0,網(wǎng)絡訓練后達到的精度Emax設為一個正的小數(shù)。
(2)輸入訓練樣本對,利用現(xiàn)有的權值來計算網(wǎng)絡中各神經元的實際輸出。用當前樣本xp、dp對d(期望輸出向量)、向量數(shù)組 X(輸入向量)賦值,用式(5)和式(6)計算O(輸出層輸出向量)和 Y(隱層輸出向量)中各分量。
(5)各層權值間的調整。 應用式(9)和式(10)計算V、W中的各個分量。
(6)檢驗是否對所有的樣本完成了一次輪訓。若p<P,計數(shù)器 p、q 加 1,返回步驟(2);否則,進行步驟(7)。
(7)檢驗網(wǎng)絡總誤差是否達到精度要求。如當用ERME作為網(wǎng)絡的總誤差時,若滿足 ERME<Emin,則訓練結束;否則,E 置 0,p 置 1,返回步驟(2)。
3層前饋網(wǎng)絡已經得到越來越廣泛的應用,因為它有一個非凡優(yōu)勢,即將BP 算法用于具有非線性轉移函數(shù)的3層前饋網(wǎng)絡,可以以任意精度逼近任何非線性函數(shù)。但是標準的BP算法在應用中還有一些內在的缺陷:
(1)誤差下降緩慢、迭代次數(shù)多、調整時間長,影響收斂的速度,會造成收斂速度慢,如果加快收斂速度則易于產生振蕩。
(2)存在局部極小問題,但是卻得不到全局最優(yōu)。訓練時會因陷入某個局部極小點而不能自拔,使得訓練很難收斂在給定的誤差內。
盡管標準的BP算法原理簡單、實現(xiàn)方便,但由于訓練過程中使用的是一個較小的常數(shù),因此存在局部極小的點收斂速度慢問題。對于復雜的問題,訓練過程則需要迭代幾千甚至幾萬次才能將結果收斂到期望的精度。并且訓練中的穩(wěn)定性又要求學習率很小,因此梯度下降法會使得訓練很慢。因此,標準的BP網(wǎng)絡在很多方面表現(xiàn)出了不實用性,特別是對實時性很強的系統(tǒng)。鑒于傳統(tǒng)的BP算法存在著以上的問題,國內外學者已經提出不少有效的改進方法,主要有兩類:一類是基于標準梯度下降(如附加動量法、自適應學習率法等)進行改進;另一類是基于標準數(shù)值優(yōu)化(如變步長法、牛頓法以及Levenberg-Marquardt算法等)進行改進。
2.2.1 基于變步長法改進
BP 算法之所以收斂速度慢,一個主要原因是學習速率η選取不當。η值選取過大,在算法收斂接近目標時易產生震蕩,無法收斂到正確解;而η值選得過小,又會使整體學習速率變慢。因此,可以結合濾波器的思想設計一種自適應學習速率η。
假如第t-1次計算的誤差為 εt-1,第t次計算的學習速率為 ηt,第 t+1 次計算的學習速率為 ηt+1,誤差為 εt??梢远x β=sgn(εt-εt-1),則 ηt+1=ηte-λβ。 其中,λ 為自適應系數(shù),取值為 0.01~0.2;而 β實質上起到了一個濾波器的作用,導致誤差減小的學習速率得以加強,反之則會被抑制。
2.2.2 基于牛頓法改進
由于梯度法在搜索過程中收斂速度較慢,牛頓法在這方面有所改進,它不但利用了準則函數(shù)在搜索點的梯度,還利用了它的二次導數(shù)。牛頓法的原理是求ε的二次近似的駐點,它用一個二次函數(shù)逼近ε,然后再求其駐點。若該函數(shù)為有強極小點的二次函數(shù),它就能實現(xiàn)一步極小化。如果ε不是二次函數(shù),則牛頓法一般就不能在一步內收斂。實際上根本無法確定它是否收斂,因為這取決于具體的函數(shù)和初始點。其主要改進是改變更新規(guī)則為:
2.2.3 基于Lebenberg-Marquardt算法改進
BP網(wǎng)絡的訓練實質是非線性目標函數(shù)的優(yōu)化問題,基于數(shù)值優(yōu)化的LM算法不但利用了目標函數(shù)的一階導數(shù)信息,還利用了目標函數(shù)的二階導數(shù)信息。LM算法的迭代公式為:
其中,I為單位矩陣,μ為阻尼因子,J是包含網(wǎng)絡誤差對權值和閾值一階導數(shù)的Jacobin矩陣。
[1]中提出了將附加動量法和自適應學習率調整法兩種策略結合起來的一種方法。這兩種方法相結合既可有效地抑制網(wǎng)絡陷入局部極小,又有利于縮短學習時間。但上述兩種改進方法都是在標準梯度下降法基礎上發(fā)展起來的,它們只利用了目標函數(shù)對網(wǎng)絡權值和閾值的一階導數(shù)信息。因此,當用于較復雜的問題時,仍存在收斂速度不夠快的問題。
基于數(shù)值優(yōu)化的LM算法是根據(jù)迭代的結果動態(tài)地調整阻尼因子,即動態(tài)地調整迭代的收斂方向,可使每次的迭代誤差函數(shù)值都有所下降。它是梯度下降法和牛頓法的結合,收斂速度較快。但LM算法在計算過程中會產生大量的中間結果矩陣,因此,需要較大的內存空間,比較適宜中型網(wǎng)絡使用。
可以考慮設計一個新的數(shù)字識別系統(tǒng),以變步長法和牛頓法來改進BP算法,使其能夠適應對數(shù)字樣本組成的樣本集的訓練。
本文采用逐像素特征提取方法提取數(shù)字樣本的特征向量。設定歸一化后的圖像形成一個8×16的像素矩陣,依次取每列的元素轉化為128×1的列矩陣,即數(shù)字字符的特征向量。這樣把最后提取到的樣本特征向量送到數(shù)字識別模塊中,經過神經網(wǎng)絡樣本訓練并記錄下網(wǎng)絡參數(shù),最后對識別數(shù)據(jù)進行識別并給出結果。BP神經網(wǎng)絡的數(shù)字識別系統(tǒng)數(shù)據(jù)處理流程如圖2所示。
圖2 BP神經網(wǎng)絡的數(shù)字識別系統(tǒng)數(shù)據(jù)處理流程圖
BP神經網(wǎng)絡的輸入層神經元節(jié)點數(shù)就是圖像預處理后所輸出的特征的個數(shù)。采用8×16的歸一化處理以及逐像素特征提取方法,利用每個點的像素值作為特征,設定每個字符的標準歸一化的寬度為 8,高度為 16,那么每個字符就有8×16=128個特征像素點,這樣對于每個輸入的樣本,就有128個特征,由此可以確定輸入層的節(jié)點數(shù)為128。
相對而言,隱含層神經元節(jié)點數(shù)沒有特別的要求,隱含層神經元的數(shù)目越多,BP 網(wǎng)絡也就越精確, 訓練時間也就會加長。然而,需要注意的是,隱含層節(jié)點不宜選取太多,否則會造成識別率的急劇下降,同時還會降低網(wǎng)絡的抗噪聲能力。到目前為止,隱含層的神經元的設定要不斷地試驗才有可能得到最佳的數(shù)目,在這里可以設定隱含層神經元的個數(shù)為10。
對數(shù)字字符,不管它的訓練樣本中有多少種字體,有多少個訓練樣本,也只有10個數(shù)需要編碼,只需設定輸出神經元個數(shù)為4就可滿足2m≥N的條件。其中,m為輸出層神經元個數(shù),N是需要編碼的訓練樣本個數(shù)。
由于采用S函數(shù)做激活函數(shù),它的輸出不可能達到0或1,只能是無限接近??梢栽诰幋a時做一個簡單處理,將 0改為 0.1,1改為 0.9.
根據(jù)要求采用10個節(jié)點確定輸入層的節(jié)點數(shù),編碼方案為:
在隱節(jié)點數(shù)一定的情況下,為了獲得較好的泛化能力,存在一個最佳次數(shù)t0,這時會使得測試數(shù)據(jù)的均方誤差最小。因此,可隨意設置最小均方誤差,本文設為0.000 1,設最大訓練次數(shù)為16 000,這樣就不會出現(xiàn)訓練不足的情況,使其可以達到最小的均方誤差。
將參考文獻[1]中提出的方法、基本BP算法與本文提出的方法進行實驗數(shù)據(jù)比較,收斂速度比較如表1所示。
表1 3種算法比較
從表1可以看出,標準BP算法的收斂速度很慢,使用參考文獻[1]中的方法可以加快網(wǎng)絡收斂速度,而使用本文提出的新方法,速度比這兩種方法更快。但由于本文提出的方法是兩種基于數(shù)值優(yōu)化方法的結合,它比參考文獻[1]算法需要更大的內存空間,但需要的內存空間少于Lebenberg-Marquardt算法。因此,對于一個給定的問題,采用何種BP算法,取決于問題的復雜程度、訓練樣本數(shù)、權值以及閾值數(shù)目等各種因素。
參考文獻
[1]王婷,江文輝,肖南峰.基于改進BP神經網(wǎng)絡的數(shù)字識別[J].電子設計工程,2011,19(3):108-112.
[2]萬紅,馮向榮,呂明相.改進BP算法在識別含噪聲字符中 的 應 用 [J]. 微 計 算 機 信 息 ,2008,24 (10):207-208,190.
[3]趙長青,李歐迅,黃書童.BP神經網(wǎng)絡數(shù)字識別系統(tǒng)的設計方法 [J].桂林航天工業(yè)高等??茖W校學報,2010(3):292-294.
[4]施少敏,馬彥恒,陳建泗.基于 BP神經網(wǎng)絡的數(shù)字識別方法[J].網(wǎng)絡與信息技術,2006,25(10):40-41.