跳轉到

05.1 CNN 與權重共享#

本章導讀#

全連接網路看一張 \(224\times224\) 的圖片,第一層就要 \(224^2\) 個權重——太浪費。 1989 年,LeCun 觀察到圖片有一個天然的數學結構:平移對稱。 貓在圖片左上角和右下角都是貓。把這個對稱「寫進」網路結構,就是卷積神經網路(CNN)。

淺顯說明#

全連接像「每個像素派一個專門偵測員」;CNN 像「一個偵測員拿著濾片在整張圖上掃描」:

  • 濾片(kernel)很小,例如 \(3 \times 3\) ,只有 9 個權重。
  • 這 9 個權重在整張圖上共享——左上角掃到的邊、右下角掃到的邊,用同一組權重。
  • 濾片滑過的地方輸出一個數字:「這裡有沒有我偵測的模式」。

權重共享 = 參數大幅減少 + 平移等變性。這是「把對稱性寫進架構」的第一課。

正規理論#

離散二維卷積#

影像 \(I\) 與卷積核 \(K\) 的(數學)卷積:

\[ (I * K)(x, y) = \sum_{m}\sum_{n} I(x - m, y - n)\, K(m, n) \]

深度學習框架實際用的是互相關(cross-correlation),核不翻轉:

\[ (I \star K)(x, y) = \sum_{m=0}^{k-1}\sum_{n=0}^{k-1} I(x + m, y + n)\, K(m, n) \]

兩者等價(學習時核是否翻轉不影響表達能力)。多通道輸入 \(C_{\text{in}}\) 、多個濾片 \(C_{\text{out}}\) :

\[ O_{j}(x,y) = \phi\!\left(\sum_{c=1}^{C_{\text{in}}} (I_c \star K_{cj})(x,y) + b_j\right) \]

平移等變性與群論觀點#

設平移算子 \((T_{\mathbf{v}} I)(\mathbf{x}) = I(\mathbf{x} - \mathbf{v})\) ,平移構成群 \(\mathbb{R}^2\) (更精確地,圖像的離散平移群 \(\subset SE(2)\) 的離散子群)。卷積與平移可交換:

\[ T_{\mathbf{v}}(I * K) = (T_{\mathbf{v}} I) * K \]

證明: \((T_{\mathbf{v}}(I*K))(x,y) = (I*K)(x - v_x, y - v_y) = \sum_{m,n} I(x - v_x - m, y - v_y - n)K(m,n) = ((T_{\mathbf{v}}I)*K)(x,y)\) 。 \(\blacksquare\)

意義: - 等變性:輸入平移 → 特徵圖同樣平移。特徵出現在何處,都會被同一濾片捕捉。 - 不變性:池化(pooling)把等變性進一步壓成不變性——平移後輸出(大致)不變:

\[ \mathrm{pool}(T_{\mathbf{v}} F) \approx \mathrm{pool}(F) \]
  • 這是「架構先驗」思想的典範:把已知對稱群寫進結構,學習只在剩餘自由度上進行。

感受野與層疊#

\(k \times k\) 濾片、步距 \(s\) 、 \(l\) 層後的感受野半徑約為 \(1 + \sum (k-1)s\) 。 層疊小濾片比一個大濾片更省參數、更多非線性(兩層 \(3\times3\) 感受野 \(5\times5\) ,參數 \(18 < 25\) )。

從 PCA 到摺積#

圖像統計的兩個經驗事實支撐 CNN: 1. 局部相關性:相鄰像素高度相關(局部性 → 小濾片)。 2. 統計平移不變:邊緣/紋理的統計在何處都相似(平移對稱 → 權重共享)。 最早的主成分分析(PCA)顯示自然影像的主要成分正是局部邊緣濾片——CNN 的濾片在學什麼,PCA 早已預言。

簡易範例:手算 \(3\times3\) 摺積#

影像與邊緣濾片:

\[ I = \begin{pmatrix} 1 & 0 & 0 \\ 1 & 0 & 0 \\ 1 & 0 & 0 \end{pmatrix}, \qquad K = \begin{pmatrix} 1 & -1 \\ 1 & -1 \end{pmatrix} \]

輸出(步距 1):

  • \((0,0)\) : \(1\cdot1 + 0\cdot(-1) + 1\cdot1 + 0\cdot(-1) = 2\)
  • \((0,1)\) : \(0\cdot1 + 0\cdot(-1) + 0\cdot1 + 0\cdot(-1) = 0\)
  • \((1,0)\) : \(2\) , \((1,1)\) : \(0\)
\[ O = \begin{pmatrix} 2 & 0 \\ 2 & 0 \end{pmatrix} \]

垂直邊的位置輸出大——濾片偵測到了邊緣。若把邊移到右邊, \(O\) 的大值也移到右邊——平移等變性。

歷史典故#

習題#

  1. 對本節例題,把影像改為 \(I(x,y)\) 的水平邊(上半 1、下半 0),計算輸出。
  2. 證明:兩層 \(3\times3\) 摺積(步距 1)的感受野是 \(5\times5\) ,參數 \(18\) 個;一層 \(5\times5\) 需 \(25\) 個。
  3. 討論:旋轉對稱時,卷積還等變嗎?需要什麼修正?(提示:群論的 group equivariant CNN。)

補充#

1. 數學推導證明#

證明(習題 2):兩層 \(3\times3\) 摺積的感受野是 \(5\times5\) ,參數 18 個。

第一層 \(3\times3\) 摺積、步距 1:輸出位置 \((x, y)\) 依賴輸入的 \(\{x, x+1, x+2\} \times \{y, y+1, y+2\}\) ,即 \(3\times3\) 感受野。第二層再疊 \(3\times3\) :輸出 \((x, y)\) 依賴第一層特徵圖的 \(3\times3\) 區域,每個又各依賴輸入的 \(3\times3\) 區域,聯集為

\[ \{x-1, \dots, x+3\} \times \{y-1, \dots, y+3\} \]

即 \(5\times5\) 感受野。參數:兩層各 \(3\times3 = 9\) 個權重(不含偏置),共 \(2 \times 9 = 18\) 個;一層 \(5\times5\) 需 \(25\) 個。感受野相同但參數 \(18 < 25\) ,且多了一次非線性 \(\phi\) ——層疊小濾片更省、更強。 \(\blacksquare\)

證明:平移等變性在「加偏置與非線性」下保持。

設特徵圖 \(F = \phi(I \star K + b)\) ,其中 \(\phi\) 逐元素作用。平移算子只移動像素座標、不改變數值,故

\[ T_{\mathbf{v}}\big(\phi(I \star K + b)\big) = \phi\big(T_{\mathbf{v}}(I \star K) + b\big) = \phi\big((T_{\mathbf{v}} I) \star K + b\big) = (T_{\mathbf{v}} F) \]

第一個等號因 \(\phi\) 逐元素(與座標無關),第二個等號是本節已證的卷積-平移交換律。所以「摺積 + 偏置 + 逐元素非線性」整層都是平移等變的——這正是 CNN 可以層疊仍保持等變性的原因。 \(\blacksquare\)

2. 簡易範例#

手算水平邊(習題 1):把本節例題的影像改為水平邊(第一行為 1、其餘為 0),用同一濾片 \(K = \begin{pmatrix} 1 & -1 \\ 1 & -1 \end{pmatrix}\) 計算:每個位置的輸出為 \(I(x,y) - I(x, y+1) + I(x,y) - I(x, y+1) = 2\big(I(x,y) - I(x, y+1)\big)\) 。對水平邊影像 \(I(x, 0) = 1\) 、 \(I(x, 1) = 0\) ,輸出處處為 \(2(1 - 0) = 2\) ;但垂直邊影像的輸出也是 2——單一濾片無法區分邊的方向,這說明 CNN 需要多個不同方向的濾片(多通道輸出)。

程式驗證:_code/05.1-cnn-conv2d.py 用 numpy 手寫 2D 互相關卷積。程式對中央有垂直邊的 \(6\times6\) 影像計算特徵圖(邊緣位置輸出 \(\pm 2\) ),再將特徵圖右移 2 格與「影像先平移再卷積」的結果逐元素比較,輸出 平移等變性驗證 T_v(I*K) == (T_v I)*K:True——數值驗證平移等變性成立。