卷積神經網路

卷積層

卷積層是 CNN 的基本構件:它是一整組可學習的小型濾波器,全部滑過同一個輸入,每一個各自產生自己的輸出網格。如果說單一濾波器是一個圖樣偵測器,那麼卷積層就是一整個偵測器委員會——其中一個可能對水平邊緣有反應,另一個對某種特定顏色色塊有反應,又一個對角點有反應——而這一層會把它們全部的答案疊在一起。前面的層學到簡單的圖樣(邊緣、紋理);更深的層以前面層的答案為輸入,學到複合圖樣(眼睛、車輪、文字)。

精確地說,一個 2D 卷積層把形狀為 (C_in, H, W) 的輸入張量——C_in 個通道、高 H、寬 W——映射成形狀為 (C_out, H_out, W_out) 的輸出。它持有 C_out 個濾波器,每個形狀為 (C_in, k, k),外加每個濾波器一個偏置(bias)。每個濾波器跨越所有輸入通道,並恰好產生一個輸出通道(一張特徵圖)。可學習參數量為 C_out 乘以 (C_in 乘 k 乘 k) 再加上 C_out 個偏置——關鍵在於它與 H、W 無關,因為同一個濾波器在每個空間位置都被重複使用。空間輸出尺寸為 H_out = floor((H + 2P - d(k-1) - 1) / S) + 1,其中 P 為填補、S 為步幅、d 為擴張率(寬度同公式)。

一個卷積層的行為由少數幾個超參數決定:卷積核大小 k(每個濾波器看多大的鄰域)、輸出通道數 C_out(要學多少種不同的特徵)、步幅 S(濾波器每次跳多遠,會做降採樣)、填補 P(邊界處理,控制輸出尺寸)、以及擴張率 d(卷積核中的間隔,會放大感受野)。卷積層幾乎不會單獨使用:它後面通常接一個正規化步驟(例如批次正規化 batch normalization)與一個非線性函數(例如 ReLU),而這個「卷積—正規化—激活」三件組就是在 VGG、ResNet 等架構中被堆疊數十到數百次的基本單元。

在一張 3x224x224 的 RGB 影像上套用 Conv2d(in=3, out=16, kernel=3, stride=1, padding=1),輸出為 16x224x224:16 張特徵圖、空間尺寸不變(填補 1 搭配卷積核 3 會保持尺寸),參數量為 3*16*9 + 16 = 448 個。

為何重要:參數量與輸入解析度無關。一個輸入 64 通道、輸出 128 通道的 3x3 卷積層,不論影像是 32x32 還是 4000x3000,參數量都是 64*128*9 + 128 = 73,856 個。正是這種權重共享,讓同一個訓練好的 CNN 能在許多尺寸的影像上運行,也是它相較於全連接網路更省資料(data-efficient)的根本原因。

又称
conv layerConv2d