許朋
摘 要
隨著人工智能的再次崛起,機器學習作為人工智能的一部分也被重新重視起來,數(shù)字識別技術也得到了關注并通過各種算法提高了識別準確率。手寫數(shù)字識別在各個方面和領域發(fā)揮越來越重要的作用。本文采用包含隱含層的BP神經(jīng)網(wǎng)絡對手寫數(shù)字識別進行實現(xiàn)。文章首先介紹BP神經(jīng)網(wǎng)絡原理及模型,并分別介紹了前向傳播,反向傳播中所用到的數(shù)學模型,然后通過BP神經(jīng)網(wǎng)絡的設計,從參數(shù)的隨機初始化開始,前向傳播,反向傳播,代價函數(shù)的偏導數(shù)求解及驗證,和最終的參數(shù)優(yōu)化等完成實驗,最終得到實驗結果,并進行優(yōu)化,結果表明BP神經(jīng)網(wǎng)絡在手寫體數(shù)字識別方面的實際應用價值。
關鍵詞
手寫數(shù)字識別;BP神經(jīng)網(wǎng)絡;識別
中圖分類號: TP391.41;TP183 ? ? ? ? ? ? ? 文獻標識碼: A
DOI:10.19694/j.cnki.issn2095-2457.2020.11.019
0 引言
在人工智能的影響下,機器學習和深度學習也重新掀起了一股熱潮。目前人工智能包含語音識別、自然語音處理、計算機視覺、機器學習四大部分[1-2]。其中機器學習是人工智能發(fā)展最快的分支之一。
計算機技術和網(wǎng)絡技術的發(fā)展,大量的數(shù)字信息在進行處理之前需要通過一定的方式采集到計算機之中,如信件上的郵政編碼,銀行各種票據(jù)上的數(shù)字信息,試卷上的準考證號,物流行業(yè)中手寫快遞單據(jù)等手寫數(shù)字的錄入等都可通過手寫體數(shù)字識別技術來進行識別,提高效率,節(jié)省了人力。手寫數(shù)字識別方法從原理上大致可以分為基于統(tǒng)計特征分類、基于結構特征分類、基于神經(jīng)網(wǎng)絡三大類算法[3-4]。筆者主要針對BP神經(jīng)網(wǎng)絡在手寫數(shù)字識別方面的技術進行了matlab實現(xiàn)。
1 BP神經(jīng)網(wǎng)絡原理及模型
神經(jīng)網(wǎng)絡的實質是一個給定輸入x到輸出函數(shù)y的映射函數(shù)f(X)=Y,函數(shù)的各項系數(shù)就是我們要通過網(wǎng)絡訓練得到的參數(shù)θ,通過神經(jīng)網(wǎng)絡學習算法將函數(shù)的系數(shù)確定下來,當給定任意輸入x時,通過神經(jīng)網(wǎng)絡計算輸出一個與之相對應的y,至于通過訓練輸出的結果y是否滿足我們的預期結果,這就是我們需要通過提高模型性能方面,優(yōu)化學習算法來完成的事情。
1.1 神經(jīng)網(wǎng)絡的原理
BP是一種反饋型學習網(wǎng)絡,算法的學習過程包括兩部分,首先是信息的前向傳播,然后是通過誤差進行的反向傳播。通過神經(jīng)網(wǎng)絡的輸入層將數(shù)據(jù)信息輸入到神經(jīng)網(wǎng)絡,輸入層的各個單元將數(shù)據(jù)傳遞給隱含層各個神經(jīng)元進行數(shù)據(jù)的內部處理,隱含層也稱為中間層,其作用主要是信息的處理和交換,它的結構可以是單層結構也可以是多層結構,層數(shù)越多神經(jīng)網(wǎng)絡的復雜度就越高,隱含層將經(jīng)過內部處理的數(shù)據(jù)信息傳遞到輸出層的各個單元,處理后的數(shù)據(jù)信息在輸出層進行輸出,這樣就完成了前向傳播的一次訓練[5]。反向傳播則是將神將網(wǎng)絡的輸出值與期望值相比較,計算出誤差,并利用誤差逐層向前求解的過程。
1.2 BP神經(jīng)網(wǎng)絡模型
神經(jīng)網(wǎng)絡的模型是許多邏輯單元按照不同的層級組織起來,首先按照前向傳播進行逐層計算,每一層的輸出加權求和后,作為下一層輸入變量,圖1所示,為一個三層的神經(jīng)網(wǎng)絡。將需要進行處理和計算的數(shù)據(jù)在神經(jīng)網(wǎng)絡的第一層即輸入層進行輸入,經(jīng)過訓練數(shù)據(jù)預測結果在由輸出層輸出。然后將輸出層輸出的結果與期望值進行比較,傳統(tǒng)神經(jīng)網(wǎng)絡在評價性能時通常采用均方誤差[6]。其定義為:
式(1),n為訓練樣本總數(shù),x(i)為訓練樣本,y為訓練樣本的標簽,即期望值, 為網(wǎng)絡輸出結果,參數(shù)θ即需要求解的最優(yōu)參數(shù)。
有時神經(jīng)網(wǎng)絡在訓練集上表現(xiàn)出很好的特性,但是,在測試集上則表現(xiàn)不好,這是因為在訓練網(wǎng)絡時,訓練集上出現(xiàn)了過擬合的現(xiàn)象?;诖?,關于過擬合的處理方法是在代價函數(shù)后面加上正則化項。加入正則化項后的代價函數(shù)變?yōu)槭剑?)。
式(1),式(2)是通過網(wǎng)絡最終輸出結果求解最優(yōu)值的表達式,下面我們介紹,神經(jīng)網(wǎng)絡的內部模型。首先,我們先引入一些符號ω ?表示第j層的第i個激活單元,求解方式如式(3)。θ 表示第j層映射到第j+1層的權重矩陣,其尺寸為:以第j+1層激活單元數(shù)量為行數(shù),以第j層的激活單元數(shù)加1為列數(shù)的矩陣[7]。
式(3)中m表示前一層即第j-1層激活單元的個數(shù)。
2 BP神經(jīng)網(wǎng)絡手寫數(shù)字識別模型
本節(jié)將針對本實驗對神經(jīng)網(wǎng)絡的前向傳播,代價函數(shù),反向傳播以及代價函數(shù)偏導數(shù)的求解等實驗中用到的幾個重要數(shù)學模型進行詳細的介紹。
2.1 前向傳播和代價函數(shù)
本文采用圖2所示的神經(jīng)網(wǎng)絡拓撲結構。根據(jù)圖片的大小輸入層,選用的784個節(jié)點(不包含添加的權重為1的偏置單元),隱含層為200個節(jié)點(不包含添加的權重為1的偏置單元),輸出層采用10個節(jié)點的神經(jīng)網(wǎng)絡拓撲結構。
根據(jù)神經(jīng)網(wǎng)絡結構,本文采用將采用交叉熵損失函數(shù)作為代價函數(shù)并加入了正則化項:
其中,K=10表示所有可能數(shù)字的標簽,即0到9個數(shù)字的標簽。這里需要注意,正則化項中不需要對添加的為權重為1的偏置單元正則化。
2.2 反向傳播
通過前向傳播算法得到神經(jīng)網(wǎng)絡預測值 ,然后采用反向傳播算法,計算代價函數(shù)的偏導數(shù),即從輸出層的預測值和期望值之間的誤差計算開始,然后逐層的反向求出每一層的誤差,直到神經(jīng)網(wǎng)絡的第二層。
首先我們引入sigmoid函數(shù),sigmoid函數(shù)的梯度為:
上述公式中l(wèi)表示當前所計算的層數(shù),j表示當前計算層中激活單元的下標,也將是下一層第j個輸入變量的下標,i表示下一層誤差單元的下表,是受到權重矩陣中第i行影響的下一層中的誤差單元的下標[8]。
3 實驗與結果分析優(yōu)化
本文選用來自美國國家標準與技術研究所的MNIST手寫數(shù)字訓練集。共60000張,每張大小為28*28像素的灰度圖[8]。
首先,我們采用的是matlab中rand()函數(shù)對參數(shù)進行初始化,ε(代碼中表示為esp)一般選用為0.001,學習速率選用0.001,Theta的初始化代碼如下:
Theta1=rand(785,200)*(2*esp)-esp
Theta2=rand(201,10)*(2*esp)-esp
然后用前向傳播算法逐層計算出激活單元,利用訓練集中對應的數(shù)據(jù)和經(jīng)過神經(jīng)網(wǎng)絡的訓練的預測結果得出第三層的誤差,然后采用反向傳播算法,通過該第三層的誤差,計算出第二層所有的誤差,計算出誤差矩陣G 后,再根據(jù)式(8)計算代價函數(shù)的偏導數(shù),并用利用數(shù)值檢驗方法檢驗求得的偏導數(shù)。計算步驟如下:
(1)令ω (i)=x (i),通過前向傳播計算出ω (l)=1,2,3……L
(2)通過反向傳播計算出前一層的誤差向量:δ(L)=ω(L)-y(i)
(3)計算誤差矩陣:
(4)數(shù)值檢驗:
在matlab中采用fminunc()函數(shù)進行參數(shù)的優(yōu)化。這樣需要將權重矩陣展開為向量,需采用matlab中的reshape()函數(shù)實現(xiàn)。
通過以上步驟采用0.001學習速率,迭代50次后,精度達到94.34%。
采用隨機失活(Dropout)對實驗進行優(yōu)化。隨機失活的意思是在訓練過程使一定比例的神經(jīng)元失效,這個函數(shù)的使用場景是當網(wǎng)絡設計比較復雜時,容易出現(xiàn)過擬合現(xiàn)象,通過使用隨機失活可以減小網(wǎng)絡復雜度,有效防止過擬合[3,9]。在訓練過程中,丟棄一定比例的神經(jīng)元,可以使神經(jīng)網(wǎng)絡中各神經(jīng)元之間的依賴性降低,從而使神經(jīng)網(wǎng)絡在訓練時具有更好的魯棒性。經(jīng)過優(yōu)化后實驗精度為95.56%。
4 結論
BP算法在使用時表現(xiàn)出簡單、容易執(zhí)行、運算量小等優(yōu)點,是神經(jīng)網(wǎng)絡訓練比較常用且相對比較成熟的算法。本文采用BP神經(jīng)網(wǎng)絡實現(xiàn)了對手寫數(shù)字的識別,介紹了具體是實現(xiàn)步驟,通過matlab編程實現(xiàn),并在實驗后,通過加入Dropout,在一定程度上提高了神經(jīng)網(wǎng)絡訓練結果的精度,但是由于本文神經(jīng)網(wǎng)絡復雜度不高,所以優(yōu)化效果不是很明顯。因BP神經(jīng)網(wǎng)絡,存在學習效率不高,訓練時可能出現(xiàn)局部最優(yōu)點,參數(shù)選擇不當容易過擬合現(xiàn)象和收斂過慢的現(xiàn)象等缺點。筆者將在以后的學習中繼續(xù)加強機器學習和深度學習的相關研究,學習更具優(yōu)勢的神經(jīng)網(wǎng)絡算法,研究卷積神經(jīng)網(wǎng)絡,將機器學習中常用的一些算法,如貝葉斯算法,模糊推理算法,深度置信網(wǎng)絡融入其中,進一步提高神經(jīng)網(wǎng)絡精確度。
參考文獻
[1]Ian Goodfellow等著.深度學習(Deep Learning). 趙申劍等.譯. 人民郵電出版社,2017.
[2]劉磊.基于多卷積層和隨機失活優(yōu)化的卷積神經(jīng)網(wǎng)絡手寫數(shù)字識別[D].哈爾濱理工大學,2019.
[3]胡君萍,傅科學.基于改進KNN算法的手寫數(shù)字識別研究[J].武漢理工大學學報(信息與管理工程版),2019,41(01):22-26.
[4]張黎,劉爭鳴,唐軍.基于BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別方法的實現(xiàn)[J].自動化與儀器儀表,2015(06):169-170.
[5]夏少杰,項鯤.基于BP神經(jīng)網(wǎng)絡的手寫數(shù)字識別及優(yōu)化方法[J].智能物聯(lián)技術,2018,1(01):19-22.
[6]宋曉茹,吳雪,高嵩,陳超波.基于深度神經(jīng)網(wǎng)絡的手寫數(shù)字識別模擬研究[J].科學技術與工程,2019,19(05):193-196.
[7]Nadir Murru,Rosaria Rossini. A Bayesian approach for initialization of weights in backpropagation neural net with application to character recognition[J].Neuroco mputing,2016,193.
[8]王玲.數(shù)據(jù)挖掘學習方法[M].北京:冶金工業(yè)出版社,2017.08.
[9]Srivastava N,Hinton G,Krizhevsky A,et al.Dropout:A Simple Way to Prevent Neural Networks from Overfitting[J].Journal of Machine Learning Research,2014,15(1):1929-1958.