天天看點

1. CNN卷積網絡-初識

1. CNN卷積網絡-初識

2. CNN卷積網絡-前向傳播算法

3. CNN卷積網絡-反向更新

1. 前言

卷積神經網絡是一種特殊的深層的神經網絡模型,它的特殊性展現在兩個方面,

  1. 它的神經元間的連接配接是非全連接配接的,
  2. 同一層中某些神經元之間的連接配接的權重是共享的(即相同的)。

它的非全連接配接和權值共享的網絡結構使之更類似于生物 神經網絡,降低了網絡模型的複雜度(對于很難學習的深層結構來說,這是非常重要的),減少了權值的數量。

2. CNN卷積網絡結構

我們先重整體的角度觀察一下CNN卷積網絡的結構:

1. CNN卷積網絡-初識

上圖的結構從左到右是,輸入層、卷積層(Convolution Layer)、池化層(Pooling layer)、卷積層、池化層、全連接配接層(Fully Connected Layer)、全連結層、輸出層。

卷積層+池化層的組合可以在隐藏層出現很多次,上圖中出現兩次。而實際上這個次數是根據模型的需要而來的。當然我們也可以靈活使用使用卷積層+卷積層,或者卷積層+卷積層+池化層的組合,這些在構模組化型的時候沒有限制。但是最常見的CNN都是若幹卷積層+池化層的組合,如上圖中的CNN結構。

在若幹卷積層+池化層後面是全連接配接層(Fully Connected Layer, 簡稱FC),全連接配接層其實就是我們前面講的DNN結構,隻是輸出層使用了Softmax激活函數來做圖像識别的分類,這點我們在DNN中也有講述。

從上面CNN的模型描述可以看出,CNN相對于DNN,比較特殊的是卷積層和池化層,如果我們熟悉DNN,隻要把卷積層和池化層的原理搞清楚了,那麼搞清楚CNN就容易很多了。

3. 卷積層(Convolution Layer)

卷積層的實作是通過一個卷積核的方式實作的。一個卷積層對應一個卷積核,通過卷積核實作權值共享。

通過一張圖我們就能了解卷積層的工作原理。

1. CNN卷積網絡-初識

我們卷積層的輸入是\([3,4]\)的矩陣,卷積核是\([2,2]\)的矩陣,輸出是\([2,3]\)的矩陣。每一個輸出的值都是通過輸入層的\([2,2]\)的值和卷積核相乘的和。

再舉一個動态的卷積過程的例子如下:

我們有下面這個綠色的\([5,5]\)輸入矩陣,卷積核是黃色的\([3,3]\)的矩陣。卷積的步長是一個像素。則卷積的過程如下面的動圖。卷積的結果是一個\([3,3]\)的矩陣。

1. CNN卷積網絡-初識
1. CNN卷積網絡-初識

通過這幾個卷積層的例子想必大家對卷積核的計算方式有了一定的了解。

卷積層的公式如下:

\[s(i,j)=(X*W)(i,j) + b = \sum\limits_{k=1}^{n\_in}(X_k*W_k)(i,j) +b

\]

其中,\(n\_in\)為輸入矩陣的個數,或者是張量的最後一維的維數。\(X_k\)代表第\(k\)個輸入矩陣。\(W_k\)代表卷積核的第\(k\)個子卷積核矩陣。\(s(i,j)\)即卷積核$W$3對應的輸出矩陣的對應位置元素的值。

卷積層的輸出經常加一個激活函數,使的整個網絡具有非線性的結構。

4. 池化層(Pooling Layer)

如果說卷積層已經了解了,那麼池化層就更好了解了。池化層的任務是選出最具代表性的特征,同時縮小資料的次元,使得後面的的網絡處理起來更快,效率更高。池化層主要是通過一個過濾器去掃描輸入的資料,從每次掃描的過程中生成輸出資料。現在池化層主要生成資料的方式有2種

  1. 最大池化層(max pooling layer):max pooling是選擇過濾器中最大的那個值。
  2. 平均池化層(average pooling layer):選擇過濾器中所有值的平均值作為輸出。

介紹了這麼多,還不如來張圖簡明扼要。

1. CNN卷積網絡-初識

5. 總結

在上面提到的卷積層和池化層還有兩個概念沒有提到。

  1. 步長(stride):stride的意思是過濾器的每次移動的步長,它直接影響最後輸出的資料的次元。
  2. padding:padding的意思是給資料周圍補0,使得周圍的資料和中間的資料權重相同。

了解了stride和padding,我們就能計算出輸出的次元:

輸入:資料次元為\([W,W]\),Filter大小\([F,F]\),步長\(S\),padding的像素數\(P\),可以得出\([N,N]\)。

\[N = \frac{W - F + 2P }{S} + 1

繼續閱讀