卷積神經網路Convolutional Neural Networks(CNN)是專門使用在與影像有關的網路。
Image classification
在影像辨識中,我們通常採用one-hot vector表示不同的類別。
EX: 狗: [1 0 0......]T, 貓: [0 1 0......]T, 鳥: [0 0 1]T,...。 可以辨識幾種,就會有幾種dimension。
我們可以先了解一下圖片的組成: 一張圖片擁有3維的tensor。一維長一維寬,剩下一維是Channel。那Channel由RGB三種顏色組成,所以是3 CH。
那只要我們能將圖片轉換成向量,就能成為model的輸入。所以根據我們擁有的長寬和Channel,我們將這三個元素拉長成向量,每一維以顏色的解析度強度做為輸入數值。
Ex: 假設長:100, 寬: 100。
則向量則變成[R1 R2 R3 ... R100 G1 G2 G3 ... G100 B1 B2 B3 ... B100]T。
接著我們將向量套入到Fully Connected Network,就會有100x100x3個xi做為輸入的長度。
那再假設我們有1000個neuron,那同時我們就會擁有1000x100x100x3個Weight。
Receptive Field
但這麼多weight有可能造成overfitting的風險。而在影像本身,我們也不一定需要使用fully connected Network,也就是不需要每個input 的dimension都考慮,不需要每個dimension都配給一個weight。
-> 我們可以根據影像中某些Patten進行觀察,去決定結果是什麼動物。這樣的話就不需要看完整的圖片,只要專注在特定位置即可。而這些特定位置我們稱為Receptive field,由使用者決定。
那這些Receptive field可大可小,也可以選擇重複的Receptive field,甚至只考慮某一個Channel也可以。
Typical Setting
以下是一些典型的recptive field的設定:
Parameter Sharing
但會有個問題,就是如果neuron偵測的特徵不在我們預設的recptive field範圍內怎麼辦?如果我們把每一塊Rceptive field都加上一樣的特徵偵測,那會不會有太多weight了?所以這時候就可以使用Parameter Sharing的機制。
讓兩個recptive field都共享同樣的weight W1, W2, W3, ...。那只要是被共享的參數,我們會稱為filter,所以可以把W1, W2, W3稱為filter1, filter2, filter3。
*老師的舉例:假設每個系都需要學習跟程式相關的課程,總不能讓每個系都開程式的課,會耗費太多資源,但我們可以開設通用課程,讓需要的系所都可以選擇。
總結:Receptive field + Parameter Sharing = CNN
所以假設我們有64個neuron,那最後就會與圖片交互後,產生64組數值。那在過程中,我們也可以假設產生出的64組數值疊加起來成為新的圖片,再疊加一層,對這一層使用相同的filter進行分析。重複這樣的方式,其實同時也會偵測到越來越大範圍的圖片內容,而不會只是一開始的3x3。
Pooling是一種過將圖片縮小,但內容完全沒變的方法。之前會與CNN搭配使用以節省計算量。
作法與過程:
以上是關於今天的CNN課程整理~