---
# System prepended metadata

title: CNN 學習筆記1

---

# 摘要
CNN的全名為Convolutional Neural Network，中文為卷積神經網路。CNN對於影像的辨識有非常大成效，許多衍伸而來的影像辨識模型也都是以CNN作為架構。本文將會做為個人對於CNN的學習筆記，方便日後反覆審視。希望也能同時幫助到想要學習的人。

# 歷史
CNN是深度學習(Deep Learning)的一種，而深度學習的出現我們可以追朔到1944年，由兩位研究人員受到生物大腦的神經元運作方式所啟發，因而建立出來的數學模型。但一開始的雛型還相當粗糙，也有一些難題尚未解決，並且在50年代，電腦還不夠強大的狀況下，CNN的出現並沒有普及於世界各地，畢竟他的計算量相當龐大，以當時的電腦可能需要好幾天甚至好幾個月的時間才能做到。直到最近有人嘗試以GPU取代CPU作為運算並且效率大幅提升，才使得CNN開始大放異彩。
# 影像(Image)
在談CNN以前，為了一些剛踏入影像處理世界的人，我們先簡單了解一下什麼是影像，以及影像是如何構成的。
人類對於世界的認知是通過五官來取得的，其中透過視覺所取得的資訊又佔了80％。所以在AI領域中，電腦視覺是相當重要的一塊，因此也使CNN受到重視。 

### 影像的取得
對於電腦視覺來說，我們需要一個模擬人類眼球的器材來取得影像而這個器材就是相機。而人類大腦如何取得影像我相信高中生物課本都有教過，相機與眼球一樣，都有一個鏡頭(水晶體)去對焦我們要關注的物件，而物件反射出的光便會進入我們的鏡頭投影在感光元件(視網膜)上。那人眼與相機有哪些不同？
![](https://hackmd.io/_uploads/SJWrFtjo2.jpg)

對於人類來說，我們是透過上億個感光細胞，經過我們的大腦進行前處理、調色調光、前後幀的自動彌補功能以及時間序列的相關性等等處理後，我們的大腦才會有所認知。
那電腦呢？相機在取得影像時，並沒有通過這些複雜的前處理，而是直接將客觀的資訊透過感光元件中上百甚至上千萬個像素點接收，並將各個像素點轉換成亮度資訊後傳入電腦之中，而這過程稱之為數位化。
所以我們可以根據這些列出他們的優缺點，人眼在獲取這些訊息時，大腦會自動對他進行前處理並將這些畫面都會自動帶入主觀資訊，但這也使影像缺乏了客觀性，並且相機相較於人演比較沒有疲乏的問題(可能會過熱？)。

### 數位影像處理
就如前面提到的，相機所取得的影像不像大腦，可以快速的加入前處理，需要透過電腦的演算法才能得到我們關注的資訊，而這門技術就叫做數位影像處理，簡稱DIP(Digital Image Processing)。
DIP與我們的CNN可以說是有著不可分割的關係。NN的架構就是模擬人類大腦處理資訊的方式，而我們的影像要如何轉換成我們想要的資訊就是透過DIP去達成，再將影像送進我們的CNN中去訓練及學習。

介紹完影像以及影像處理後，我們就開始進入到我們的主題CNN了。

# 卷積(Convolutional)
CNN的C就是Convolutional，也就是卷積。我們這邊就直接開始介紹CNN中的卷積是如何運作的。
講卷積之前，我們先來講講mask(遮罩)，再CNN中mask又稱為kernel，kernel的功能是去萃取影像中的特徵，而kernel與image的運算就叫做卷積。
#### 特徵萃取的kernel
![](https://hackmd.io/_uploads/Syf_iERj3.png)

#### 卷積的運算方式
![](https://hackmd.io/_uploads/BJjV2NCs2.gif)

# 類神經網路(Neural Network)
類神經網路，又稱為神經網路、人工神經網路(Artificial Neural Network, ANN)，屬於一種非線性的統計模型，也是深度學習(Deep learning)的核心概念。如其名，他的起源就是模仿人類腦部神經元相互發出信號的運作模式建立模型，例如以下示意圖的概念：
![](https://hackmd.io/_uploads/rkTYt0e23.png)
![](https://hackmd.io/_uploads/SkyyqCgn2.png)
#### 是不是架構相當類似

接著我們就來分析類神經網路的內部架構:
首先，我們先利用幾個解釋變數(explanatory variable)或特徵(feature)，當成輸入層(input layer)，中間經過非線性activation function構成的隱藏層(hidden layer)轉換後，預測反應變數(response variable)或outcome Y。
PS 以上這些名詞我會在之後的章節介紹。
![](https://hackmd.io/_uploads/rkTasRx3h.png)

上面的這個模型，我們可以從圖中發現他只有一個隱藏層，所以我們就決定叫他單層類神經網路，那CNN所歸類在的深度學習，就代表著它擁有兩層或以上的隱藏層。

![](https://hackmd.io/_uploads/B1fph0lh3.png)

隱藏層數量的多寡與我們的模型有甚麼關係呢? 我們可以從以下的表格得到結論:

![](https://hackmd.io/_uploads/H1rj0Cg32.png)

隱藏層的數量並不是越多越好，如果過多的隱藏層會導致退化(Degradation)，使得準確度下降以及訓練時間拉長或者過擬合(over fitting)等問題(如下圖所示)。那你可能就會好奇，到底需要多少層的網路才是最好的呢?這其實就是經驗談。我們從下一章開始就會自己建構一個模型，並且對參數進行分析。

![](https://hackmd.io/_uploads/rJm2rGGhn.png)
