05.1 CNN 與權重共享#
本章導讀#
全連接網路看一張 \(224\times224\) 的圖片,第一層就要 \(224^2\) 個權重——太浪費。 1989 年,LeCun 觀察到圖片有一個天然的數學結構:平移對稱。 貓在圖片左上角和右下角都是貓。把這個對稱「寫進」網路結構,就是卷積神經網路(CNN)。
淺顯說明#
全連接像「每個像素派一個專門偵測員」;CNN 像「一個偵測員拿著濾片在整張圖上掃描」:
- 濾片(kernel)很小,例如 \(3 \times 3\) ,只有 9 個權重。
- 這 9 個權重在整張圖上共享——左上角掃到的邊、右下角掃到的邊,用同一組權重。
- 濾片滑過的地方輸出一個數字:「這裡有沒有我偵測的模式」。
權重共享 = 參數大幅減少 + 平移等變性。這是「把對稱性寫進架構」的第一課。
正規理論#
離散二維卷積#
影像 \(I\) 與卷積核 \(K\) 的(數學)卷積:
深度學習框架實際用的是互相關(cross-correlation),核不翻轉:
兩者等價(學習時核是否翻轉不影響表達能力)。多通道輸入 \(C_{\text{in}}\) 、多個濾片 \(C_{\text{out}}\) :
平移等變性與群論觀點#
設平移算子 \((T_{\mathbf{v}} I)(\mathbf{x}) = I(\mathbf{x} - \mathbf{v})\) ,平移構成群 \(\mathbb{R}^2\) (更精確地,圖像的離散平移群 \(\subset SE(2)\) 的離散子群)。卷積與平移可交換:
證明: \((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)把等變性進一步壓成不變性——平移後輸出(大致)不變:
- 這是「架構先驗」思想的典範:把已知對稱群寫進結構,學習只在剩餘自由度上進行。
感受野與層疊#
\(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\) 摺積#
影像與邊緣濾片:
輸出(步距 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\) 的大值也移到右邊——平移等變性。
歷史典故#
- 1989 年 LeCun 的 CNN:見卷宗 ../1989-LeCunCNN手寫辨識.md——用權重共享讀出手寫郵遞區號,銀行系統用了一二十年。
- 1980 年 Neocognitron:見 ../1980-Neocognitron視覺層級模型.md——福島邦彥的視覺層級模型,CNN 的直接前身。
- 2012 年 AlexNet:見 ../2012-AlexNet影像革命.md——GPU + ImageNet 讓 CNN 一戰成名。
習題#
- 對本節例題,把影像改為 \(I(x,y)\) 的水平邊(上半 1、下半 0),計算輸出。
- 證明:兩層 \(3\times3\) 摺積(步距 1)的感受野是 \(5\times5\) ,參數 \(18\) 個;一層 \(5\times5\) 需 \(25\) 個。
- 討論:旋轉對稱時,卷積還等變嗎?需要什麼修正?(提示:群論的 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\) 區域,聯集為
即 \(5\times5\) 感受野。參數:兩層各 \(3\times3 = 9\) 個權重(不含偏置),共 \(2 \times 9 = 18\) 個;一層 \(5\times5\) 需 \(25\) 個。感受野相同但參數 \(18 < 25\) ,且多了一次非線性 \(\phi\) ——層疊小濾片更省、更強。 \(\blacksquare\)
證明:平移等變性在「加偏置與非線性」下保持。
設特徵圖 \(F = \phi(I \star K + b)\) ,其中 \(\phi\) 逐元素作用。平移算子只移動像素座標、不改變數值,故
第一個等號因 \(\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——數值驗證平移等變性成立。