學習深度學習一定要學習CNN,而CNN的發展非常快,從 LeNet 到 AlexNet 到 VGG 到 GoogleNet 再到 ResNet 再到 DenseNet,學習這些經典的網絡首先需要了解卷積神經網絡的相關知識。
下圖就是LeNet的網絡結構,如果你不懂CNN,是完全不明白這到底是個什麼東西的。
Why CNN
首先,我們使用神經網絡可以實現迴歸求解,圖片的識別當然也是可以使用神經網絡來求解。
但之前我們使用了全連接的多層感知機,試想一下,一張圖片RGB共3個channels,維度爲1000 × 1000 × 3,那麼輸入就有300萬之多,若每個輸入單元與隱藏層的每個權重單元(假設共有1000個隱藏單元)進行相乘,那麼最後矩陣大小就有1000 × 300萬,即30億個參數,這是一個非常巨大的數字,所以使用全連接網絡是不現實的。
所以人們相出了一種卷積計算,先從邊緣檢測引入它。
邊緣檢測示例
從網上隨便一張圖片:
那麼它的邊緣檢測就是吳磊的半身輪廓。因爲圖片由像素組成,所以每個輪廓的像素和周圍的像素是不同的,如何進行檢測呢?這就需要提到卷積運算了。
二、重要概念
1. 卷積運算
卷積運算是將輸入和核函數進行對應相乘並相加,圖示如下:
而卷積運算有以下重要的思想:
- 稀疏交互:邊緣檢測在整個圖像上來說是稀疏的
- 參數共享:權重被計算多次
- 等變表示:
2. 卷積層的組成
卷積層由以下部分組成:
- 卷積計算:就是上面圖片所示
- 卷積核kernel
- 邊界填充padding
- 步長stride
當圖像輸入大小爲 ,卷積核大小爲 時,輸出的大小爲
當加入padding( )後,輸出的大小爲
若加入stride( ),則輸出的大小爲
3. 激活函數
在LeNet中使用的是sigmoid,也可以使用tanh,但是到了AlexNet中提出了使用ReLU這個激活函數,爲什麼呢?因爲它要比tanh更快達到低錯誤率。
4. Pooling
Pooling是爲了提取一定區域的主要特徵,並減少參數數量,一般採用兩種池化層:MaxPooling和AveragePooling。
下圖採用的是MaxPooling:
三、CNN結構組成
- 卷積層Conv
- 池化層Pooling
- 全連接層FC