于文生,張軒雄
(上海理工大學(xué)光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
隨著科學(xué)技術(shù)的快速發(fā)展,生活在數(shù)字化的時(shí)代對(duì)數(shù)字的智能識(shí)別有很高的依賴性,而手寫數(shù)字識(shí)別的應(yīng)用與發(fā)展顯得尤為重要。雖然目前手寫數(shù)字識(shí)別技術(shù)的研究逐漸走向成熟,但相對(duì)優(yōu)化準(zhǔn)確率方面,仍然有很大的提升空間,并且對(duì)于其他文字的識(shí)別仍具有積極意義[1]。而相應(yīng)地由于每個(gè)人書寫樣式的多樣化,以及書寫的習(xí)慣不同,給手寫字體的識(shí)別精確度也帶來了相當(dāng)大的困難。針對(duì)數(shù)字識(shí)別提出了許多解決的辦法,但是通過目前的分析,基于誤差反向傳播法的神經(jīng)網(wǎng)絡(luò)是主流的算法[2-3]。但是事實(shí)上,由于手寫數(shù)字筆跡特征復(fù)雜或人為因素各有差異,導(dǎo)致手寫數(shù)字的正確識(shí)別率并不比印刷漢字的識(shí)別率高,甚至不如聯(lián)機(jī)手寫漢字識(shí)別率高[4]。
神經(jīng)網(wǎng)絡(luò)具有推廣能力、非線性和自動(dòng)學(xué)習(xí)能力以及高速運(yùn)算能力[5]。具體來說,在人工智能快速發(fā)展下,通過已建模型可以自動(dòng)地從數(shù)據(jù)中學(xué)習(xí)到合適的權(quán)重參數(shù)[6]?,F(xiàn)有的神經(jīng)網(wǎng)絡(luò)都沒有優(yōu)化激活函數(shù)和參數(shù)更新,而文中重點(diǎn)從這兩個(gè)方面使用新的激活函數(shù)、優(yōu)化參數(shù)的更新,通過簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),就可以實(shí)現(xiàn)快速的學(xué)習(xí)速率以及精確的準(zhǔn)確率[7-8],從而使神經(jīng)網(wǎng)絡(luò)的性能得到大幅度提升,并且在MNIST 數(shù)據(jù)集上對(duì)測(cè)試結(jié)果進(jìn)行了驗(yàn)證。
為了更好地體現(xiàn)神經(jīng)網(wǎng)絡(luò)對(duì)圖像處理的原理,通過圖1 比較神經(jīng)網(wǎng)絡(luò)所具有的優(yōu)勢(shì),在神經(jīng)網(wǎng)絡(luò)中,連圖像中包含的重要特征量都是由機(jī)器來學(xué)習(xí)的,沒有人為參與。由此也可以引出,基于誤差反向傳播法的神經(jīng)網(wǎng)絡(luò)也稱為端到端的機(jī)器學(xué)習(xí)(endto-end machine learning)。端到端是指從一端到另一端,通常就是從原始數(shù)據(jù)(輸入端)中獲得目標(biāo)結(jié)果(輸出端)[9]。
圖1 由人工設(shè)計(jì)轉(zhuǎn)變?yōu)橛缮窠?jīng)網(wǎng)絡(luò)從數(shù)據(jù)中學(xué)習(xí)
另外,神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)是針對(duì)所有的問題都可以采用同樣的流程來解決。例如,不論要求識(shí)別數(shù)字4,還是動(dòng)物或是識(shí)別人臉,神經(jīng)網(wǎng)絡(luò)都可以不斷地學(xué)習(xí)提供的數(shù)據(jù),將該數(shù)據(jù)直接作為原始數(shù)據(jù),進(jìn)行“端對(duì)端”的學(xué)習(xí)。而基于誤差反向傳播法的神經(jīng)網(wǎng)絡(luò)通常要與梯度下降法結(jié)合使其達(dá)到結(jié)構(gòu)最優(yōu)化,將神經(jīng)網(wǎng)絡(luò)的組成元素優(yōu)化為層,羅列出相應(yīng)的計(jì)算圖,可以高效地計(jì)算梯度(誤差反向傳播法)。
誤差反向傳播法的神經(jīng)網(wǎng)絡(luò)是基于計(jì)算圖設(shè)計(jì)的,以數(shù)學(xué)式為中心展開研究。文中的計(jì)算方法把神經(jīng)網(wǎng)絡(luò)每一層都用計(jì)算圖表示出來,而神經(jīng)網(wǎng)絡(luò)模型的擴(kuò)撲結(jié)構(gòu)由輸入層、隱含層、輸出層組成[9],如圖2 所示。
圖2 神經(jīng)網(wǎng)絡(luò)3層結(jié)構(gòu)圖
對(duì)神經(jīng)網(wǎng)絡(luò)系統(tǒng)的搭建中,文中所用到的核心算法是誤差反向傳播法,主要是根據(jù)輸出的值再反向求導(dǎo)傳播到輸入層。在前向傳播中,數(shù)據(jù)由輸入層處理轉(zhuǎn)換,經(jīng)隱含層的深度推理學(xué)習(xí)再傳遞給輸出層,自然每一層的計(jì)算輸出都經(jīng)計(jì)算加工,作為下一個(gè)神經(jīng)元節(jié)點(diǎn)的輸入。
考慮到MNIST 數(shù)據(jù)集的實(shí)現(xiàn)與推理,文中設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)為3 層結(jié)構(gòu),輸入層應(yīng)有784 個(gè)神經(jīng)元,隱含層有50 個(gè)神經(jīng)元,輸出層有10 個(gè)神經(jīng)元。輸入層的784 來源于將圖像都經(jīng)過尺度歸一化,大小均為28×28=784 像素[10],根據(jù)數(shù)字為0~9 類別分類而設(shè)計(jì)出10 個(gè)神經(jīng)元的輸出層。隱含層的神經(jīng)元數(shù)量可以是任意的,在設(shè)計(jì)中,考慮到矩陣乘法的數(shù)學(xué)運(yùn)算,以及網(wǎng)絡(luò)結(jié)構(gòu)的泛化應(yīng)用能力,隱含層選取50 個(gè)神經(jīng)元。
傳統(tǒng)的誤差反向傳播法訓(xùn)練精度不準(zhǔn)確、效率低,在數(shù)據(jù)訓(xùn)練時(shí)訓(xùn)練速度時(shí)間過長(zhǎng)。針對(duì)以上出現(xiàn)的若干問題,文中改進(jìn)了激勵(lì)算法。該算法為了優(yōu)化增益值對(duì)每個(gè)神經(jīng)網(wǎng)絡(luò)節(jié)點(diǎn)的自適應(yīng),把搜索方向的初始位置進(jìn)行了更改。
該算法中對(duì)誤差反向傳播法更新表達(dá)式的計(jì)算是通過下面的計(jì)算推導(dǎo)過程完成的,先對(duì)誤差e和對(duì)應(yīng)的增益參數(shù)進(jìn)行微分。
誤差e的計(jì)算公式如下:
計(jì)算完成后,再通過對(duì)應(yīng)的增益值進(jìn)行更新,計(jì)算表達(dá)式如下所示:
式中,η為學(xué)習(xí)速率,tk為目標(biāo)輸出。
增益的輸出節(jié)點(diǎn)和更新表達(dá)式的關(guān)系如下:
偏置和權(quán)重的表達(dá)式如下所示:
得出偏置輸出節(jié)點(diǎn)和更新表達(dá)式的關(guān)系如下式所示:
通過算法應(yīng)用批處理模式的訓(xùn)練過程,要對(duì)整個(gè)訓(xùn)練集、權(quán)重、增益和偏置參數(shù)輸入后進(jìn)行更新,每次更新訓(xùn)練后把均方誤差和計(jì)算出來,然后再比較目標(biāo)誤差,直到找到低于期望目標(biāo)值的均方誤差。
神經(jīng)網(wǎng)絡(luò)激活函數(shù)h(x)的主要作用是把輸入信號(hào)的總和轉(zhuǎn)換為輸出信號(hào),其主要在于如何激活輸入信號(hào)的總和。而輸入信號(hào)的計(jì)算由于線性函數(shù)無法跟蹤解決問題,所以要引用非線性模型,也就是說,神經(jīng)網(wǎng)絡(luò)的激活函數(shù)必須使用非線性函數(shù),其實(shí)是為了發(fā)揮疊加層所帶來的優(yōu)勢(shì),激活函數(shù)必須使用非線性函數(shù)。常用的非線性激活函數(shù)有sigmoid 函數(shù)(sigmoid function),其數(shù)學(xué)表達(dá)式為h(x)=1/(1+exp(-x)),反向傳播數(shù)學(xué)表達(dá)式為:
Relu函數(shù)[11](Rectified Linear Unit)數(shù)學(xué)表達(dá)式為:
目前,這兩個(gè)激活函數(shù)廣泛使用在神經(jīng)網(wǎng)絡(luò)中,但是都有各自的不足,sigmoid 函數(shù)容易產(chǎn)生梯度下降消失的現(xiàn)象;而Relu 函數(shù)由于負(fù)半軸為零,正半軸輸入等于輸出,在一定程度上對(duì)梯度下降消散問題的解決優(yōu)于前者,但也可能無法更新權(quán)重值。結(jié)合前兩個(gè)激活函數(shù)的優(yōu)缺點(diǎn),為了彌補(bǔ)Relu 函數(shù)在負(fù)半軸上反向傳播有輸出值,緩解梯度下降消失的現(xiàn)象,使其識(shí)別準(zhǔn)確度增大,文中設(shè)計(jì)了一個(gè)全新的激活函數(shù)Srelu,其數(shù)學(xué)表達(dá)式為:
式(3)中,給定輸入x后,會(huì)返回某個(gè)輸出的轉(zhuǎn)換器,當(dāng)輸入x大于0 時(shí),激活函數(shù)經(jīng)過計(jì)算轉(zhuǎn)換輸出,當(dāng)x小于零時(shí),激活函數(shù)轉(zhuǎn)換sigmoid 輸出傳遞的信號(hào),傳遞給下一個(gè)神經(jīng)元。
Srelu 函數(shù)曲線圖如圖3 所示。
圖3 優(yōu)化的激活函數(shù)
只有參數(shù)的不斷更新,基于誤差反向傳播的神經(jīng)網(wǎng)絡(luò)才能找到使損失函數(shù)的值盡可能小的參數(shù),這就是尋找最優(yōu)化參數(shù)的問題[12]。由于神經(jīng)網(wǎng)絡(luò)各層神經(jīng)元參數(shù)空間龐大,在傳統(tǒng)的方法上使用參數(shù)的梯度,沿著梯度方向更新參數(shù),并且多次重復(fù)這個(gè)步驟,從而逐漸靠近最優(yōu)參數(shù),這個(gè)實(shí)現(xiàn)過程稱為隨機(jī)梯度下降法(SGD)。該方法雖然達(dá)到了90%以上的準(zhǔn)確率,但在梯度方向的處理上還可以進(jìn)行改善。而在實(shí)際的應(yīng)用中,也可以把初始權(quán)值設(shè)定為盡可能小的參數(shù),還要使正負(fù)能量盡量相等[13]。為了解決這些問題,使參數(shù)更新準(zhǔn)確達(dá)到最優(yōu)化,文中采用了Adam[14],可以實(shí)現(xiàn)超參數(shù)的高效搜索,準(zhǔn)確地找到參數(shù)的最優(yōu)化,其收斂速度快,適當(dāng)調(diào)整了神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的更新程度。Adam 和SGD 解決最優(yōu)化的比較如圖4 所示,縱軸坐標(biāo)Loss 表示損失函數(shù)的值,橫坐標(biāo)iterations 表示學(xué)習(xí)的迭代次數(shù)。對(duì)比分析結(jié)果圖顯示,相比SGD,Adam 學(xué)習(xí)和收斂速度都更快。
圖4 基于數(shù)據(jù)集兩種參數(shù)更新方法比較
Batch Norm[15]算法的思路意在調(diào)整各層的激活值分布,使其擁有適當(dāng)?shù)膹V度。在神經(jīng)網(wǎng)絡(luò)中插入對(duì)數(shù)據(jù)進(jìn)行正規(guī)化的層,對(duì)初始值不用太依賴,并且會(huì)使初始值變得健壯。通常的神經(jīng)網(wǎng)絡(luò)都會(huì)使用Dropout[16]方法來抑制過擬合,而文中使用Batch Norm 算法來抑制過擬合,可降低Dropout 的必要性。該算法的數(shù)學(xué)模型推導(dǎo)公式如下所示:
通過式(12)的計(jì)算推導(dǎo),有m個(gè)輸入數(shù)據(jù)集B={x1,…,xm},首先第一步對(duì)mini-batch 求平均值μB,之后再根據(jù)求得的平均值求方差。ε是接近無窮小的值,目的是防止分母為0 的情況出現(xiàn)。
然后,Batch Norm 層會(huì)對(duì)正規(guī)化后的數(shù)據(jù)進(jìn)行縮放和平移變換,可以用數(shù)學(xué)式表示如下:
式中,γ和β是參數(shù),可以根據(jù)學(xué)習(xí)適當(dāng)調(diào)整為合適的值。
通過分析驗(yàn)證,實(shí)驗(yàn)采用的是MNIST 數(shù)據(jù)集,數(shù)據(jù)集主要分為兩部分,一部分由60 000 個(gè)手寫數(shù)字體組成,作為訓(xùn)練集,另一部分為10 000 個(gè)測(cè)試集。由于MNIST 數(shù)據(jù)集的訓(xùn)練數(shù)據(jù)過多,為了節(jié)省學(xué)習(xí)的時(shí)間,從訓(xùn)練數(shù)據(jù)中選取一批數(shù)據(jù),可以從整個(gè)數(shù)據(jù)集中隨機(jī)選取出100 筆數(shù)據(jù),再利用這100 筆數(shù)據(jù)進(jìn)行學(xué)習(xí)?;谡`差反向傳播的神經(jīng)網(wǎng)絡(luò)沒有優(yōu)化改進(jìn)之前,激活函數(shù)采用sigmoid,由圖5訓(xùn)練可知測(cè)試結(jié)果,而圖6 采用的激活函數(shù)是Relu,通過結(jié)果分析可知,改進(jìn)前神經(jīng)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率最高為97%。
圖5 傳統(tǒng)方法手寫數(shù)字集測(cè)試結(jié)果
圖6 手寫數(shù)字集測(cè)試結(jié)果
通過上述實(shí)驗(yàn)結(jié)果可知,顯然神經(jīng)網(wǎng)絡(luò)在改進(jìn)前的識(shí)別準(zhǔn)確率沒有達(dá)到最優(yōu),而圖7 則是基于神經(jīng)網(wǎng)絡(luò)改進(jìn)后的測(cè)試結(jié)果,可以看出,優(yōu)化改進(jìn)后的識(shí)別準(zhǔn)確率達(dá)到了98.5%。
圖7 改進(jìn)優(yōu)化后的數(shù)字集測(cè)試結(jié)果
改進(jìn)后識(shí)別的結(jié)果相比其他兩種方法分別提高了4%和1.5%,如表1 所示有顯著的提升和優(yōu)化,并且收斂速度和訓(xùn)練時(shí)間也加快了,各方面都有提升。
表1 在公用數(shù)據(jù)集上不同方法的識(shí)別準(zhǔn)確率
從以上訓(xùn)練數(shù)據(jù)結(jié)果可以看出,改進(jìn)誤差反向傳播法神經(jīng)網(wǎng)絡(luò)的激勵(lì)算法提升了訓(xùn)練效率,改進(jìn)激活函數(shù),提升了識(shí)別準(zhǔn)確率的精度,使用Adam 加快了收斂速度,Batch 算法加速神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)和抑制過擬合,無論是訓(xùn)練時(shí)間還是訓(xùn)練精度和收斂性,都得到了優(yōu)化和提升。在搭建簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)模型上有預(yù)期地進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果說明,改進(jìn)的誤差反向傳播法是有效的。文中研究只應(yīng)用了簡(jiǎn)單的3 層神經(jīng)網(wǎng)絡(luò),還可以通過加深神經(jīng)網(wǎng)絡(luò)的層,應(yīng)用更加復(fù)雜的算法,得到一個(gè)識(shí)別精度更高的神經(jīng)網(wǎng)絡(luò)模型,這些還需要在將來繼續(xù)進(jìn)行研究和改進(jìn)。