初始卷積神經網絡CNN

學習深度學習一定要學習CNN,而CNN的發展非常快,從 LeNet 到 AlexNet 到 VGG 到 GoogleNet 再到 ResNet 再到 DenseNet,學習這些經典的網絡首先需要了解卷積神經網絡的相關知識。

下圖就是LeNet的網絡結構,如果你不懂CNN,是完全不明白這到底是個什麼東西的。
在這裏插入圖片描述


Why CNN

首先,我們使用神經網絡可以實現迴歸求解,圖片的識別當然也是可以使用神經網絡來求解。

但之前我們使用了全連接的多層感知機,試想一下,一張圖片RGB共3個channels,維度爲1000 × 1000 × 3,那麼輸入就有300萬之多,若每個輸入單元與隱藏層的每個權重單元(假設共有1000個隱藏單元)進行相乘,那麼最後矩陣大小就有1000 × 300萬,即30億個參數,這是一個非常巨大的數字,所以使用全連接網絡是不現實的。

所以人們相出了一種卷積計算,先從邊緣檢測引入它。


邊緣檢測示例

從網上隨便一張圖片:

那麼它的邊緣檢測就是吳磊的半身輪廓。因爲圖片由像素組成,所以每個輪廓的像素和周圍的像素是不同的,如何進行檢測呢?這就需要提到卷積運算了。


二、重要概念

1. 卷積運算

卷積運算是將輸入和核函數進行對應相乘並相加,圖示如下:

而卷積運算有以下重要的思想:

  • 稀疏交互:邊緣檢測在整個圖像上來說是稀疏的
  • 參數共享:權重被計算多次
  • 等變表示f(g(x))=g(f(x))f(g(x)) = g(f(x))

2. 卷積層的組成

卷積層由以下部分組成:

  • 卷積計算:就是上面圖片所示
  • 卷積核kernel
  • 邊界填充padding
  • 步長stride

當圖像輸入大小爲 n×nn×n,卷積核大小爲 f×ff×f 時,輸出的大小爲 (nf+1)×(nf+1)(n-f+1) × (n-f+1)
當加入padding( pp )後,輸出的大小爲 (n+2pf+1)×(n+2pf+1)(n+2p-f+1) × (n+2p-f+1)
若加入stride( ss ),則輸出的大小爲 (n+2pf)s+1×(n+2pf)s+1\lfloor{\frac{(n+2p-f)}{s}+1}\rfloor × \lfloor{\frac{(n+2p-f)}{s}+1}\rfloor

3. 激活函數

在LeNet中使用的是sigmoid,也可以使用tanh,但是到了AlexNet中提出了使用ReLU這個激活函數,爲什麼呢?因爲它要比tanh更快達到低錯誤率。

4. Pooling

Pooling是爲了提取一定區域的主要特徵,並減少參數數量,一般採用兩種池化層:MaxPoolingAveragePooling
下圖採用的是MaxPooling:


三、CNN結構組成

  1. 卷積層Conv
  2. 池化層Pooling
  3. 全連接層FC
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章