袁文翠, 孔雪
(東北石油大學 計算機與信息技術學院,大慶 163318)
眾所周知,隨著人們對智能化需求的提高,人工智能將是未來發(fā)展的大方向。從企業(yè)到國家甚至全球?qū)θ斯ぶ悄茴I域都非常重視,深度學習則是人工智能領域的一個重要分支。本文針對深度學習中的卷積神經(jīng)網(wǎng)進行了研究,并在手寫數(shù)字數(shù)據(jù)集的識別上進行了應用實驗。主要工作包括兩方面:一是構建卷積神經(jīng)網(wǎng)絡對手寫數(shù)字數(shù)據(jù)集進行識別,運用交叉熵損失函數(shù)去代替?zhèn)鹘y(tǒng)二次代價函數(shù),并通過使用Relu激活函數(shù)來防止梯度消失來增加學習的速率,提高模型的準確率;二是在TensorFlow[1]中利用改進后的卷積神經(jīng)網(wǎng)對手寫數(shù)字數(shù)據(jù)集的分類結果進行直觀展示。TensorFlow是谷歌在深刻總結其前身 DistBelief 的經(jīng)驗教訓上形成的目前比較流行的深度學習框架,與其他框架相比,具有可以在不同的計算機上運行,以及高度靈活性、可移植性、自動求微分等特征。
在神經(jīng)網(wǎng)絡中,BP神經(jīng)網(wǎng)絡的應用是十分廣泛的,但是其有很多的缺點,例如:權值太多,計算量太大,網(wǎng)絡結構復雜,容易造成過擬合等現(xiàn)象的發(fā)生。為了解決這些問題,在1962年哈佛醫(yī)學院神經(jīng)生理學家Hubel和Wiesel[2]通過對貓視覺皮層細胞的研究,提出了感受野的概念,1984年日本學者Fukushima基于感受野概念提出的神經(jīng)認知機neocognitron[3]可以看作是卷積神經(jīng)絡的第一個實現(xiàn)網(wǎng)絡,也是感受野概念在人工神經(jīng)網(wǎng)絡領域的首次應用。
卷積神經(jīng)網(wǎng)絡[4]是一種特殊的深層的神經(jīng)網(wǎng)絡模型,它的特殊性體現(xiàn)在兩個方面,一方面它的神經(jīng)元間的連接是非全連接的,另一方面同一層中某些神經(jīng)元之間的連接的權重是共享的(即相同的)。它的非全連接和權值共享的網(wǎng)絡結構使之更類似于生物神經(jīng)網(wǎng)絡,降低了網(wǎng)絡模型的復雜度,減少了權值的數(shù)量。很好的解決了傳統(tǒng)神經(jīng)網(wǎng)絡權值過多計算量過大的問題。
CNN的基本結構包括兩種特殊的神經(jīng)元層,其一為卷積層,每個神經(jīng)元的輸入與前一層的局部相連,并提取該局部的特征;其二是池化層,用來求局部敏感性與二次特征提取的計算層。這種兩次特征提取結構減少了特征分辨率,減少了需要優(yōu)化的參數(shù)數(shù)目。CNN網(wǎng)絡結構,如圖1所示。
每一個算法都有一個目標函數(shù)(objective function),算法就是讓這個目標函數(shù)達到最優(yōu)。首先我們看一下傳統(tǒng)的二次代價函數(shù)(quadratic cost):
圖1 CNN卷積網(wǎng)絡結構圖
其中,C表示目標函數(shù),x表示樣本,y表示實際值,a表示輸出值,n表示樣本的總數(shù)。在公式中y(x)-a(x)就是真實值與輸出值得差,也就是誤差值。所以我們的目標就是使誤差最小化也就是目標函數(shù)最小化,為簡單起見 ,同樣以一個樣本為例進行說明,此時二次代價函數(shù)為:
假如我們使用梯度下降法(Gradient descent)[5]來調(diào)整權值參數(shù)的大小,權值w和偏置b的梯度推導如式(1)、(2)。
(1)
(2)
其中,z表示神經(jīng)元的輸入,σ表示激活函數(shù)。w和b的梯度跟激活函數(shù)的梯度成正比,激活函數(shù)的梯度越大,w和b的大小調(diào)整得越快,訓練收斂得就越快。假設我們的激活函數(shù)是Sigmoid函數(shù),如圖2所示。
圖2 sigmoid函數(shù)
假設我們的目標是收斂到1,A點為0.82,距離目標比較遠,梯度比較大,權值調(diào)整的比較快,學習速率快,而B點為0.98距離目標比較近,梯度較小,權值調(diào)整較慢,學習速率較低,以上情況符合我們的預期,距離目標越遠則學習速率越快,距離目標較近的時候降低學習速率,可以避免學習速率過快而找不到最低點。
反之如果我們的目標是0,則所達到的結果遠離我們的預期,所以我們將改變一下原有的二次代價函數(shù),使權值和偏置值的調(diào)整與σ′(z)無關,這樣就解決了上述問題。在本文中我們將用交叉熵代價函數(shù)去代替二次代價函數(shù)。首先我們先看一下交叉熵代價函數(shù)的推導過程:
由公式(2)可知為了消除σ′(z),想得到一個代價函數(shù)使得式(3)。
(3)
由公式(3)即可推出式(4)。
(4)
對公式(4)兩側求微分可得交叉熵代價函數(shù):
其中,C表示目標函數(shù),x表示樣本,y表示實際值,a表示輸出值,n表示樣本的總數(shù)。在這里我們還使用梯度下降法來調(diào)整權值參數(shù)的大小,權值w和偏置b的梯度推導如下:
由以上推導公式可以看出權值和偏置值的調(diào)整與σ′(z)無關,另外,梯度公式中的σ(z)-y表示輸出值與實際值的誤差。所以當誤差越大時,梯度就越大,參數(shù)w和b的調(diào)整就越快,訓練的速度也就越快。很好的解決了激活函數(shù)梯度的變化對權值更新速率的影響。
2.2.1 sigmoid激活函數(shù)結構分析
激活函數(shù)是神經(jīng)網(wǎng)絡中的一個重要組成部分,通過對神經(jīng)網(wǎng)絡的輸入進行函數(shù)變換,得到適當?shù)妮敵觯ǔG闆r下激活函數(shù)為線性表達能力較差的神經(jīng)網(wǎng)絡注入非線性因素,使數(shù)據(jù)能夠在非線性的情況下可分,也可以將數(shù)據(jù)進行稀疏表達,更加高效的進行數(shù)據(jù)的處理。而可以提高學習速率。
傳統(tǒng)神經(jīng)網(wǎng)絡中最常用的兩個激活函數(shù),Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被視為神經(jīng)網(wǎng)絡的核心所在。傳統(tǒng)激活函數(shù)圖像,如圖3所示。(摘于AlexNet的論文Deep Sparse Rectifier Neural Networks)。
圖3 sigmoid/tanh函數(shù)
一般我們優(yōu)化參數(shù)時會用到誤差反向傳播算法,即要對激活函數(shù)求導,得到sigmoid函數(shù)的瞬時變化率,其導數(shù)表達式為:
φ′(x)=φ(x)(1-φ(x))
導數(shù)圖像,如圖4所示。
圖4 sigmoid/ sigmoid’函數(shù)
由圖可知,導數(shù)從0開始很快就又趨近于0了,易造成“梯度消失”現(xiàn)象,使學習停滯。為解決這一問題我們將提出Relu激活函數(shù)[7]來代替?zhèn)鹘y(tǒng)的sigmoid系函數(shù)。
2.2.2 Relu激活函數(shù)[5]結構分析
Relu的函數(shù)式:
Relu函數(shù)圖像,如圖5所示。
圖5 Relu函數(shù)
由圖5可以看出,Relu會使一部分神經(jīng)元的輸出為0,這樣就造成了網(wǎng)絡的稀疏性,并且減少了參數(shù)的相互依存關系,緩解了過擬合問題的發(fā)生,并且發(fā)現(xiàn)ReLu更容易學習優(yōu)化。因為其分段線性性質(zhì),導致其前傳,后傳,求導都是分段線性。而傳統(tǒng)的Sigmoid函數(shù),由于兩端飽和,在傳播過程中容易丟棄信息。所以本文將選用Relu激活函數(shù)和交叉熵代價函數(shù)進行試驗去提高實驗的準確率。
本實驗運行的環(huán)境是anaconda3中的juypter notebook。由于每次訓練后模型都會更新權值和偏向,從而提高準確率,在進行20次實驗后模型的準確率提高幅度幾乎為零,所以本實驗將進行20次訓練。
首先運用傳統(tǒng)簡單的三層神經(jīng)網(wǎng)絡進行實驗,每個訓練批次的大小是100張圖片,訓練20次,沒有進行目標函數(shù)和激活函數(shù)的改進,試驗結果,如圖6所示。
由實驗結果可以看出,在進行10次訓練后模型的準確率才達到90%以上,說明用簡單的傳統(tǒng)神經(jīng)網(wǎng)絡進行訓練得到的模型學習速率慢,準確率低。由此我們將進行改進,將傳統(tǒng)的神經(jīng)網(wǎng)絡改為CNN卷積神經(jīng)網(wǎng)絡進行試驗,看是否可以提高學習速率和準確率,如圖6所示。
圖6 第一次實驗結果圖
在這次實驗中,我們將構建一個有兩層卷積層和兩層池化層的卷積神經(jīng)網(wǎng)絡,沒有對網(wǎng)絡中的目標函數(shù)和激勵函數(shù)進行改進,得到實驗結果,如圖7所示。
圖7 第二次實驗結果圖
運用CNN卷積神經(jīng)網(wǎng)絡進行模型訓練后,在第一次模型訓練后結果就已經(jīng)達到90%以上,基本達到普通神經(jīng)網(wǎng)絡的最終訓練結果,并且準確率也有了大幅度的提升。
在這次實驗中我們將在上次實驗的基礎上對模型的目標函數(shù)和激勵函數(shù)進行改進,看看是否可以提升模型的準確率,實驗結果,如圖8所示。
圖8 第三次實驗結果圖
由實驗結果可以看出,在第二次訓練后模型的準確率已經(jīng)達到了97%以上,解決了學習速率低的問題,并且在模型的準確率方面也有所提升,所以通過以上三次實驗可以論證本文提出的方法確實可以提高模型的準確率。
TensorBoard是TensorFlow內(nèi)嵌的可視化組件,可以通過讀取事件日志進行相關摘要信息的可視化展示。下面我們將對模型精準度和模型分類效果進行可視化,如圖9所示。
圖9中紫色線是測試集的精準率走勢,橘色線是訓練集的走勢,我們很容易的可以看出,測試集和訓練集的走勢基本一致,可以判斷模型沒有發(fā)生過擬合[6]的現(xiàn)象,如圖10所示。
圖10將0到9十個數(shù)字行進分類訓練,并且以不同的顏色進行標記,圖10是模型訓練1 000輪后顯示出來的效果圖。通過此圖可以很直觀的看到模型的分類效果。
圖10 分類效果圖
目前深度學習已經(jīng)被廣泛應用于學術界和工業(yè)界,但在深度學習的多種神經(jīng)網(wǎng)絡中,卷積神經(jīng)神經(jīng)網(wǎng)絡無論是在速率,還是在準確率方面表現(xiàn)都是最為出色的,本文提出一種對卷積神經(jīng)網(wǎng)絡進行優(yōu)化的兩種方式,并且通過實驗驗證得到了具有較高識別精度的模型,對構建更復雜的卷積神經(jīng)網(wǎng)絡具有一定的參考意義。
[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īng)網(wǎng)絡研究綜述[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.