1989 - 楊立昆卷積網路(手寫數字辨識的卷積神經網路)#
案件摘要#
1989 年,Yann LeCun(楊立昆,1960– ) 在 AT&T 貝爾實驗室, 把反向傳播(見 1986-反向傳播復興.md)套上卷積的幾何直覺—— 卷積神經網路(CNN, Convolutional Neural Network)誕生:
CNN 的三大支柱: - 卷積層:一個小核(kernel)在圖像上滑動掃描,偵測局部特徵; - 池化層:把小區域壓縮成一個值——位置微移也不影響判斷; - 參數共享:同一組核掃描整張圖——參數量暴減,泛化力暴增。
實際任務:手寫數字辨識——AT&T 的支票自動辨識與 美國郵政的郵遞區號(ZIP code)辨識——神經網路第一次大规模商業落地。
前因 -- 為什麼會有這個案子#
- 福島邦彥的新認知機(1980): Kunihiko Fukushima 的 Neocognitron(新認知機, 見
1980-福島新認知機.md)模仿視覺皮層的層級結構: 簡單細胞(S:偵測特徵)→ 複雜細胞(C:容忍位移)。 LeCun 自承受其啟發:新認知機有卷積的結構,卻沒有反向傳播—— 權重靠自我組織調整,學不動、學不準。
- Hubel–Wiesel 的視覺皮層(1959–1962): David Hubel 與 Torsten Wiesel 在貓的視覺皮層發現: 簡單細胞對特定方向的邊緣反應(像一個小卷積核!); 複雜細胞對同方向邊緣反應但位置不拘(像池化!)—— 兩人獲 1981 年諾貝爾生理醫學獎:
- 反向傳播的成熟(1986): Rumelhart–Hinton–Williams 1986 年的論文讓多層網路可訓練; 但全連接網路對圖像參數爆炸:
問題:如何讓網路「知道」圖像的空間結構?——卷積的答案。 - 商業需求:支票與郵遞區號: 1980 年代末,美國銀行的支票與郵政的 ZIP code 需要自動辨識 手寫數字——十個數字(0–9)、無限種筆跡。 LeCun 在 1988 年加入貝爾實驗室,把卷積結構與反向傳播焊接—— CNN 正是為這個案子量身訂做。
線索與推理 -- 數學式、程式、理論#
第一條線索:卷積運算——掃描與偵測#
卷積(這裡指離散的「滑動內積」):
- \(I\) :輸入圖像(如 \(8\times 8\) ); \(K\) : \(k\times k\) 的小核(如 \(3\times 3\) );
- 輸出是特徵圖(feature map):每個位置標示「這裡有沒有核要找的特徵」;
- 核 = 可學習的參數:反向傳播會自動調整核的數值——
- 一層可以有多個核 → 多張特徵圖 → 層級式特徵: 邊緣(第一層)→ 紋理(第二層)→ 部件(第三層)→ 物件。
第二條線索:參數共享的意義#
全連接:每個像素連每個隱藏單元——每個連接有自己的權重; 卷積:同一個核掃描所有位置——
為什麼共享是對的? - 平移等變性(translation equivariance):貓在圖的左邊或右邊, 偵測「貓耳朵」的核應該是同一個:
- 統計的理由:一個「邊緣偵測器」在圖像的任何位置都該有用——
第三條線索:池化——平移不變的摘要#
最大池化(max pooling):把 \(2\times 2\) 小區域壓成最大值:
- 特徵圖:核在哪裡偵測到特徵,位置敏感;
- 池化之後:特徵在附近哪個位置出現都算數——
- Hubel–Wiesel 的複雜細胞正是這個性質;手寫數字也正需要它: 每個人的「7」寫法不同、位置微移——辨識不能苛求像素級對齊。
Python:卷積前向傳播——特徵偵測#
# 8x8 圖案:十字 vs 方塊
cross = [[0]*8 for _ in range(8)]
for i in range(8):
cross[i][3] = cross[i][4] = 1
cross[3][i] = cross[4][i] = 1
square = [[0]*8 for _ in range(8)]
for i in range(2, 6):
for j in range(2, 6):
square[i][j] = 1
# 兩個 3x3 捲積核(特徵偵測器)
K = {
"水平邊緣核": [[-1,-1,-1],[0,0,0],[1,1,1]],
"垂直邊緣核": [[-1,0,1],[-1,0,1],[-1,0,1]],
}
def conv2d(I, Kk):
"""conv(I, K):3x3 核在 8x8 輸入上滑動(valid 卷積,步幅 1)"""
n = len(I)
out = [[0.0]*(n-2) for _ in range(n-2)]
for i in range(n-2):
for j in range(n-2):
s = 0.0
for u in range(3):
for v in range(3):
s += I[i+u][j+v]*Kk[u][v]
out[i][j] = s
return out
def pool2(m):
"""2x2 最大池化:取每塊最大值 → 平移不變的粗略摘要"""
n = len(m)
out = [[0.0]*(n//2) for _ in range(n//2)]
for i in range(0, n, 2):
for j in range(0, n, 2):
out[i//2][j//2] = max(m[i][j], m[i][j+1], m[i+1][j], m[i+1][j+1])
return out
def show(m, title):
print(title)
for row in m:
print(" " + " ".join(f"{v:4.0f}" for v in row))
print("輸入圖案:")
show(cross, "十字:")
show(square, "方塊:")
for name, Kk in K.items():
fc = conv2d(cross, Kk)
fs = conv2d(square, Kk)
show(pool2(fc), f"\n十字 × {name} → 特徵圖(6x6)→ 2x2 最大池化(3x3):")
show(pool2(fs), f"方塊 × {name} → 特徵圖(6x6)→ 2x2 最大池化(3x3):")
print("\n偵探的結論:同一組核(參數共享)掃描兩種圖案,")
print("特徵圖的數值分佈不同——十字在垂直邊緣核下上臂/下臂對稱,")
print("方塊只在頂/底兩列出現強響應;池化之後位置微移也不影響判斷。")
輸入圖案:
十字:
0 0 0 1 1 0 0 0
0 0 0 1 1 0 0 0
0 0 0 1 1 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 1 1 0 0 0
0 0 0 1 1 0 0 0
0 0 0 1 1 0 0 0
方塊:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
十字 × 水平邊緣核 → 特徵圖(6x6)→ 2x2 最大池化(3x3):
3 1 3
3 1 3
0 0 0
方塊 × 水平邊緣核 → 特徵圖(6x6)→ 2x2 最大池化(3x3):
2 3 2
0 0 0
-1 -3 -1
十字 × 垂直邊緣核 → 特徵圖(6x6)→ 2x2 最大池化(3x3):
3 3 0
1 1 0
3 3 0
方塊 × 垂直邊緣核 → 特徵圖(6x6)→ 2x2 最大池化(3x3):
2 0 -1
3 0 -3
2 0 -1
偵探的結論:同一組核(參數共享)掃描兩種圖案,
特徵圖的數值分佈不同——十字在垂直邊緣核下上臂/下臂對稱,
方塊只在頂/底兩列出現強響應;池化之後位置微移也不影響判斷。
結案 -- 後果與影響#
- 商業落地(1989–1995):
1990s AT&T 支票辨識系統讀取全美10–20% 的銀行支票; 美國郵政(USPS)的 ZIP code 手寫辨識上線—— CNN 從實驗室走進每天的日常生活。 - LeNet-5 的定型(1998): LeCun 等人發表 Gradient-Based Learning Applied to Document Recognition—— LeNet-5 定型:卷積 → 池化 → 卷積 → 池化 → 全連接 → 輸出:
這是 2012 年之前所有 CNN 的原型。 - MNIST 資料集(1998): LeCun 把 NIST 的手寫數字整理成 MNIST——
機器學習界的「果蠅」——此後二十年,幾乎每個新演算法都在 MNIST 上驗明正身。 - AlexNet 的爆發(2012): 1990 年代 SVM 等方法一度讓 CNN 失寵;LeCun 持續堅持:
2012 年 AlexNet 用更深的卷積網路橫掃 ImageNet(見 2012-亞歷克斯AlexNet.md)—— 深度學習革命正式點火,CNN 成為電腦視覺的標準配備。 - 2018 圖靈獎: LeCun 與 Hinton、Bengio 同獲 2018 年圖靈獎—— 表揚「深度學習的概念與工程突破」(見 ../資訊科學/2018-深度學習三巨頭.md)。
- 歷史定位:卷積網路是機器的視覺皮層—— 從 1989 年的支票辨識,到今天的自駕車、臉部辨識、醫學影像, 機器「看」世界的方式都是同一個:
關鍵人物與文獻#
- Y. LeCun(楊立昆):Backpropagation Applied to Handwritten Zip Code Recognition(1989);Gradient-Based Learning Applied to Document Recognition(LeNet-5, 1998);2018 圖靈獎。
- K. Fukushima:Neocognitron(1980)——卷積結構的先驅(LeCun 自承的啟發)。
- D. Hubel、T. Wiesel:視覺皮層的簡單/複雜細胞(1959–1962,1981 諾貝爾獎)——CNN 的神經科學原型。
- D. E. Rumelhart、G. E. Hinton:反向傳播(1986)——CNN 的訓練引擎。
- A. Krizhevsky、I. Sutskever、G. E. Hinton:AlexNet(2012)——CNN 的革命爆發。
- 相關案件:
1986-反向傳播復興.md、1980-福島新認知機.md、2012-亞歷克斯AlexNet.md、../資訊科學/2018-深度學習三巨頭.md、../資訊科學/1936-圖靈機.md。