袁文翠, 孔雪
(東北石油大學 計算機與信息技術學院,大慶 163318)
眾所周知,隨著人們對智能化需求的提高,人工智能將是未來發展的大方向。從企業到國家甚至全球對人工智能領域都非常重視,深度學習則是人工智能領域的一個重要分支。本文針對深度學習中的卷積神經網進行了研究,并在手寫數字數據集的識別上進行了應用實驗。主要工作包括兩方面:一是構建卷積神經網絡對手寫數字數據集進行識別,運用交叉熵損失函數去代替傳統二次代價函數,并通過使用Relu激活函數來防止梯度消失來增加學習的速率,提高模型的準確率;二是在TensorFlow[1]中利用改進后的卷積神經網對手寫數字數據集的分類結果進行直觀展示。TensorFlow是谷歌在深刻總結其前身 DistBelief 的經驗教訓上形成的目前比較流行的深度學習框架,與其他框架相比,具有可以在不同的計算機上運行,以及高度靈活性、可移植性、自動求微分等特征。
在神經網絡中,BP神經網絡的應用是十分廣泛的,但是其有很多的缺點,例如:權值太多,計算量太大,網絡結構復雜,容易造成過擬合等現象的發生。為了解決這些問題,在1962年哈佛醫學院神經生理學家Hubel和Wiesel[2]通過對貓視覺皮層細胞的研究,提出了感受野的概念,1984年日本學者Fukushima基于感受野概念提出的神經認知機neocognitron[3]可以看作是卷積神經絡的第一個實現網絡,也是感受野概念在人工神經網絡領域的首次應用。
卷積神經網絡[4]是一種特殊的深層的神經網絡模型,它的特殊性體現在兩個方面,一方面它的神經元間的連接是非全連接的,另一方面同一層中某些神經元之間的連接的權重是共享的(即相同的)。它的非全連接和權值共享的網絡結構使之更類似于生物神經網絡,降低了網絡模型的復雜度,減少了權值的數量。很好的解決了傳統神經網絡權值過多計算量過大的問題。
CNN的基本結構包括兩種特殊的神經元層,其一為卷積層,每個神經元的輸入與前一層的局部相連,并提取該局部的特征;其二是池化層,用來求局部敏感性與二次特征提取的計算層。這種兩次特征提取結構減少了特征分辨率,減少了需要優化的參數數目。CNN網絡結構,如圖1所示。
每一個算法都有一個目標函數(objective function),算法就是讓這個目標函數達到最優。首先我們看一下傳統的二次代價函數(quadratic cost):

圖1 CNN卷積網絡結構圖
其中,C表示目標函數,x表示樣本,y表示實際值,a表示輸出值,n表示樣本的總數。在公式中y(x)-a(x)就是真實值與輸出值得差,也就是誤差值。所以我們的目標就是使誤差最小化也就是目標函數最小化,為簡單起見 ,同樣以一個樣本為例進行說明,此時二次代價函數為:
假如我們使用梯度下降法(Gradient descent)[5]來調整權值參數的大小,權值w和偏置b的梯度推導如式(1)、(2)。
(1)
(2)
其中,z表示神經元的輸入,σ表示激活函數。w和b的梯度跟激活函數的梯度成正比,激活函數的梯度越大,w和b的大小調整得越快,訓練收斂得就越快。假設我們的激活函數是Sigmoid函數,如圖2所示。

圖2 sigmoid函數
假設我們的目標是收斂到1,A點為0.82,距離目標比較遠,梯度比較大,權值調整的比較快,學習速率快,而B點為0.98距離目標比較近,梯度較小,權值調整較慢,學習速率較低,以上情況符合我們的預期,距離目標越遠則學習速率越快,距離目標較近的時候降低學習速率,可以避免學習速率過快而找不到最低點。
反之如果我們的目標是0,則所達到的結果遠離我們的預期,所以我們將改變一下原有的二次代價函數,使權值和偏置值的調整與σ′(z)無關,這樣就解決了上述問題。在本文中我們將用交叉熵代價函數去代替二次代價函數。首先我們先看一下交叉熵代價函數的推導過程:
由公式(2)可知為了消除σ′(z),想得到一個代價函數使得式(3)。
(3)
由公式(3)即可推出式(4)。
(4)
對公式(4)兩側求微分可得交叉熵代價函數:
其中,C表示目標函數,x表示樣本,y表示實際值,a表示輸出值,n表示樣本的總數。在這里我們還使用梯度下降法來調整權值參數的大小,權值w和偏置b的梯度推導如下:
由以上推導公式可以看出權值和偏置值的調整與σ′(z)無關,另外,梯度公式中的σ(z)-y表示輸出值與實際值的誤差。所以當誤差越大時,梯度就越大,參數w和b的調整就越快,訓練的速度也就越快。很好的解決了激活函數梯度的變化對權值更新速率的影響。
2.2.1 sigmoid激活函數結構分析
激活函數是神經網絡中的一個重要組成部分,通過對神經網絡的輸入進行函數變換,得到適當的輸出,通常情況下激活函數為線性表達能力較差的神經網絡注入非線性因素,使數據能夠在非線性的情況下可分,也可以將數據進行稀疏表達,更加高效的進行數據的處理。而可以提高學習速率。
傳統神經網絡中最常用的兩個激活函數,Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被視為神經網絡的核心所在。傳統激活函數圖像,如圖3所示。(摘于AlexNet的論文Deep Sparse Rectifier Neural Networks)。

圖3 sigmoid/tanh函數
一般我們優化參數時會用到誤差反向傳播算法,即要對激活函數求導,得到sigmoid函數的瞬時變化率,其導數表達式為:
φ′(x)=φ(x)(1-φ(x))
導數圖像,如圖4所示。

圖4 sigmoid/ sigmoid’函數
由圖可知,導數從0開始很快就又趨近于0了,易造成“梯度消失”現象,使學習停滯。為解決這一問題我們將提出Relu激活函數[7]來代替傳統的sigmoid系函數。
2.2.2 Relu激活函數[5]結構分析
Relu的函數式:

Relu函數圖像,如圖5所示。

圖5 Relu函數
由圖5可以看出,Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的相互依存關系,緩解了過擬合問題的發生,并且發現ReLu更容易學習優化。因為其分段線性性質,導致其前傳,后傳,求導都是分段線性。而傳統的Sigmoid函數,由于兩端飽和,在傳播過程中容易丟棄信息。所以本文將選用Relu激活函數和交叉熵代價函數進行試驗去提高實驗的準確率。
本實驗運行的環境是anaconda3中的juypter notebook。由于每次訓練后模型都會更新權值和偏向,從而提高準確率,在進行20次實驗后模型的準確率提高幅度幾乎為零,所以本實驗將進行20次訓練。
首先運用傳統簡單的三層神經網絡進行實驗,每個訓練批次的大小是100張圖片,訓練20次,沒有進行目標函數和激活函數的改進,試驗結果,如圖6所示。
由實驗結果可以看出,在進行10次訓練后模型的準確率才達到90%以上,說明用簡單的傳統神經網絡進行訓練得到的模型學習速率慢,準確率低。由此我們將進行改進,將傳統的神經網絡改為CNN卷積神經網絡進行試驗,看是否可以提高學習速率和準確率,如圖6所示。

圖6 第一次實驗結果圖
在這次實驗中,我們將構建一個有兩層卷積層和兩層池化層的卷積神經網絡,沒有對網絡中的目標函數和激勵函數進行改進,得到實驗結果,如圖7所示。

圖7 第二次實驗結果圖
運用CNN卷積神經網絡進行模型訓練后,在第一次模型訓練后結果就已經達到90%以上,基本達到普通神經網絡的最終訓練結果,并且準確率也有了大幅度的提升。
在這次實驗中我們將在上次實驗的基礎上對模型的目標函數和激勵函數進行改進,看看是否可以提升模型的準確率,實驗結果,如圖8所示。

圖8 第三次實驗結果圖
由實驗結果可以看出,在第二次訓練后模型的準確率已經達到了97%以上,解決了學習速率低的問題,并且在模型的準確率方面也有所提升,所以通過以上三次實驗可以論證本文提出的方法確實可以提高模型的準確率。
TensorBoard是TensorFlow內嵌的可視化組件,可以通過讀取事件日志進行相關摘要信息的可視化展示。下面我們將對模型精準度和模型分類效果進行可視化,如圖9所示。
圖9中紫色線是測試集的精準率走勢,橘色線是訓練集的走勢,我們很容易的可以看出,測試集和訓練集的走勢基本一致,可以判斷模型沒有發生過擬合[6]的現象,如圖10所示。
圖10將0到9十個數字行進分類訓練,并且以不同的顏色進行標記,圖10是模型訓練1 000輪后顯示出來的效果圖。通過此圖可以很直觀的看到模型的分類效果。

圖10 分類效果圖
目前深度學習已經被廣泛應用于學術界和工業界,但在深度學習的多種神經網絡中,卷積神經神經網絡無論是在速率,還是在準確率方面表現都是最為出色的,本文提出一種對卷積神經網絡進行優化的兩種方式,并且通過實驗驗證得到了具有較高識別精度的模型,對構建更復雜的卷積神經網絡具有一定的參考意義。
[1] 章敏敏,徐和平,王曉潔,周夢昀,洪淑月. 谷歌TensorFlow機器學習框架及應用[J/OL]. 微型機與應用,2017,36(10):58-60.
[2] HUBEL D H, WIESEL T N. Receptive fields,binocular interaction,and functional architecture in the cat's visual cortex [J].Journal of Physiology,1962,160(1):106-154.
[3] FUKUSHIMA K. Neocognitron: a self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position [J]. Biological Cybernetics,1980,36(4):193-202.
[4] 李彥冬,郝宗波,雷航. 卷積神經網絡研究綜述[J]. 計算機應用,2016,36(9):2508-2515.
[5] Dmitry Yarotsky. Error bounds for approximations with deep ReLU networks[J]. Neural Networks,2017.
[6] Murphy K P. Machine Learning: A Probabilistic Perspective[M]. Cambridge, MA: MIT Press,2012: 82-92.