卷積神經網絡是第一個被成功訓練的多層神經網絡結構,具有較強的容錯、自學習及並行處理能力。
一、基本原理
1.CNN算法思想
卷積神經網絡可以看作為前饋網絡的特例,主要在網絡結構上對前饋網絡進行簡化和改進,從理論上講,反向傳播算法可以用於訓練卷積神經網絡。卷積神經網絡被廣泛用於語音識別和圖像分類等問題。
2.CNN網絡結構
卷積神經網絡是一種多層前饋網絡,每層由多個二維平面組成。每個平面由多個神經元組成。
網絡輸入為二維視覺模式,作為網絡中間層的卷積層(C)和抽樣層(S)交替出現。網絡輸出層為前饋網絡的全連接方式,輸出層的維數在分類任務中的類別數。
2.1 輸入層
卷積神經網絡的輸入層直接接收二維視覺模式,如二維圖像。可以不再需要額外的人工參與過程去選擇或者設計合適特征作為輸入,自動地從原始圖像數據提取特征、學習分類器,可大大減少人工預處理過程,有助於學習與當前分類任務最為有效的視覺特征。
為了顯示清楚,上圖中的輸入層只繪制一個二維視覺模式,即對應一幅灰度圖像。在實際應用時,輸入層可為多通道圖像,如三通道彩色圖像,或者圖像序列,如視頻中的連續多幀圖像。
2.2 卷積層(C)層
卷積層屬於中間層,為特征抽取層。每個卷積層中包含多個卷積神經元(C)元,每個C元只和前一層網絡對應位置的局部感受域相連,並提取該部分的圖像特征,具體提取的特征體現在該C元與前一層局部感受域的連接權重之上。相對於一般的前饋網絡,卷積神經網絡的局部連接方式大大減少了網絡參數。
為了進一步減少網絡參數,卷積神經網絡同時限制同一個卷積層不同的神經元與前一層網絡不同位置相連的權重均相等,即一個卷積層只用來提取前一層網絡中不同位置處的同一種特征,這種限制策略稱為權值共享,該假設源於圖像處理的實際經驗:如果一種特征在圖像中的某個位置很有效,那么在圖像的其他位置也可能很有效。通過設計這種權值共享連接方式,不僅可進一步減少網絡參數,而且也可促進網絡學習與位置無關的魯棒視覺特征用於分類,就是最終學到的某個特征無論出現在圖像什么位置,網絡總能抽取到該特征並將其用於分類。
通過設計多個卷積層,網絡可以抽取多個不同特征用於最終的分類任務。
如圖2所示,該卷積層的局部感受域大小為5X5,使用黃色和紅色標注一層卷積層上兩個卷積神經元與前一層網絡的對應關系,每一個卷積神經元與前一層網絡的聯接權重的數目為5X5.
2.3 抽樣層(S)層
抽樣層屬於中間層,為特征映射層。每個抽樣層包含多個抽樣神經元(S)元,S元僅與前一層網絡對應位置的局部感受域相連。與C元不同,每個S元與前一層網絡局部感受域連接的所有權重都固定為特定值,在網絡訓練過程中不再進行改變。
當前C層網絡不僅不再產生新的訓練參數,而且對前一層網絡抽樣得到特征進行下采樣,進一步降低了網絡規模。通過對前層網絡局部感受域的下采樣,使網絡對於輸入模式潛在的形變更為魯棒。
如圖3所示,該抽樣層前層網絡的局部感受域大小設置為2X2,經過抽樣層,前層網絡抽取特征維數減為原來的1/4.
2.4 輸出層
卷積神經網絡的輸出層與常見前饋網絡一樣,為全連接方式。最后一層隱層(可為C層或S層)所得到二維特征模式被拉伸為一個向量,與輸出層以全連接方式相連。
該結構可充分挖掘網絡最后抽取特征與輸出類別標簽之間的迎神關系,在復雜應用中,輸出層可以設計多層全連接結構。
2.5 CNN結構示例
全集神經網絡通過結構上的局部連接、權值共享、下采樣等,不僅可很好地控制整個網絡規模,而且可實現網絡對識別圖像在位移、縮放和扭曲等形變的魯棒性。
對於只包含一層中間層的某前饋網絡,假設輸入為1000x1000px的圖像,隱層神經元的數目為100萬,輸出類別數為10,那么如果網絡為全連接結構,網絡參數為1000x1000x1000000+1000000x10≈1012.
如果采用局部連接結構,並且假設局部感受域的大小為10x10,那么每個隱層神經元只需要和這10x10的局部圖像相連接,網絡參數10x10x1000000+1000000x10≈108,網絡參數下降約4個數量級。
如果進一步采用權值共享,即100萬個隱層神經元與前一層局部感受域的權重都相等,那么網絡參數為10x10+1000000x10≈107,網絡參數進一步下降一個數量級。
如果通過抽樣層下采樣,假設抽樣層的局部感受域大小為10x10,那么網絡參數為10x10+10000x10≈105,網絡參數下降兩個數量級。
卷積神經網絡通過結構上的約束和設計可以大大減少網路參數,從結構本身實現一定的正則化,使網絡訓練過程相對較容易、不易過學習。使網絡權重減少的結構限制都針對輸入模式在平移、縮放及扭曲等形變上的不變性,訓練出來的網絡對於這些形變具備更好的魯棒性。
3、CNN網絡學習
卷積神經網絡從整體上屬於前饋網絡,在理論上用於訓練前饋網絡的反向傳播算法可以用來訓練卷積神經網絡。卷積神經網絡在結構上存在特殊性,為了高效訓練卷積神經網絡,需要對反向傳播算法進行優化。
3.1 反向傳播算法
假設用於網絡訓練的樣本集合為{xn,tn}n=1N,輸入特征和目標類別的維數分別為ni和n0。以平方和誤差為損失函數,網絡在整個訓練集合上的訓練誤差表示為如下:
這里yn表示網絡以xn為輸入時的輸出。網絡 在整個訓練集合上的訓練誤差為所有樣本的誤差和,那么網絡在一個訓練樣本上的訓練誤差可以表示為:
反向傳播算法訓練過程主要包括前向計算過程和反向更新過程。對於普通的全連接前饋網絡,前向計算過程逐層計算輸入x經過每一層網絡的輸出如下:
al=δ(zl) zl=Wlal-1+bl
這里al表示輸入經過第l層神經元計算節點后的結果,δ(·)表示神經元計算節點的激活函數,zl表示第l層神經元的總輸入。對於輸入層al=x,對於輸出層有anl=y。在得到樣本經過經過網絡的輸出后,就可以計算網絡對於該樣本的訓練誤差。
在反向更新過程中,訓練誤差相對於網絡參數的導數被從后向前逐層進行傳播,訓練誤差相對於任意層偏置項b的導數為:
這里引入變量δ表示訓練誤差相對於偏置項b的導數,其物理意義是訓練誤差相對於偏置項的變化率,即導數,可以稱之為靈敏度。對於輸出層,該變量對應的值為:
δnl-1=δ`(unl-1)·(yn-tn)
對於中間層l(1<l<nl-1),該變量對應的值為:δl=(Wl+1)Tδl+1·δ`(ul)
根據每一層中改變的具體值,訓練誤差相對於該層聯接權重Wl的導數為:
3.2 適用於CNN的BP算法
使用BP算法訓練卷積神經網絡的過程和普通前饋網絡一樣,分為前向計算和反向更新過程。卷積神經網絡在結構上交替出現卷積層和抽樣層,最后一層或幾層為全連接層。對於全連接層。對於全連接層,其前向計算、反向更新過程與普通前饋網絡一樣。
(1)卷積層
卷積層的輸入為前一層網絡的多個二維特征圖,卷積層將它們與多個可學習的卷積核(局部連接、權值共享的權重矩陣)進行卷積,然后將卷積結果通過神經元計算節點得到卷積層的輸出二維特征圖。每一個輸出特征圖融合與多個輸入特征圖的卷積結果。卷積層的前向計算過程可以表示為:
這里Mjl表示第l層第j個輸出特征圖所對應的多個輸入特征圖的索引集合,符號“*”代表卷積操作,所有Mj中的輸入特征圖都共用一個偏置項bjl.
根據基本的BP算法推導如何計算卷積層的梯度。
假設卷積層l的下一層為抽樣層l+1.BP算法表明,為了計算l層的每個神經元對應的權值更新,需要計算l層的靈敏度δl.為了求l層的靈敏度,需要先對l+1層對應節點的靈敏度求和(對應節點指連接到l層的感興趣節點的第l+1層的那些節點),然后乘以它們之間聯接的權重,最后再乘以l層該神經節點的輸入u經過激活函數的導數值,就得到l層每個神經元節點對應的靈敏度δl 。然而由於抽樣層下采樣的原因,抽樣層每一個像素(神經元節點)對應的靈敏度δl+1對應於卷積層輸出特征圖的一塊像素(即采樣窗口),因此卷積層l的一個輸出特征圖中的每個節點只與抽樣層l+1中響應特征圖的一個節點相連。為了高效計算卷積層l的靈敏度,可以上采樣這個經過抽樣層下采樣的靈敏度圖(特征圖的每個像素都對應一個靈敏度,構成一個靈敏度圖),使得到的上采樣靈敏度圖的大小與卷積層的靈敏度圖大小一致,然后將卷積層l的激活值的導數與上采樣靈敏度圖進行點積操作即可。由於抽樣層的下采樣因子均為一個常數值β,所以最后只要對點積后的特征圖乘以這個常數即可。需要對卷積層的每一個特征圖和它在抽樣層對應的靈敏度圖都重復上述過程。這個過程表示為:
這里up(·)表示上采樣操作,如果下采樣因子是n的話,只要簡單地在每個像素水平和垂直方向上重復n次即可。實際上,這個函數可以使用Kronecker乘積⊗來定義:
up(x)x⊗lnxn
對於卷積層每一個特征圖,可以計算靈敏度圖。通過對卷積層的靈敏度圖的所有節點進行求和,計算訓練誤差關於偏置的梯度:
由於很多連接權值是共享的,因此對於一個給定權重,需要對所有與該權值有聯系的連接對該點求梯度,然后再對這些梯度求和。
(2)抽樣層
抽樣層對於輸入的每個特征圖產生一個下采樣的特征圖,如果有N個輸入特征圖,就有N個輸出特征圖,只是每個輸出特征圖變小了。抽樣層可表示為:
down(·)表示下采樣函數,該函數對輸入圖中每個不重復nxn的圖像塊求和后得到輸出圖中的一個點值,輸出圖的長和寬均為輸入圖的1/n。每個輸出有一個特定的乘性偏置β和加性偏置b。
只要得到抽樣層的靈敏度圖,就可以計算關於偏置參數β和b的梯度。對於下一層為全連接層的抽樣層,其靈敏度圖可以直接使用標准BP算法進行計算。
若抽樣層的下一層為卷積層,為了計算下一層卷積核的梯度,需要找出抽樣層中哪個圖像塊與卷積層的靈敏度圖中一個給定像素相對應。由於連接輸入圖像塊與輸出像素之間權重系數實際上就是卷積核的權重(旋轉后),抽樣層和卷積層靈敏度圖之間的關系可以利用卷積操作高效地實現:
在MATLAB中,使用full類型的卷積操作可以自動對圖像邊界進行填零處理。根據抽樣層的靈敏度圖,訓練誤差相對於加性偏置bj的梯度可以通過對敏感圖上的元素進行求和得到:
而訓練誤差相對於乘性偏置βj的梯度,由於涉及到該層在前向計算過程中得到的下采樣后最初的特征圖,可以在前向計算中將下采樣后的特征圖保存起來,可以使用djl表示對前一層輸出特征圖下采樣后得到的特征圖,即:djl=down(ajl-1)
那么訓練誤差相對於乘性偏置βj的梯度可以由下式得到:
根據卷積神經網絡每一層的具體結構特點,選擇對應計算公式得到訓練誤差相對於訓練參數的梯度,就可以對網絡參數進行更新。
二、算法改進
卷積神經網絡訓練過程收斂很慢且耗時。研究者提出了很多提高卷積神經網絡運算效率的方法。
1、設計新的卷積神經網絡訓練策略
目前卷積神經網絡的訓練是利用BP算法以整體監督方式進行學習的,通過采用某種方式的預訓練(監督式或無監督式),可以為卷積神經網絡提供一個較好的初始值,從而大大提高其整體上使用BP算法進行訓練的收斂速度。
2、使用GPU加速卷積運算過程
基於GPU運算,通過撰寫高效C++代碼實現卷積操作,可以將卷積操作速度提高3~10倍。
3、使用並行計算提高網絡訓練和測試速度
將一個大的卷積神經網絡划分為幾個小的子網絡,再並行處理每個子網絡中的運算過程,可以有效改善整個大網絡的運算過程。
4、采用分布式計算提高網絡訓練和測試速度
該加速方式使用成千上萬個運算節點,每個運算節點值完成整個網絡計算中的很小一部分計算,通過調度節點為每個運算節點分配相應的計算任務,每個運算節點分別完成各自的計算任務,所有計算節點的計算任務都完成之后,調度節點再將每個計算節點的計算結果匯總融合。
采用該加速方式,速度提高非常明顯,可以完成一些以前幾乎不能完成的網絡訓練任務,但主要問題是相關程序編制較為復雜,需要額外消耗較多的計算資源。
5、硬件化卷積神經網絡
卷積神經網絡成功應用於越來越多的實際問題之中,卷積神經網絡中的卷積層和下采樣層如果能夠被硬件化,將會再次提高卷積神經網絡的運行效率。
三、仿真實驗
首先給出CNN訓練的算法仿真,然后介紹卷積神經網絡的兩個著名實例,詳細說明CNN在實際應用中網絡結構的具體形式。
1、卷積神經網絡訓練算法仿真
算法1:基於BP算法的卷積神經網絡訓練算法
輸入:訓練樣本{xn,tn}n=1N,卷積神經網絡的結構{hl}l=1L,學習速率η
輸出:卷積神經網絡的參數
訓練過程:
初始化:設置卷積網絡的所有層的卷積核和偏置項為較小的隨機值;
While not converged
從訓練樣本集合中采樣樣本(xn,tn)
前向計算過程:
For l=1:L
如果hl為卷積層:
如果hl為下采樣層:
如果hl為全連接層:al=δ(zl),其中zl=Wlal-1+bl
End For
反向傳播過程:
For l=L:1
如果hl為卷積層:
如果hl為下采樣層:
如果hl為全連接層:
End For
更新參數:
End While
2、卷積神經網絡實際應用實例
(1)Yann LeCun開發的LeNet所用的卷積神經網絡
基於LeNet的手寫數字分類系統在商業上取得極大成功,網絡上有LeNet5的在線演示,對於各種復雜的手寫數字都能夠准確識別。
如圖4所示,LeNet5的網絡輸入層由32x32的感知節點組成,每一個感知節點用來接收輸入32x32灰度圖像的一個像素。
網絡的第一個隱層為卷積層,卷積核的數目為6,卷積核的大小(即局部感受域的大小)為5x5,輸入層經過第一卷積層,輸入圖像被卷積成6個28x28的特征圖,特征圖的大小由輸入特征圖的32x32變成輸出的28x28,卷積采用了valid方式,即輸出特征圖的大小=輸入特征圖的大小-(卷積核的大小-1)。
網絡的第二個隱層為抽樣層,其局部感受域大小為2x2,即每一個2x2的像素被下采樣為1個像素,經過第二層隱層后,特征圖的大小變為14x14,特征圖的數目不變,仍未6個。
網絡的第三個隱層為卷積層,卷積核的數目為16個,卷積核的大小為5x5,所以經過該層輸出的特征圖大小為10x10(10=14-5+1)。需要注意的是,該層輸入的6個特征圖,變成輸出的16個特征圖,這個過程可以看作是將S2的特征圖用1個輸入層為150(=5x5x6,而不是5x5)個節點。
網絡的輸出層為16個節點的網絡進行卷積,並且C3的每個特征圖並不是和S2的每個特征圖都相連,而是可能只和其中幾個進行相連。
LeNet5的具體連接關系如圖5所示,縱坐標表示輸入特征圖索引,橫坐標表示輸出特征圖索引,有X標記的位置表示該位置對應的輸入特征圖與輸出特征圖之間存在連接。
網絡的第四個隱層S4為下采樣層,局部感受域的大小為2x2,該層輸入16個5x5的特征圖。
網絡的第五個隱層是卷積層,它是最后一個卷積層,卷積核的大小為5x5,卷積核的數目為6,在卷積操作完成之后,C5將得到的特征圖展開成一個向量,向量的大小為120(=20x6).
網絡的第六個隱層F6為一個全連接網絡,節點數為84,這84個節點與C5的120個輸入節點完全連接。
網絡的輸出層節點數目為10,表示對應問題的分類數目(0~9共10個數字).
(2)Geoffrey Hinton的ILSVRC2013競賽所用的卷積神經網絡
基於該網絡的圖像分類算法,取得了ImageNet ILSVRC2013的第一名,分類結果得到極大提高,是卷積神經網絡在計算機視覺問題的一個里程碑工作。
如圖6所示,相比於LeNet5,該網絡結構更為復雜,輸入為224x224x3的彩色圖像。
網絡的每個卷積層和抽樣層將輸入特征圖分為兩部分,實現並行處理,第一個隱層的卷積核數目為96,分為上下各48個卷積核,卷積時每隔4像素進行卷積,卷積層輸出的特征圖維數大大減少。
網絡的抽樣層沒有選用LeNet5使用的均值下采樣(mean polling),而采用了最大值下采樣(Max polling)。
在最后的兩個隱層中都選擇全連接網絡,可以學習出經過卷積層和抽樣層學習到的特征與輸出的更為復雜的關系。
網絡的輸出層維數為1000維,表示將輸入圖像最終分為1000類。
四、算法特點
1、算法優點
卷積神經網絡是第一個被成功訓練的包含多層結構的神經網絡,相對於其他神經網絡有着非常明顯的優勢。
第一,卷積神經網絡的結構設計受啟發於神經學家關於視覺神經機制的研究成果,具有較為可靠的生物學依據。
第二,卷積神經網絡能夠直接從原始輸入數據中自動學習相應特征,省去一般機器學習算法所需要的特征設計過程,節省大量時間,能夠學習和發現更為有效的特征。
第三,卷積神經網絡的結構本身實現一定形式的正則化,訓練參數被控制在一個很小的數量級上,整個網絡不僅更容易訓練,而且最終網絡也具備非常好的推廣性能。
第四,卷積神經網絡的結構特點使得網絡對於輸入的噪聲、形變和扭曲等變化的適應性非常強。
早期卷積神經網絡用於處理二維圖像,目前卷積神經網絡廣泛用於處理一維聲音信號、三維圖像序列或者視頻信號等,擴展能力強。
2、算法缺點
卷積神經網絡存在着明顯的缺點。
第一,由於在結構上的限制性,卷積神經網絡在網絡記憶能力和表達能力上遠遠弱於對應的全連接網絡。
第二,由於卷積操作原因,在訓練、測試時運行效率都非常低,運算過程非常耗時,比其對應的全連接網絡慢近三倍。
第三,在結構設計上沒有通用的理論和方法指導,要想設出有效的卷積神經網絡結構,需要花費大量時間。