張 珂, 侯 捷
(上海應用技術大學機械工程學院,上海 200093)
隨著時代的進步、科技的發展,計算機視覺已經廣泛地應用到于各個領域,而這些應用的核心技術就是圖像處理[1]、圖像識別[2]和分類的任務。而識別技術是通過計算樣本的特征,計算機把運用到分類器上,針對不同的計算數值產生分類。自20世紀80年代以來,光學字符識別方法研究一直都是模式識別的熱門話題[3]。由于不同的人手寫數字的習慣不同,所寫的數字字體都不盡相同,對于計算機而言,能夠正確地識別出大量的手寫字體不是一件容易的事情。因此,研究一種準確又高效的數字識別方法具有重要意義[4]。
針對圖像識別方法中,傳統的識別方法如支持向量機、傳統神經網絡、最近鄰域法KNN等。最小距離分類算法是比較傳統的識別算法,缺點在于針對手寫字體的適用能力不強。KNN最近鄰域法的識別方法思想來源于統計學[5],原理是將圖像的特征進行計算,測量出不同特征計算結果的距離進行分類,其優點是對異常的采集數據不敏感。支持向量機(support vector machine,SVM)已成功運用到圖像識別方法上。支持向量機在機器學習中,可以避開高維空間的復雜性,在基于小樣本、高維度空間計算和非線性問題中,表現非常突出。但是在分類問題中,求解函數時所占的存儲空間較大。上述這些傳統的識別算法,對較為復雜的數學函數,表達能力是非常不足的,泛化性能不好,通常對數據的預測及精度達不到預期效果[6-8]。卷積神經網絡(convolutional neural networks, CNN)的研究最早開始于20世紀80年代,由美國學者Cun等提出[9]。它的出現為解決圖像識別的泛化能力提供了可能性。卷積神經網絡,作為深度學習中比較成功的模型,已經在圖像識別領域中得到了諸多應用。
在以上所述識別方法上,以神經網絡作為識別研究方法,并結合圖像識別的基本原理,對比不同的識別算法,改進LetNet-5的網絡結構,同時運用dropout的方法解決訓練過程中出現的過擬合現象。通過MINIST數據庫進行網絡結構實驗,提高網絡結構的運算速度,同時盡可能提高算法的識別準確率。
LeNet-5是一個非常成功的手寫字符識別神經網絡,由被稱為卷積神經網絡之父的LeCun提出[10]。LeNet的整體結構較小,總參數約6萬個,在圖像識別領域中表現優秀,應用范圍廣泛。
傳統的CNN一般由輸入層、卷積層、下采樣層、全連接層、輸出層這五部分組成[11]。網絡結構如圖1所示。
第一層為輸入層。針對普遍的多層神經網絡,第一層就是特征向量[12]。一般地,圖像通過人工處理計算得到特征向量,并作為神經網絡的輸入。而卷積神經網絡與普遍的多層神經網絡不同,整個圖像則為網絡的輸入層,如本文的實驗對象為MINIST數據庫中手寫數字圖片,經過處理所得圖像的尺寸為28×28,為了方便數據的調用、讀取,可以將圖像按照像素個數展開,形成784個結點。
卷積層,也稱為特征提取層。圖像特征提取很多文獻都有提過,卷積操作是卷積神經網絡的靈魂,卷積核則是卷積操作的工具。圖像通過卷積核得出卷積計算值,生成新的特征圖片。在卷積核遍歷整體圖片時,卷積核中的參數是共享狀態的,這就意味著運算量大大減少[13]。原理如圖2所示。

圖2 卷積運算原理圖Fig.2 Principle diagram of convolution operation
下采樣層,也稱為池化層。特征圖片在進行池化操作中,圖片的深度不發生改變,但是可以縮小圖片的大小[14]。池化操作可以看作是把一張高分辨率圖片轉變成尺寸較小的低分辨率圖片。通過多次池化層,可以逐步減少最后全連接層的參數個數,從而減少整個神經網絡參數,提高訓練速度。池化層本身沒有可以訓練的參數。
全連接層與一般的全連接層相同。其輸入層是前面的特征圖,會將特征圖中所有的神經元變成全連接的樣子。這個過程為了防止過擬合會引入Dropout。
LeNet5 這個網絡雖然很小,但它的整體結構模型非常完整,傳統的卷積、池化等操作都有涉及[15]。
如圖3所示,LeNet-5共有7層,除輸入層和池化層,每層都含可訓練參數;每個層有多個特征層,每個特征層通過卷積濾波器提取,輸出新的特征層,每個特征層有多個隱藏節點。其中C1和C3表示卷積層,S2和S4表示池化層,F表示全連接層。C1到F6可以當作隱藏層。

圖4 改進后的網絡結構模型
Fig.4 Improved network structure
對傳統的LeNet-5模型進行如下改進:在LeNet-5網絡中,激勵函數為雙曲正切函數,池化層為2層,卷積層2層。在此,去掉C5層,直接將S4處理過后的數據進行F6全連接層連接,同時改變各層神經元的個數,增加卷積層操作時的特征提取維度,提高特征識別的準確率。具體結構如圖4所示,對比改進后的模型可以看出,隱藏層減少到5層,整體提取維度加大。卷積層與池化層交替運算,所以改進的圖片仍保留了圖像對位移、縮放和旋轉的不變性和良好的魯棒性的優點。
在改進后的網絡結構中,輸入層的數據尺寸仍為MINIST數據輸入大小。C1為第一個卷積層,運算后有16個24×24的特征圖,這些特征圖中,每一個神經元都是由輸入層的數據與5×5的卷積核進行卷積操作得出,在卷積運算時,同一特征映像圖的權值共享,網絡可以并行的學習。卷積后的特征映像圖會作為S2池化層的輸入對象,池化后的特征映像圖圖像個數不會發生變化,尺寸則縮小一倍。C3是第二個卷積層,S4是第二個池化層,當特征圖像進行第二次池化操作后,會以全連接的方式相連得到輸出的輸出層,因為樣本是0~9的種類區分,對應10個節點,整個CNN網絡模型的參數一共有6 369個參數,與原始的LeNet-5模型的60 000個參數相比,參數個數有明顯的減少。
1.3.1 訓練過程
網絡模型一般訓練時可分為兩個階段。
第一階段,前向傳播。在網絡進行前向運算過程中需要三部分信息。第一是輸入,也就是特征向量。本次實驗數據源于MINIST字符庫,是由手寫數字整合打包的公開實驗數據,每個數字尺寸大小都已定義為28×28像素,一共784個特征點可以把這784個點當作特征向量作為輸出傳輸到輸入層。第二,神經網絡的連接結構,神經網絡中的神經元也叫做節點。在網絡準備訓練之前,需要做一系列的初始化操作:設定計算參數的初始值;設置網絡的結構以及卷積核大小;并用合理的初始值來定義各個參量的權值,設置學習率和迭代次數。最后輸入層輸入數據,經過網絡的卷積池化,計算得出前向傳播的結果。
第二階段,反向傳播。對于訓練結果如何更好地提高,優化各個參量,最常采用的方法是反向傳播算法。反向傳播算法具體工作原理如圖5所示。
由圖5可知,反向傳播算法的實質就是迭代。由于訓練樣本量大,不可能一次性傳輸所有樣本,所以在每次迭代的訓練開始,都會小批量的抽取訓練數據,這一小批量樣本叫作一個batch。這個batch會通過前向傳播算法,計算出訓練后的識別檢測結果。因為訓練樣本中帶有識別正確標簽,所以可以通過計算的結果和標簽進行對比,找出預測結果和正確標簽存在的數值差距。最后根據這一數值,重新更新網絡中各個節點的權值數值,使得進一步減小數值差距,在下一batch進行訓練后,預測結果更加接近真實數值。
1.3.2 算法實驗


(1)
將式(1)轉換為矩陣形式:

(2)
式(2)中:f表示激活函數;wl為l層特征圖的權值;bl為第l層特征圖的偏置實驗中將ReLU函數作為激活函數。
采樣層中,針對上一次卷積操作所得數據作為池化層的輸入,池化操作是利用一個矩陣窗口在輸入張量上進行掃描,并且每個窗口中的值通過取最大、取平均或其他的一些操作來減少元素個數。其計算形式為

(3)
式(3)中:n表示從卷積層到池化層的窗口大小;Mj表示輸入的圖像特征圖的集合。
然后是誤差的逆向傳播過程,對每一單樣本(x,y),它經過網絡內部運算過后所得結果可以用代價函數進行表示為

(4)
式(4)中:tn表示第n個樣本的實際輸出;yn表示第n個樣本的理想輸出。
該網絡模型的反向過程采用平方誤差來作為指標維度為m,樣本數量n的代價函數為

(5)
在方向傳播過程中,采用了批量梯度下降法來更新各個神經元的權值與偏置比重。其中,常數η∈(0,1)是比例系數,gk表示公式曲線中該點的斜率,算法公式簡化為
wij(k+1)=wij(k+1)+Δwij=wij(k)+ηgk
(6)
針對交叉熵代價函數表示式為

(7)
根據式(7)可以得出,當期望y與神經網絡輸出相等時,c=0。計算權值的偏導數:

(8)
由式(8)得,權值的改變受σ(z)-y的影響,也就是期望與輸出的誤差所決定的。該函數的優點在于:當σ(z)-y值較大時,整體的變化量就大,更易于訓練參數的迭代更新,當σ(z)-y值較小時,整體的變化量就小,更易于訓練結果的收斂。因此采用交叉熵代價函數來更新網絡參數。
對于ReLU函數,曲線特征如圖6所示。

圖6 ReLU函數模型Fig.6 ReLU function model
從圖6可知,ReLU函數是分段函數,把取值小于0時,輸出值都是0,當取值大于0時,輸出值呈線性變化,這種函數能夠產生單側抑制的效果。相比于其他激活函數來說,ReLU有以下優勢:對于線性函數,該激活函數表達能力比其他激活函數都要強;對于非線性函數,該激活函數由于能夠產生單側抑制的效果,因此可以避開訓練時梯度消失的相關問題,使得模型在訓練過程中,隨著迭代次數增大也能呈現穩定的收斂狀態。
MINIST數據集來自美國國家標準與技術研究所,訓練集 (training set) 由來自 250 個不同人手寫的數字構成, 其中部分樣本如圖7所示,它總共包含70 000張圖片,其中60 000張訓練圖片和10 000張測試圖片,訓練集與測試集(test set)圖片不重復。其中 50% 是高中學生, 50% 來自人口普查局(the census bureau) 的工作人員。測試集也是同樣比例的手寫數字數據,該數據都是具有標簽的28×28的圖片數據集。

圖7 MINIST部分樣本實例Fig.7 Some sample examples of MINIST
本次實驗的CPU參數為Intel(R)Core(TM)i7-8700@3.20GHz,內存為8 GB,系統為Windows10,64位操作系統,使用Anaconda仿真tensorflow的開發環境仿真訓練。實驗中的學習率取為1×10-4,采用交叉熵代價函數來更新網絡參數,訓練中,加入dropout避開過擬合問題。訓練batch=50,遍歷完所有的訓練集為一次迭代,初始變量采用標準差為0.1的正態分布進行賦值,總共訓練50次輸出最終預測結果,然后針對模型訓練數據進行分析驗證,其結果如圖8和圖9所示。該網絡識別正確率最終為0.992。

圖8 改進后網絡結構識別率曲線圖Fig.8 Recognition rate curve of improved network structure

圖9 改進后網絡結構loss曲線圖Fig.9 The loss of improved network structure
為了測試比較改進深度神經網絡的性能,使用傳統的LeNet-5的結構進行輸出結構調整,同時也采用相同的數據訓練集進行仿真對比。在傳統的網絡模型中,多了一層卷積層和一層全連接層,未加入dropout方法防止過擬合。仿真結果如圖10和圖11所示,從圖10中可以看出:傳統神經網絡的識別率在98.5%。改進的模型識別率相比較,傳統的識別性能更加優秀。

圖10 原神經網絡結構識別率曲線圖Fig.10 Structural recognition rate of original neural network

圖11 原神經網絡結構loss曲線圖Fig.11 The loss curve of original neural network
對比圖8、圖10, 可以看出,隨著迭代次數的增加,正確率也在不斷提高,最后網絡逐漸達到收斂的狀態。在收斂效果上,改進的神經網絡結構收斂的效果趨于穩定,在迭代50次的情況下,最終的識別率為99.24%;而傳統的LeNet-5在進行訓練時,隨著迭代次數的增加,識別率隨之增加,呈現出不穩定的狀態,識別波動相對較大。在迭代50次的情況下,最終的識別率為98.58%。
與此同時,本次實驗還針對訓練批次做出實驗數據研究,每次輸入的batch樣本數量對識別率的影響。分別將單次的batch設置為50、100、200,實驗中其他條件不變。整合以后得到表1。訓練迭代次數為50。每5次迭代顯示當前訓練識別準確率。
從表1中可以看出:在迭代到35次以后,50batch、100batch模型都可達到高于90%的識別準確率,隨之迭代次數繼續增加,識別率的變化已經趨近平緩,可認為此時網絡的模型達到收斂狀態。其中收斂速度最快的為50batch,最慢的為200batch。在迭代了45次左右,識別正確率會在99%上下波動,最終在50次迭代中仍未提高。從整體次數來看,200batch的模型,在前期的數據訓練上,識別率落后于50batch、100batch模型,100batch模型最終在迭代50次后,模型識別正確率在99.1%左右浮動。在訓練過程中,50batch的訓練速度并不是最快的。

表1 不同批次條件識別率實驗表Table 1 Test recognition rate of different batch conditions /%
在LeNet-5神經網絡基礎上,改進了該網絡的結構,大大減少了訓練的神經元參數數量,提高了訓練的時間,同時增加了特征提取層數量,提高了識別的準確率。通過實驗數據,優化后的神經網絡在識別手寫數字識別正確率上,比原傳統的網絡結構模型提高了0.8%左右,達到了預期的效果。實驗中,不僅比較了方法的不同,而且針對訓練批次也進行數據分析,雖然小批量的識別率會大于大批量訓練方式的,但是訓練速度上要比大批量訓練方式慢。未來的識別訓練實驗中,還需要針對訓練批量大小,選取合適的參數,提高識別率的同時,盡可能地提高訓練速度。