JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

卷積網路:用濾波器去看

網路如何透過在影像上滑動微小的模式偵測器來學會「看」——以及為什麼「權重共享」這一個架構想法,讓深度視覺成為可能。

把影像當成一串扁平數字的麻煩

你已經認識了 多層感知機:把一層層神經元 隱藏層 疊起來,每個神經元都連到所有輸入。對付幾個特徵時這很漂亮。但一張普通照片是 224x224 像素、3 個顏色通道——超過 15 萬個輸入。把它接到哪怕一層幾千個神經元上,單是第一層就有上億個 參數

更糟的是,那個全連接層把每個像素都當成與鄰居毫無關係。它得分別在左上角、中間、右下角各學一遍「貓耳朵」長什麼樣——彷彿每個位置都是一個不同的世界。照片不是一串互相獨立的數字,而是一張網格:鄰近像素本就屬於一起,而一個圖案無論出現在哪裡都是同一回事。我們想要一個事先就懂得這一點的架構。

卷積:讓一個小濾波器在網格上滑動

核心想法是這樣的。不要用一個巨大的層,而是取一小塊權重網格——比如 3x3——稱為濾波器(kernel,卷積核)。把它蓋在影像左上角的 3x3 小塊上,讓每個濾波器權重乘以它下方的像素,再全部加成一個數。然後把濾波器向右滑動一步,重複。這種「滑動並求和」的操作就是 卷積

關鍵的訣竅是權重共享:同一個 3x3 濾波器在每個位置被重複使用。於是一個學會了對豎直邊緣起反應的濾波器,無論邊緣出現在影像何處都能偵測到,僅靠九個權重就在所有地方幹完了活。這正是架構如何把上一節的假設內建進來——也是它如何把參數量從上百萬削減到每個濾波器區區幾十個。

image patch        filter (learned)
[10 10 80]         [-1  0  1]
[10 10 80]    *    [-1  0  1]   -> one output number
[10 10 80]         [-1  0  1]

(-1*10 +0*10 +1*80) x3 rows = 210   <- big response: an edge is here
一個 3x3 濾波器相乘、求和,報出一個數;數值大就表示它要找的圖案出現了。

特徵圖:濾波器畫出它在哪裡起了反應

把一個濾波器滑過整張影像,再把它所有的輸出收回成一張網格。這張網格就是 特徵圖——它畫出了這個特定濾波器在哪裡、以多強的程度起了反應。一個偵測邊緣的濾波器產出的特徵圖會沿著邊緣亮起來。一層不會只用一個濾波器;它會並行地用許多個(比如 64 個),於是單單一層就把一張影像變成 64 張特徵圖的一摞,每一張突出一種不同的圖案。

每次卷積之後我們都加一個非線性,幾乎總是 ReLU,它只是把負的反應清零。接著才是真正的魔法:把這些層疊起來。第一層的濾波器學到邊緣和色塊;第二層看著第一層的特徵圖,學到拐角和紋理;更深的層把這些組合成眼睛、車輪、人臉。沒有人手工編寫這些階段——網路是透過 反向傳播 自己發現它們的。這種層層堆疊,正是本階段所講的 分層表示學習,如今在影像上得以實現。

步幅、填充與池化:控制尺寸、逐步拉遠

有兩個旋鈕控制濾波器如何掃過網格,合稱 步幅與填充步幅是濾波器每步跳多遠:步幅 1 走遍每個位置;步幅 2 隔一個跳一個,把輸出的寬和高都減半。填充在影像四周補一圈零,好讓濾波器能夠觸及最邊緣——若沒有它,每次卷積都會讓特徵圖縮小一點,而角落的像素也會被算得不夠。

要有意識地拉遠,我們用 池化。最常見的最大池化,滑動一個小視窗(常是 2x2),只保留每個視窗裡最大的那個值,其餘的統統丟掉。這把特徵圖縮小一半,並帶來一點有用的容忍度:如果被偵測的圖案挪動了一兩個像素,池化後的輸出幾乎不變。一層接一層,空間網格變得越來越粗,而特徵圖的數量卻增長——網路用「具體在哪裡」換取了「大致是什麼」。

  1. 開始:一張 224x224、帶 3 個顏色通道的影像。
  2. 用 64 個濾波器卷積 + ReLU -> 64 張特徵圖,每張 224x224,全都共享微小的權重。
  3. 2x2 池化 -> 仍是 64 張圖,但變成 112x112:解析度減半,略能容忍位移。
  4. 重複,更深的層在更粗的網格上用更多濾波器,直到最後一個分類器讀出答案。

為什麼它契合影像——以及炒作在哪裡跑過了頭

現在各塊拼合到了一起。網格形狀的輸入,配上網格形狀的處理,恰到好處。權重共享,對應著「貓的鬍鬚不管長在哪裡看起來都一樣」這個事實。局部濾波器,尊重了「含義寄居於像素鄰域之中」。池化,賦予了對小位移的一點容忍。這些禮物合在一起,讓一個 卷積神經網路 能以比全連接網路少幾個數量級的參數,達到強大的 影像分類——這正是為什麼 CNN 在 2012 年前後點燃了視覺上的深度學習時代。

對它的局限要誠實。「用濾波器去看」是個比喻:CNN 匹配的是統計圖案,它並不理解一個場景。它可能被你肉眼看不見、卻經精心設計的微小像素擾動騙到,而且它常常抓住的是背景紋理,而非你真正在意的物體。它對位移的容忍是溫和而局部的——把物體大幅旋轉或縮放,它就可能失敗,除非你用這類變化訓練過它。卷積這種歸納偏置是個有用的預設設定,而非定律:用注意力替代固定局部濾波器的視覺 Transformer,如今在資料充足時已能與 CNN 打平甚至勝出。