卷積神經網路(Convolutional neural network,CNN),是一多層的神經網路架構,是以類神經網路實現的深度學習,在許多實際應用上取得優異的成績,尤其在影像物件識別的領域上表現優異。
傳統的
多層感知器(Multilayer Perceptron,MLP)可以成功的用來做影像識別,如之前
所介紹,可以用來做MNIST 手寫數字辨識,但是由於
多層感知器(Multilayer Perceptron,MLP)在神經元之間採用
全連接的方式(Full connectivity),當使用在較高解析度或是較高維度的影像或資料時,便容易發生維度災難而造成
過度適合(Overfitting)。
例如,考慮MNIST的手寫輸入資料為28x28解析度,考慮神經元
全連接的方式
(Full connectivity),連接到第一個隱藏層神經元便需要28x28=784個權重(Weight)。如果考慮一
RGB三通道色彩圖像輸入,如CIFAR-10為32x32x3的圖像解析度,連接到第一個隱藏層神經
元便需32x32x3=3072個權重(Weight)。那麼如果是200x200x3的圖像解析度,便需要120000
個權重,而這只是連接到隱含層的第一個神經元而已,如果隱含層有多個神經元,那麼連
接權重的數量必然再倍數增加。
像這樣子的網路架構,沒有考慮到原始影像資料各像素(pixel)之間的遠近,或是密集關係,只是一昧的將全部像素(pixel)當各個輸入的特徵值,連接到隱含層神經元,造成爆量增加的權重不僅是一種浪費,因為實際上不須這麼多的權重,效果不僅沒增加,只是增加了運算的負荷,而且很可能會造成
過度適合(Overfitting)。而
卷積神經網路(Convolutional neural network,
CNN)被提出來後,可以有效的解決此一問題。
事實上
卷積神經網路(Convolutional neural network,CNN)設計的目標就是用來處理以多陣列型態表達的資料,如以RGB三通道表達的彩色圖片。CNN和普通神經網路之間的一個實質差別在於,CNN是對原始圖像直接做操作,而傳統神經網路是人為的先對影像提取特徵(例如灰階化,二值化)才做操作。
CNN有三個主要的特點。
1.
感知區域(Receptive field):可採用3維的圖像資料(width,height,depth)與神經元連接方式,
實際上也可以直接採用2維的圖像資料,但隱含層內部的神經元只與原本圖像的某一小塊
區域做連結。該區塊我們稱之為
感知區域(Receptive field)。
2.
局部連結採樣(Local connectivity):根據上述
感知區域(Receptive field)的概念,CNN使用
過濾
器(filters)增強與該局部圖形空間的相關性,然後堆疊許多這樣子的層,可以達到非線性
濾波的功能,且擴及全域,也就是允許網路架構從原圖小區塊的較好的特徵值代表性,組
合後變成大區塊的特徵值代表性。
3.
共享權重(Shared weights):使用的
過濾器(filters)是可以重複使用的,當在原始圖像產生一
特徵圖(Feature Map)時,其權重向量(weights vector)及偏誤(bias)是共用的。這樣可以確保
在該卷積層所使用的神經元會偵測相同的特徵。並且即使圖像位置或是有旋轉的狀態,
仍然可以被偵測。
這三個特點使得CNN在圖像辨識上有更好的效果。在實際操作上的三個基礎分別是:
區域感知域(Local Receptive field),卷積(Convolutional ),池化(pooling)。
我們可以從下面圖形化的實際操作來理解它的意思。
卷積層(Convolutional Layer )
下圖1,2說明在卷積層的運作方式,假設原始影像為一32x32x3維度,我們可以任意給定一
卷積核(filter),其卷積核的值即為權重(weight)。其大小可以為5x5x3,3為與原影像有一樣的深度(RGB三通道),如果輸入影像為一灰階單通道色彩,那麼卷積核大小5x5即可。卷積核大小3x3或5x5或7x7...等等可以自訂,通常為奇數維度。
接著與原圖像相同的小區域計算點積,得到的一個值便是在新的feature Map的一個新元素值。卷積核會在原始的圖像或者前一個圖像(Map)按照Stride(步伐)的設定移動,直到掃描完全部圖像區域,這樣便會產生一個新的Feature Map。便是下圖圖3~圖5所示,在這個步驟中產生單一新feature Map所使用的權重W,也就是卷積核是共用的,並且共用同一個偏誤(bias),通常初始預設偏誤(bias)可以為0。這樣確保這一新的feature map偵測的是該原始圖像同一特徵。
<圖1>