機器學習2021 — 卷積神經網路 (CNN) 架構與內容筆記
機器學習2021 — 卷積神經網路 (CNN) 架構與內容筆記¶
一、 CNN 的定義與設計哲學¶
1. 核心概念¶
- 定義: CNN (Convolutional Neural Network) 是一種神經網路 (NN) 架構的變形,專門用於處理影像相關任務。
- 設計目的: 透過改變 NN 架構,使結果更好。
- 模型偏差 (Model Bias): CNN 相比於完全連接的神經網路 (Fully Connected Network, FCN),具有更大的模型偏差 (Model Bias)。對於特定任務(如影像),這種更大的偏差反而能限制網路彈性,避免過度擬合 (overfitting),從而得到更好的結果。
2. 影像輸入表示¶
- 影像格式: 對於電腦而言,一張影像是一個三維的張量 (Tensor)。
- 其中兩維代表圖片的寬 (Width) 與高 (Height)(即解析度)。
- 第三維代表圖片的 Channel 數目。彩色圖片通常有 3 個 Channel (RGB),黑白圖片則只有 1 個 Channel。
- 傳統 FCN 處理方式: 為了將影像輸入傳統 NN,必須將這個三維張量拉直 (flatten) 變成一個巨大的向量。
- 例如,一張 $100 \times 100$ 且有 3 個 Channel 的圖片,會被拉直成一個長度為 $100 \times 100 \times 3$ 的向量。
- FCN 的問題: 如果輸入向量極長,第一層神經元的權重 (weight) 數量將非常龐大(例如 30,000 個輸入維度與 1,000 個神經元,權重總數高達 $3 \times 10⁷$)。參數過多會增加過度擬合 (overfitting) 的風險。
二、 CNN 的兩大簡化觀察與核心組件¶
CNN 透過對影像特性的兩大觀察,對 FCN 進行了結構上的簡化,從而減少了參數數量並提高了效率:
A. 觀察一:局部模式重要性 ->感受野 (Receptive Field)¶
- 觀察: 偵測重要模式(如鳥嘴、眼睛)不需要看完整的圖片,只需要查看圖片的一小部分即可。
- 簡化方法: 在 CNN 中,每個神經元只關心自己定義的、較小的輸入區域,這個區域被稱為感受野 (Receptive Field)。
- 感受野特性:
- 感受野的大小通常用核尺寸 (Kernel Size) 來描述,一般會看所有 Channel。
- 經典的核尺寸通常設定為 3*3。
- CNN 中的神經元只需要處理感受野範圍內的數值(例如 333 共 27 個數值),並對其給予權重,因此極大地減少了參數數量。
B. 觀察二:模式與位置無關 -> 參數共享 (Parameter Sharing)¶
- 觀察: 同一個模式(例如鳥嘴)可能會出現在圖片的不同區域(左上角或中間)。偵測相同模式的神經元,其實在做著重複的工作。
- 簡化方法: 讓不同感受野的神經元共享 (Share) 同一組參數(權重和偏差 Bias)。
- 即使共享參數,不同神經元的輸出也不會一樣,因為它們接收的輸入數值是不同的。
- 結果: Receptive Field 加上 Parameter Sharing 就構成了 卷積層 (Convolutional Layer)。
三、 卷積層 (Convolutional Layer) 的運作:濾波器 (Filter)¶
卷積層是 CNN 的核心,它將上述兩項簡化原則以濾波器的概念呈現。
濾波器 (Filter) / 核 (Kernel):
- 濾波器是共享的參數組。
- 它是一個張量,其大小定義為 Kernel SizeChannel Size。例如,對於彩色圖片,一個 33 的濾波器大小為 333。
-
每個濾波器的作用是去圖片中抓取某一種特定的模式 (pattern)。
卷積操作 (Convolution): -
這是指將濾波器掃過整張圖片的過程。
- 計算方式: 將濾波器內的數值與圖片對應範圍內的數值進行內積 (Inner Product),然後加上偏差 (Bias),通過激活函數 (如 ReLU) 得到輸出。
-
步幅 (Stride): 濾波器移動的距離稱為 Stride,通常設定為 1 或 2。Stide 較小(如 1 或 2)是為了確保感受野之間有重疊,避免漏掉出現在邊界上的 pattern。
邊緣處理 (Padding): 當濾波器掃描到圖片邊緣並超出範圍時,會使用 Padding(補值)的方式處理,最常見的是 Zero Padding(補 0)。 -
輸出:特徵圖 (Feature Map)
- 每一個濾波器掃完整張圖片後,會產生一組數值,這組數值稱為特徵圖 (Feature Map)。
- 如果一個卷積層使用了 N 個濾波器,輸出的特徵圖就會有 N 個 Channel。
- 層層堆疊: 卷積層可以堆疊多層。第二層卷積層的 Filter 高度,必須與第一層輸出的 Channel 數目相同。
- 感受野擴大: 即使所有 Filter 都保持 33 的大小,當卷積層疊得越深,網路在原始影像上考慮的範圍會越來越大(例如兩層 33 相當於在原圖上看到 5*5 的範圍),因此網路可以偵測到更大的 pattern。
四、 池化層 (Pooling Layer)¶
- 概念來源: 將較大的圖片進行降取樣 (down sample) 並不會影響物體的判讀(例如鳥圖縮小後仍是鳥)。
- 目的: 主要目的是把圖片變小,以減少運算量。
- 特性: 池化層本身沒有參數 (weight),因此它不需透過資料學習任何東西,更像是一個固定的操作符 (operator),例如激活函數 Softmax。
- Max Pooling: 常見的池化方法,會將數值分組(例如2*2 一組),然後選取其中最大的數值作為代表。
- 傳統架構: 經典 CNN 架構通常交替使用卷積層與池化層。
- 現代趨勢: 近年來,由於運算能力增強,許多網路設計會選擇丟棄池化層,採用全卷積神經網路 (Full Convolutional NN),因為池化(降取樣)可能犧牲偵測微細東西的效能。
五、 完整的 CNN 架構與應用流程¶
1. 經典影像辨識流程¶
一個經典的影像辨識 CNN 架構通常包含以下步驟:
- 輸入層: 輸入固定大小的圖片。
- 卷積與池化: 經過數次卷積層和池化層的交替處理。
- 拉直 (Flatten): 將最後一層池化或卷積的輸出(即特徵圖)拉直成一個向量。
- 全連接層 (FCN): 將該向量丟入一個或多個全連接層。
- 輸出層: 最終通過 Softmax 函數,得到分類結果(即各類別的機率分佈)。
2. 跨領域應用:圍棋 (AlphaGo)¶
- 輸入表示: 圍棋盤被視為一張 19*19 解析度的圖片。
- 每個位置用 48 個 Channel 來描述狀態(例如是否被叫吃、周圍子色等)。
- 適用 CNN 的原因: 圍棋與影像具有相同的特性:
- 局部模式重要性: 許多重要的棋局模式只需看小範圍(如 5*5)即可判斷。
- 位置無關性: 相同的戰術模式(如叫吃)可能出現在棋盤上的任何位置。
- 重要設計: AlphaGo 的網路架構(根據附錄揭示)沒有使用池化層 (Pooling)。這強調了網路設計必須根據任務特性來調整,不應盲目套用影像辨識的慣例。
3. CNN 的限制與進階解決方案¶
- 固有弱點: CNN 無法自然地處理影像的縮放 (scaling) 或旋轉 (rotation) 問題。對於 CNN 而言,相同形狀但不同大小或角度的圖片,在拉直成向量後數值完全不同,會被視為非常不相同的輸入。
- 傳統解決方案: 為克服此問題,訓練時必須使用 資料增強 (Data Augmentation),即對訓練圖片進行裁剪、放大、縮小或旋轉,讓 CNN 學習辨識不同變形下的物件。
- 進階架構 (Spatial Transformer Layer): 存在如 Spatial Transformer Layer (STL) 的架構,能夠解決 CNN 無法處理縮放與旋轉的問題。
資料來源
Comments
Loading comments…
Leave a Comment