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