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