1. 程式人生 > >卷積神經網路(cnn)學習筆記1:入門

卷積神經網路(cnn)學習筆記1:入門

卷積神經網路

      卷積神經網路(Convolutional Neural Network,CNN)是深度學習技術中極具代表的網路結構之一,在影象處理領域取得了很大的成功,在國際標準的ImageNet資料集上,許多成功的模型都是基於CNN 的。CNN相較於傳統的影象處理演算法的優點之一在於,避免了對影象複雜的前期預處理過程(提取人工特徵等),可以直接輸入原始影象。
       影象處理中,往往會將影象看成是一個或多個的二維向量(黑白圖片,只有一個顏色通道;如果是RGB表示的彩色圖片則有三個顏色通道,可表示為三張二維向量)。傳統的神經網路都是採用全連線的方式,即輸入層到隱藏層的神經元都是全部連線的,這樣做將導致引數巨大,使得網路訓練耗時甚至難以訓練,而CNN則通過
區域性連線,權值共享等方法避免這一困難,有趣的是這些方法都是受到現代生物神經網路相關研究的啟發(感興趣可以閱讀以下部分)


下面重點介紹下CNN中的區域性連線(Sparse Connectivity)和權值共享(Shared Weights)方法,理解它們很重要。

區域性連線與權值共享

下圖是一個很經典的圖示,左邊是全連線,右邊是區域性連線。




    對於一個1000 × 1000的輸入影象而言,如果下一個隱藏層的神經元數目為10^6個,採用全連線則有1000 × 1000 × 10^6 = 10^12個權值引數,如此數目巨大的引數幾乎難以訓練;而採用區域性連線,隱藏層的每個神經元僅與影象中10 × 10的區域性影象相連線,那麼此時的權值引數數量為10 × 10 × 10^6 = 10^8,將直接減少4個數量級。

      儘管減少了幾個數量級,但引數數量依然較多。能不能再進一步減少呢?能!方法就是權值共享。具體做法是,在區域性連線中隱藏層的每一個神經元連線的是一個10 × 10的區域性影象,因此有10 × 10個權值引數,將這10 × 10個權值引數共享給剩下的神經元,也就是說隱藏層中10^6個神經元的權值引數相同,那麼此時不管隱藏層神經元的數目是多少,需要訓練的引數就是這 10 × 10個權值引數(也就是卷積核(也稱濾波器)的大小),如下圖。


      這大概就是CNN的一個神奇之處,儘管只有這麼少的引數,依舊有出色的效能。但是,這樣僅提取了影象的一種特徵,如果要多提取出一些特徵,可以增加多個卷積核,不同的卷積核能夠得到影象的不同對映下的特徵,稱之為

Feature Map。如果有100個卷積核,最終的權值引數也僅為100(每個卷積核需要的引數數目) × 100 (卷積核數)= 10^4個而已。另外,偏置引數也是共享的,同一種濾波器共享一個。

      此外,隱藏層的引數個數和隱藏層的神經元個數無關,只和濾波器的大小和濾波器種類的的多少有關。那麼隱藏層的神經元個數怎麼確定呢?它和原影象,也就是輸入的大小,濾波器的大小和濾波器在影象中的滑動步長都有關!例如,我的影象是1000*1000畫素,而濾波器的大小是10*10,假設濾波器沒有重疊,也就是補償為10,這樣隱藏層的神經元個數就是(1000*1000)/(10*10)=100*100個神經元。

    需要注意的一點是,上面的討論都沒有考慮每個神經元的偏置部分。所以權值個數需要加1 。這個也是同一種濾波器共享的。

      卷積神經網路的核心思想是:區域性感受野(local field),權值共享以及時間或空間亞取樣這三種思想結合起來,獲得了某種程度的位移、尺度、形變不變性。

轉載來源:http://www.jeyzhang.com/cnn-learning-notes-1.html