哇~ Convolution Neural Network(卷積神經網絡) 這麼特別!

CHIEN CHUN-YU
DAAI
Published in
6 min readDec 15, 2018

卷積神經網絡簡稱 CNN 或 ConvNets , 屬於 Deep Learning 中非常重要的運用之一, 本章節主要會針對基礎觀念進行解說以及讓讀者更快理解卷積神經網絡的基礎架構與運作流程.

CNN 概念流程圖

上圖可看出主要為一個數字辨識的流程圖, 而整個流程主要分為 feature extraction 和 classification 兩大部分, 而 feature extraction(特徵擷取) 又可分為 convolution layer 和 pooling layer 兩層, 至於 classification(分類) 部分則是 fully connected layer 整體而言就是類似一般常見的 neural network 基礎架構囉.

Feature Extraction (特徵擷取)

Convolution Layer (卷積層)

Convolution layer 概念圖

假設 input image 為 6*6*3(RGB), CNN 參數中會要求指定一個 filter (feature detector)數量, 上圖中為一個 filter 示意圖, 而 filter 中會指定 kernel(filter) size、padding、stride.., 如圖 kernel size 為 3*3, channel 為 3 也就是我們所說的 depth, 而 stride(左至右或上至下移動的步數) 為 1, padding 部分則是 TensorFlow 中的 VALID 也就是不做任何的 padding(填充), 故所產生的 Feature Maps(圖中的 Result) 為 4*4*1 大小的 image, 那 feature maps 中的 values 是怎麼來的呢? 可看到我們將 input 和 filter 做內積 4*1 + 9*0 + 2*-1 + 5*1 + 6*0 + 2*-1 + 2*1 + 4*0 + 5*-1 = 2, 而以上整個過程如果是 4個 filter 就會產生 4 個 feature map, 而此時 depth 就會是這 4 feature maps 的堆疊.

Property(屬性):

  1. 同樣的 pattern 會出現在圖片的不同區域(the same patterns appear in different regions)
  2. 偵測一個 pattern 不需要看整張圖(some patterns are much smaller than the whole image)

補充: padding 在 TensorFlow 中可分為 SAME 和 VALID 兩種, 假設 Stride 為 1 時 SAME 所產生的 feature map 大小會與 input image 一樣大, 至於 VALID 通常會產生較小的 image.

Pooling Layer (池化層)

Max Pooling 概念圖

池化層主要進行 sub sampling 的任務, 如圖所示將 convolution layer 所產生的 feature maps 進行 Max Pooling(或使用 average pooling 也可)而所使用的 stride 為 2, 可看出將 feature maps 由右上角開始取出 2*2 的 metric 中的最大值(左->右, 上->下), 此步驟目的是降低雜訊且減少參數為目標, 可提升 CNN 整體效能及降低計算量, 是不可或缺的過程.

Property(屬性):

  1. 進行 sub sampling 一定的情況下並不會改變所偵測的特徵物件(sub sampling the pixels will not change the object)

Rectified Linear Units (線性整流單元)

ReLU 示意圖

CNN 中主要以 Relu 做為 activation function, 它的數學原理也就是將圖片上的所有負數轉為 0, 不但可以增快整體訓練速度且更容易淬煉出物體的形狀.

Classification(分類)

Fully Connected Layer

Flattening 概念圖

Fully connected 由上圖明顯看出主要是進行 Flattening 平坦化, 將最後所產生的 Image 二維矩陣一層一層的轉成一維, 變成 vector 的形式在丟入 fully connected neural network 中, 而 fully connected 的最後一層的 activation function 通常會使用 Softmax() 作為輸出, 並在計算完 loss 後在進行類似 back propagation 的方式來反向訓練 weight 和 bias(這邊的 weight 和 bias 包含 filter 中 和 fully connected 中的參數).

Implementation(TensorFlow 實作)

以下是透過 TensorFlow 所撰寫的 Convolution Neural Network ,建議對 TensorFlow 有基礎相關概念在進行閱讀。

Eetra(補充)

那….Nature Language Process 呢?上面的介紹主要是 ImageNet Classification 運用為主,而如果你想運用在 Text Classification 的話, 建議可以先參考 Yoon Kim paper 並做更多其他的運用囉^^

非常感謝你閱讀完這篇文章,如果你覺得這篇文章對你有幫助, 請在底下幫我拍個手 ^^ 如果你有任何問題或者文章內容有誤請務必留言或寄信給我, 這樣對我幫助會很大, 再次感謝你~

信箱: ncku4alex@gmail.com

Github: https://github.com/Alex-CHUN-YU

Reference

  1. How do Convolutional Neural Networks work?
  2. Deeplearning — Overview of Convolution Neural Network
  3. https://github.com/yoonkim/CNN_sentence

--

--

CHIEN CHUN-YU
DAAI
Editor for

Hi~ My name is Alex ! I am a data engineer ! Data include data waiting for you to explore. BTW, a true master is an eternal student!