卷積神經網絡

 

卷積神經網絡

1. 概述

        回想一下BP神經網絡。BP網絡每一層節點是一個線性的一維排列狀態,層與層的網絡節點之間是全連接的。這樣設想一下,如果BP網絡中層與層之間的節點連接不再是全連接,而是局部連接的。這樣,就是一種最簡單的一維卷積網絡。如果我們把上述這個思路擴展到二維,這就是我們在大多數參考資料上看到的卷積神經網絡。具體參看下圖:


                                 


       上圖左:全連接網絡。如果我們有1000x1000像素的圖像,有1百萬個隱層神經元,每個隱層神經元都連接圖像的每一個像素點,就有1000x1000x1000000=10^12個連接,也就是10^12個權值參數。


       上圖右:局部連接網絡,每一個節點與上層節點同位置附件10x10的窗口相連接,則1百萬個隱層神經元就只有100w乘以100,即10^8個參數。其權值連接個數比原來減少了四個數量級。


      根據BP網絡信號前向傳遞過程,我們可以很容易計算網絡節點的輸出。例如,對於上圖中被標註爲紅色節點的淨輸入,就等於所有與紅線相連接的上一層神經元節點值與紅色線表示的權值之積的累加。這樣的計算過程,很多書上稱其爲卷積。

       事實上,對於數字濾波而言,其濾波器的係數通常是對稱的。否則,卷積的計算需要先反向對摺,然後進行乘累加的計算。上述神經網絡權值滿足對稱嗎?我想答案是否定的!所以,上述稱其爲卷積運算,顯然是有失偏頗的。但這並不重要,僅僅是一個名詞稱謂而已。只是,搞信號處理的人,在初次接觸卷積神經網絡的時候,帶來了一些理解上的誤區。


        卷積神經網絡另外一個特性是權值共享。例如,就上面右邊那幅圖來說,權值共享,不是說,所有的紅色線標註的連接權值相同。這一點,初學者容易產生誤解。

        上面描述的只是單層網絡結構,前A&T Shannon Lab   的  Yann LeCun等人據此提出了基於卷積神經網絡的一個文字識別系統 LeNet-5。該系統90年代就被用於銀行手寫數字的識別。


2. 文字識別系統LeNet-5 

       在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字符的特徵,去掉對分類無關和自相關的特徵。然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。那麼,如何把特徵提取這一過程作爲一個自適應、自學習的過程,通過機器學習找到分類性能最優的特徵呢?


      卷積神經元每一個隱層的單元提取圖像局部特徵,將其映射成一個平面,特徵映射函數採用 sigmoid 函數作爲卷積網絡的激活函數,使得特徵映射具有位移不變性。每個神經元與前一層的局部感受野相連。注意前面我們說了,不是局部連接的神經元權值相同,而是同一平面層的神經元權值相同,有相同程度的位移、旋轉不變性。每個特徵提取後都緊跟着一個用來求局部平均與二次提取的亞取樣層。這種特有的兩次特徵提取結構使得網絡對輸入樣本有較高的畸變容忍能力。也就是說,卷積神經網絡通過局部感受野、共享權值和亞取樣來保證圖像對位移、縮放、扭曲的魯棒性。

    



       下面,有必要來解釋下上面這個用於文字識別的LeNet-5深層卷積網絡。

       1. 輸入圖像是32x32的大小,局部滑動窗的大小是5x5的,由於不考慮對圖像的邊界進行拓展,則滑動窗將有28x28個不同的位置,也就是C1層的大小是28x28。這裏設定有6個不同的C1層,每一個C1層內的權值是相同的。


       2. S2層是一個下采樣層。簡單的說,由4個點下采樣爲1個點,也就是4個數的加權平均。但在LeNet-5系統,下采樣層比較複雜,因爲這4個加權係數也需要學習得到,這顯然增加了模型的複雜度。在斯坦福關於深度學習的教程中,這個過程叫做Pool。


       3. 根據對前面C1層同樣的理解,我們很容易得到C3層的大小爲10x10. 只不過,C3層的變成了16個10x10網絡! 試想一下,如果S2層只有1個平面,那麼由S2層得到C3就和由輸入層得到C1層是完全一樣的。但是,S2層由多層,那麼,我們只需要按照一定的順利組合這些層就可以了。具體的組合規則,在 LeNet-5 系統中給出了下面的表格:

           


簡單的說,例如對於C3層第0張特徵圖,其每一個節點與S2層的第0張特徵圖,第1張特徵圖,第2張特徵圖,總共3個5x5個節點相連接。後面依次類推,C3層每一張特徵映射圖的權值是相同的。


       4.  S4 層是在C3層基礎上下采樣,前面已述。在後面的層由於每一層節點個數比較少,都是全連接層,這個比較簡單,不再贅述。


3.  簡化的LeNet-5系統


      簡化的LeNet-5系統把下采樣層和卷積層結合起來,避免了下采樣層過多的參數學習過程,同樣保留了對圖像位移,扭曲的魯棒性。其網絡結構圖如下所示:

                            

          簡化的LeNet-5系統包括輸入層的話,只有5層結構,而原始LeNet-5結構不包含輸入層就已經是7層網絡結構了。它實現下采樣非常簡單,直接取其第一個位置節點上的值可以了。

 1. 輸入層。MNIST手寫數字圖像的大小是28x28的,這裏通過補零擴展爲29x29的大小。這樣輸入層神經節點個數爲29x29等於841個。

 2. 第一層。由6張不同的特徵映射圖組成。每一張特徵圖的大小是13x13. 注意,由於卷積窗大小爲5x5,加上下采樣過程,易得其大小爲13x13. 所以,    第二層共有6x13x13等於1014個神經元節點。每一張特徵圖加上偏置共有5x5+1等於26個權值需要訓練,總共有6x26等於156個不同的權值。即總共有1014x156等於26364條連接線。

 3. 第二層。由50張不同的特徵映射圖組成。每一張特徵圖的大小是5x5. 注意,由於卷積窗大小爲5x5,加上下采樣過程,易得其大小爲5x5. 由於上一   層是由多個特徵映射圖組成,那麼,如何組合這些特徵形成下一層特徵映射圖的節點呢?簡化的LeNet-5系統採用全部所有上層特徵圖的組合。也就是原始LeNet-5 特徵映射組合圖的最後一列的組合方式。因此,總共有5x5x50等於1250 個神經元節點,有(5x5+1)x6x50等於7800 個權值,總共有1250x26等於32500條連接線。

4. 第三層。 這一層是一個一維線性排布的網絡節點,與前一層是全連接的網絡,其節點個數設爲爲100,故而總共有100x(1250+1)等於125100個不同的權值,同時,也有相同數目的連接線。

5. 第四層。這一層是網絡的輸出層,如果要識別0-9數字的話,就是10個節點。該層與前一層是全連接的,故而,總共有10x(100+1)等於1010個權值,有相同數目的連接線。

4. 卷積神經網絡的實現問題

      網上可以下載到很多關於卷積神經網絡的源碼,其中有matlab的,也有C++的。如果自己編程,需要注意些什麼問題呢?
 
      由於卷積神經網絡採用BP網絡相同的算法。所以,採用現有BP網絡就可以實現。開源的神經網絡代碼FAAN可以利用。這個開源的實現採用了一些代碼優化技術,有雙精度,單精度,定點運算三個不同的版本。
      由於經典的BP網絡是一個一維節點分佈排列,而卷積神經網絡是二維網絡結構。所以,要把卷積神經網絡的每一層,按照一定的順序和規則映射爲一維節點分佈,然後,按照這個分佈創建一個多層反向傳播算法的網絡結構,就可以按照一般的BP訓練算法去學習網絡參數。對於實際環境中新樣本的預測,也採用BP算法中相同信號前向傳遞算法進行。具體細節也可以參考網上的一個開源代碼,鏈接如下:
 

注:這個代碼在創建CNN的時候有個明顯的BUG,如果你看明白了我上面對簡化的LeNet-5的結構描述,一眼就會找出問題所在。
發佈了151 篇原創文章 · 獲贊 126 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章