---
# System prepended metadata

title: '【Note】Deep Learning Neural Network : 卷積神經網路 (CNN)'
tags: [DeepLearning, 筆記]

---

# 【Note】Deep Learning Neural Network : 卷積神經網路 (CNN)
###### tags: `DeepLearning` `筆記`
## CNN概念圖
![](https://i.imgur.com/5t4xEtF.png)
## CNN核心結構
一個基本的CNN由以下四個部分為核心元素
1. Convolution layer
2. Pooling layer 
3. Activation function
4. Fully connected layer
![](https://i.imgur.com/sbpK46T.png)
> 一般Neural Network (left) vs. Convolution Neural Network (right)
## Convolution Layer
* 要點 : 
     * 使用複數filter提取input的不同局部特徵作為下一層的features
* 組成 : 
     * Input Data ( W x H x C )
     * Filter (or Kernel)
     * Feature Map
* Convolution Calculation
![](https://i.imgur.com/kCMVZ56.png)
利用設定好的filter對input data做convolution運算，概念上可以將每個filter視為一組weights，對所有input X(i)進行element-wise multiplication。
Output feature map的大小計算公式 : ![](https://i.imgur.com/OGhmnk5.png)，f為filter大小
有n個filter就會形成n個feature map，同時下一層的channel也會是n
* 參數共享
當我們希望某些不同的receptive field偵測的是一張圖片中相似的特徵時，我們可以透過共享參數的方式來減少重複neuron的數量，意即共用filter
> Stride : 指filter map移動的距離，可不為1
> Padding : 指filter可以超出input邊界進行計算，此時超出的範圍補上的數據稱為padding
## Pooling Layer
* 要點 : 
     * 對取得的features做downsampling，減少parameters以避免overfitting，在減少計算資源的同時也保留input data的重要特徵
     * 以filter與stride作為參數
     * 近年來因為計算資源充裕，加上偵測細微特徵的需求，有些model會選擇不使用pooling layer
* Max Pooling
     * 取該filter區域的最大值
     * 特色 : 喪失較多全局資訊，但保留顯著特徵
* Average Pooling
     * 取該filter區域的平均值
     * 特色 : 保留較完整資訊，但特徵較為不明顯
## Activation Function
* 這邊常常使用的Activation function有 : ReLU、Sigmod
![](https://i.imgur.com/vpafC9V.png)
## Fully Connected Layer
* 要點 : 
     * 將取得的feature mapping到樣本(label)空間做classification
     * 進入fully connected layer之前先進行dropout可以避免overfitting
     * Flatten : 將matrix轉為vector data，概念上類似將矩陣鋪平，運算類似convolution
     * 不同layer間的節點完全互連，傳遞過程中進行weight matrix multiplication
     * 經過softmax後即可傳至output layer並進行perdiction
     * 最後一層output layer的節點數量與class數量相同



---

暫時這樣，有缺漏再補充