深度學習之卷積神經網絡


由於在看這類文章時專業名詞較多,所以在正式開始前,我先介紹一些同義專業名詞,各名詞具體含義以及之間的關系在文中介紹。

卷積層 = C層

采樣層 = 池化層(pooling層),S層

平面 = 特征圖(feature map),通道,map

卷積核 = 權向量,濾波器

神經元 = 特征,結點,單元,像素點,patch

局部感受野的大小 = 濾波器的大小

1、 引入

  在人工神經網絡中,當網絡層數增多時,網絡中的權值以成倍的速度在增長。比如當輸入為一個1000*1000圖片時(假如網絡總共有6層,每層100個節點)則需要的權值數為:1000*1000*100+100*100*4,這么多的權值數目嚴重影響了網絡的訓練速度,為了訓練好模型同時也需要更多的訓練樣例,同時過於復雜的模型也易導致過擬合的發生。

  在上例中,主要是前面的輸入層到第一層的權重參數太多,那么如何解決呢?傳統的方法就是人工從圖像中抽取較少特征,然后再放入全連接的神經網絡中,但這種方法存在兩個問題,一個問題是人工抽取特征效率較低,其次是抽取的特征不一定准確。

現在我們需要想個方法能自動的抽取圖像中的特征,將高維的圖像轉化為低維度的特征。那么我們必須在神經網絡前面加上一個處理層,在此我們稱為卷積層,通過在人工神經網絡前面添加卷積層來先將高維的圖像轉成低維度的特征,然后再使用全連接的神經網絡,這樣就會達到很好的性能。我們稱這種添加了卷積層的網絡為卷積神經網絡。

  卷積神經網絡屬於有監督的學習算法,是深度神經網絡中的一種特殊情況,它相比於深度人工神經網絡具有權值數量少,訓練速度快等優點。並且它在圖形識別方面已經取得了很好的效果。

2、卷積網絡介紹

  卷積神經網絡是由多層神經網絡所組成,每層又有多個二維平面,每個二維平面有多個獨立的神經元。神經元又分成簡單元(又叫S元)和復雜元(又叫C元),由簡單元聚集的平面稱為S面,由S面聚集的層稱為S層(又叫抽樣層);同理,由復雜元聚集的面叫C面,C面聚集的層叫C層(又叫卷積層)。

  在上面的分析中,我們知道6層網絡需要的權值數為:1000*1000*100+100*100*4。其中輸入層到隱藏第一層所需的權值數為:1000*1000*100。那么在卷積神經網絡中如何減小權值數呢?我們主要通過兩種方式

  1)局部感受野。我們將輸入的圖像划分成很多的小方陣,每個小方陣我們稱為局部感受野。然后第一個隱藏層的神經元不需要和輸入層的所有單元相連,而只需要與其對應的局部感受野的節點連接即可,此時每個神經元需要的權重參數個數為濾波器的大小。通過局部感受野,我們可以將權值個數從原來的1000*1000*100減少到100*10000。數目還是有點多,於是就有了第二種方法。

圖2.1 全連接和局部連接的權值數[6]

  2)權值共享。若我們將上面的所有的神經元共享相同的權值向量,那我們只需要10*10個權值,但是只有一個權向量,很明顯特征提取的不夠充分,信息失真較大。為了提取更多的特征,於是我們將上面提到的所有神經元放在一個特征圖中。在每一層設置多個特征圖,不同特征圖中的權向量不同,這樣,當一層有100個特征圖時,總共需要的權值數為:10*10*100。這相比原來的1000*1000*100減少了一萬倍。

  在卷積網絡中,中間的隱藏層都是卷積層和抽樣層交叉出現。隨着逐層的深入,每一層的特征圖會越來越多,同時每個特征圖內的神經元會越來越少,直到神經元的個數為1. 當每個特征圖中的神經元個數為1時,網絡的連接變成了全連接,這相當於經典的人工神經網絡。更通俗的說,卷積層就是從二維圖像中抽取出一維特征后接入經典的人工神經網絡中,主要起降維的作用。

  另外,在網絡的最開始幾層,往往越傾向於只學習圖像的局部特征,隨着層次的深入,慢慢會學到更加高層的特征,到最后學習全局特征。

3、模型介紹

  卷積網絡與人工神經網絡最大的不同就是在網絡的前面添加了卷積區。其中卷積區主要是卷積層和抽樣層交叉出現。

  1)卷積層(C層)。

  在進行卷積操作之前,首先需要確定濾波器的大小,對於上一層的局部感受野中的一個特征xi,我們使用卷積核kernelij來對其進行加權得到xi*kernelij,然后對其求和后加偏移。其計算公式如下:

  Mj:神經元j對應的局部感受野,

  Kernelijl:第l層的神經元i的第j個輸入對應的權值。(一個平面內的所有神經元共享同一個卷積核。)

  Bl:第l層的唯一偏移。

  卷積過程分析:

  特征圖的數目會有所增加,但是每次增加多少?這個問題類似人工神經網絡中每層隱藏節點的數目一樣,應該還沒有一種非常科學的方法來計算,只能進行大概的估計。另外,局部感受野的區域可以發生重疊。假如上一層的特征圖的大小為S*S,濾波器的大小為k*k,則需要滿足S>=k。每個神經元可以從上一層的特征圖的選擇方式有(S-k+1)*(S-k+1)種。當k=S時,此時的特征圖只有一個神經元。

  另外,C層中的一個神經元只能從上一個特征圖中提取特征,而不能從多個特征圖同時提取特征,當然,同一平面不同的神經元可以從不同的特征圖提取特征。在盡可能的情況下,C層的每個特征圖的從上一層的幾個特征圖中選取局部感受野,它不會只在一個特征圖,也不會在所有的特征圖中選擇特征,這樣能保持連接的非對稱性從而抽取不同的特征,並且也控制了連接數量。

  2)抽樣層,又稱為:池化層(pooling層)。

  抽樣層主要采用下采樣的方法。下采樣是指對信號進行抽取(連續-->離散),上采樣是下采用的逆過程,(離散-->連續),其中上采樣又稱增取樣,內插。

  在此處的下采樣的方法中,主要有三種方式:

  A)max-pooling(最大池化):選擇局部感受野中值最大的點。

  B)mean-pooling(均值池化):將局部感受野中的所有值求均值。

  C)Stachastic-pooling(隨機池化):從局部感受野中隨機取出一個值。

  采用這種抽樣方法的理論依據在於圖像的局部性原理,圖像每個像素點(或者說特征)周圍應該和該點具有較大的相似度。通過抽樣的方法能減少很多的特征,但同時也會損失不少的有用信息。在抽樣中,濾波器的大小一般取2*2比較合適,因為過大的濾波器會導致損失的信息較大。

  假如我們使用mean-pooling的采樣方法,即均值池化。然后將采樣出的信息乘以可訓練參數,再加上可訓練偏置,將得到的結果通過激活函數計算即可得到當前神經元的輸出。其中激活函數可以采用sigmoid函數或者tanh函數。

  第l層的輸出計算公式為:

  其中:第l層的可訓練參數。

  Bl:為可訓練偏置

  Mj:為神經元j對於的局部感受野。

  down(x):表示對x進行下采樣。

  若下采樣為mean-pooling,則:

  其中激活函數可以使用:

  Sigmoid函數:

  或者tanh函數:

  池化(采樣)過程分析:在抽樣的過程中,特征圖的數量保持不變,並且局部感受野無重疊,濾波器的大小一般為2*2,因為太大的濾波器會導致信息損失過多。假如上一層每個特征圖的大小為C*C,濾波器的大小為k*k,則經過池化后的特征圖的大小為:(C/k)* (C/k)。

  卷積層和池化層(抽樣層)的過程可以描述可以參考圖3.1。圖中的符號與上面公式中的符號有所差異。

圖3.1 卷積和抽樣過程[3]

4、卷積網絡樣例分析

  在此我們使用Yann lecun大神論文[1]中介紹卷積網絡的例子進行分析。由於原圖字跡模糊,故而此圖的文字經本人重新編輯。

圖 4.1 卷積神經網絡結構[1]

  下面,討論一下圖4.1中網絡各層之間的處理過程

  0)輸入層到S1層的工作

  在圖4.1.中沒有該過程,因為輸入的圖片已經是規格化的,但是在有些情況下需要這個步驟的。即當輸入為彩色圖像,或圖像大小不規范時,我們需要先對圖像進行一些預處理操作,比如將圖像進行灰度化,歸一化處理等。通過預處理后的圖像就可以進行下一步的卷積操作。

  1)輸入層到C1層

  此過程被稱為卷積操作。在輸入層,有一個大小為32*32的圖像,我們通過第一層卷積操作,得到C1層。在C1層,我們的每個神經元與輸入層中大小為5*5的局部感受野相連。這時,在輸入層的32*32大小的特征圖中有(32-5+1)*(32-5+1)=28*28種不同的選擇,我們將這28*28中不同的組合全部選擇加入到C1的特征圖中。

在C1層共有6個特征圖,其中權值的個數為:(5*5+1)*6個。

  2)從C1層到S2層

  此過程被稱為池化過程,又稱抽樣過程(下采樣)。此過程主要的目的在於減少上一層的特征數量。設濾波器大小為2,則經過池化過程,特征的數量減少2*2倍。在上一層特征圖的大小為28*28,故而經過此層抽樣后得到的特征圖大小為14*14。另外,抽樣過程一般不會增加特征圖的數量,只有卷積過程會增加特征圖的數目。、

  此過程需要的權值個數為:(1+1)*6,因為在將局部感受野作為輸入通過均值池化乘以可訓練參數再加上可訓練偏置,這只有兩個權值變量。總共6個特征圖,故而需要的權值數為:12個。

  3)從S2層到C3層

  此過程類似輸入層到C1層,我們將濾波器大小設為5*5,將C3層的特征圖的大小設為10*10。從S2中的每個特征圖中,有(14-5+1)*(14-5+1)=10*10種選擇,但是,我們將C3中的一個特征圖中所有的神經元從S2的不同特征圖中選取局部感受野,而不是將C2中的一個特征圖的全部可能選擇加入到C3中的一個特征圖中(有點拗口,理解就好)。簡單來說,就是C3中的每個特征面從S2的不同的特征面抽取特征,這樣可以抽取到不同類型的特征,也能控制連接的數量。

  此時需要的權值個數為:(5*5+1)*16=416個。

  4)從C3層到S4層

  此層為典型的池化(抽樣)過程,基本和C1層到S2層的過程類似。此層有16個特征圖,濾波器大小為2*2。通過此次抽樣,每個特征圖縮小了2*2=4倍,此過程需要權值個數為:(1+1)*16=32個。

  5)從S4層到C5層

  C5層共有120個特征圖,每個特征圖的大小為1*1,濾波器的大小為5*5。這相當於C5層的神經元與S4層中的一個特征圖是全連接的。

  至此,我們已經將原來的32*32個維度的圖像轉化成了只有120個特征的向量,這時可以使用人工神經網絡來進行處理。

  6)從C5層到F6層

  此過程類似人工神經網絡的權值連接,連接過程為全連接。在F6層共84個神經元,為何是84個,這和輸出層的節點數目有關,具體是啥關系本人尚未研究。

  7)從F6層到輸出層

  輸出層共10個節點,每個輸出節點是一個RBF(Radial Basis Function)單元,每個RBF單元計算輸入向量和參數向量之間的歐氏距離。輸入離參數向量越遠,則RBF輸出的越大。一個RBF輸出可以被理解為衡量輸入模式和與RBF相關聯類的一個模型的匹配程度的懲罰項。[1,3]

  對於圖4.1的詳細分析過程請參看文獻[1]。

  另外,為了加深理解,大家可以在研究一下DeepID的卷積過程,DeepID是香港中文大學的Sun Yi開發出來用來學習人臉特征的卷積神經網絡。這也是一個關於卷積神經網絡非常好的一個樣例,在此就不做分析。

圖 4.2 DeepID網絡結構圖

5、卷積訓練過程

  網絡的訓練過程和人工神經網絡有點類似,只是一些計算公式存在一些區別。具體訓練過程如下:[4]

  1)初始化。初始化權值,將所有權值初始化為一個較小的隨機數。

  2)從訓練集中取出一個樣例X輸入到網絡中,並給出它的目標輸出向量D。(訓練集通常是一個圖片庫)

  3)從前向后依次計算得到網絡的輸出Y。對於不同層的計算方法如下:

    A)對於卷積層,使用公式:

    //此處的kernel為卷積核,其實就相當於權向量。

    說明:關於卷積層的輸出值,最終需要添加sigmoid函數進行非線性話變換。

    B)對於抽樣層,其計算公式為:

    C)對於全連接層,可以直接使用多層人工神經網絡的方法計算即可。

    其中f(x)為sigmoid函數。

  4)反向依次計算各層的誤差項。

    A)輸出層的誤差。

    假如輸出層共有M個結點,則對輸出層的結點k的誤差項為:

    其中dk為結點k的目標輸出,yk為結點k的預測輸出。

    B)中間全連接層的誤差。

    假如當前層為第l層,共L個結點,第l+1層共M個節點。則對於第l層的節點j的誤差項為:

    其中:hj為結點j的輸出,Wjk為第l層的結點j到第l+1層的節點k的權值。

    C)對於卷積區的誤差項

    此處的誤差項的計算參考全連接層。

  5)從后向前逐層依次計算出各權值的調整量,在第n輪迭代的節點j的第k個輸入的權向量的改變量為:

  //式中的N為當前的輸入變量個數。

  //對於輸出層和中間層,權值的改變量的計算公式相同。

  閥值的改變量為:

  6)調整各權值,更新后的權值為:

  更新后的閥值為:

  7)重復上面2)~6),直到誤差函數小於設定的閥值。其中誤差函數為:

6、誤差分析[2,8]

  此部分見下一篇文章:“卷積網絡誤差分析”

 

7、總結

  卷積網絡是個比較抽象的東西,里面有較多的專業名字,理解起來比較費力,所以在文中最開始的地方就將一些同義不同名的專業名詞進行了整理,以便下文的理解。網絡中各層之間的關系看起來簡單,但要把里面真正弄清楚還是需要花較多的時間。

  總的來說卷積網絡相比神經網絡在權值數目上確實減少了很多,權值數量的減少意味着模型復雜度變得更加簡單,也使得模型不那么容易過擬合。

  

 

  本文斷斷續續的寫了很長時間,寫得有點混亂,不清楚的看我的參考文獻吧,另外,由於本人水平有限,若發現文中錯誤請指出!

 

 

 

參考文獻:

[1] Lecun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[C]// Proceedings of the IEEE1998:2278--2324.

[2] Bouvrie J. Notes on Convolutional Neural Networks[J]. Neural Nets, 2006.

[3] zouxy09, http://blog.csdn.net/zouxy09/article/details/8781543

[4] 徐姍姍. 卷積神經網絡的研究與應用[D]. 南京林業大學, 2013.

[5] nan355655600, http://blog.csdn.net/nan355655600/article/details/17690029

[6] 雨石, http://blog.csdn.net/stdcoutzyx/article/details/41596663

[7] loujiayu, http://www.cnblogs.com/loujiayu/p/3545155.html?utm_source=tuicool

[8] zouxy09, http://blog.csdn.net/zouxy09/article/details/9993371

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM