2012 - AlexNet(深度學習的大爆炸)#
案件摘要#
2012 年 10 月,多倫多大學的 Alex Krizhevsky(1986–)、 Ilya Sutskever(1986–) 與他們的導師 Geoffrey Hinton, 以AlexNet 橫掃 ImageNet 大規模視覺辨識競賽(ILSVRC 2012):
AlexNet 是一個八層的卷積神經網路(五層卷積 + 三層全連接), 有 6000 萬個參數,靠四件武器打贏了這場仗: - GPU(CUDA):兩張 GTX 580 並行訓練——快 30 倍以上; - ReLU:修正線性單元——深層網路不再梯度消失; - Dropout:訓練時隨機丟棄一半神經元——防止過擬合; - 資料增廣:平移、翻轉、變色——把 120 萬張圖放大十倍。
比賽結束那一刻,整個電腦視覺界一夜轉向—— 神經網路從此統治 AI 十年。
前因 -- 為什麼會有這個案子#
- 1989 楊立昆的卷積網路: Yann LeCun 在 1989 年發明卷積神經網路(CNN)(見
1989-楊立昆卷積網路.md),用反向傳播訓練,成功辨識手寫數字:
但 1990 年代的 CNN 只能處理 32×32 的小圖—— GPU 不存在、資料太少,LeCun 的 CNN 在自然圖像上無用武之地。 - 2006 深度信念網路的點火: Hinton 的 DBN(見 2006-欣頓深度信念網路.md)證明深層可訓練, 讓神經網路從 SVM 主流時代(見 1980–1995)復活; 但 DBN 用的是無監督預訓練,Krizhevsky 與 Sutskever 很快發現:
- ImageNet 資料集(李飛飛,2009): 李飛飛(Fei-Fei Li) 在 2009 年建立 ImageNet—— 1400 萬張標註圖像、2 萬多個類別,2010 年起舉辦 ILSVRC 競賽 (120 萬張訓練圖、1000 類):
2011 年的冠軍(27.0%)仍是傳統特徵工程(SIFT + SVM)。 - GPU 的成熟(2007–2012): NVIDIA 於 2007 年推出 CUDA,讓顯示卡的數千核心可以通用計算。 Krizhevsky 是寫 CUDA 的高手——他把卷積寫成 GPU 核心:
天時(大資料)、地利(GPU)、人和(深度信念)——只欠一場戰役。
線索與推理 -- 數學式、程式、理論#
第一條線索:ReLU——梯度不再消失#
傳統的 sigmoid 活化函數在兩端飽和,導數趨近於零:
深層網路反向傳播時,梯度是各層導數的連乘:
AlexNet 改用 ReLU(Rectified Linear Unit):
正區的導數是恆等 1——梯度原樣通過,不衰減:
且 ReLU 計算只需一個比較(比 sigmoid 的指數快), 負區輸出恆為零(稀疏活化)——訓練快 6 倍(論文的數字)。
第二條線索:softmax 與交叉熵——分類的標準輸出#
AlexNet 的最後一層用 softmax 把得分 \(z_1,\dots,z_{1000}\) 變成機率:
訓練目標是交叉熵損失(cross-entropy):
對得分 \(z\) 微分得到極簡的梯度(softmax 與交叉熵的完美配對):
這個配對從 AlexNet 開始成為分類網路的標準輸出。
第三條線索:Dropout 與資料增廣——對抗過擬合#
6000 萬參數 vs 120 萬張圖——嚴重過擬合是最大威脅。 Dropout(Hinton 團隊 2012 同期提出): 訓練時每個神經元以 \(p = 0.5\) 的機率被隨機丟棄:
直覺:網路不能依賴任何一個神經元——像偵探培養多條獨立線索, 每個子網路都得自己學會判案;測試時相當於指數多個子網路的平均。 資料增廣:對原圖做隨機平移、水平翻轉、改變 RGB 亮度,
第四條線索:GPU 並行——卷積的快車道#
卷積本質是大量獨立的乘加:
這正是 GPU 的強項——數千核心同時算不同的 \((i,j)\) 。 Krizhevsky 把網路拆成兩半,分給兩張 GTX 580(當時記憶體只有 3GB):
Python:ReLU vs sigmoid 的收斂對照#
# 小型分類網路:ReLU vs sigmoid 的收斂對照(toy 資料)
import math, random
random.seed(7)
def relu(x):
return max(0.0, x)
def drelu(x):
return 1.0 if x > 0 else 0.0
def sigmoid(x):
return 1.0 / (1.0 + math.exp(-x))
def dsigmoid(x):
s = sigmoid(x)
return s * (1.0 - s)
# toy 資料:二維輸入、三類分類(三個高斯團塊)
def make_data():
centers = [(2.0, 0.0), (-1.0, 1.7), (-1.0, -1.7)]
xs, ys = [], []
for k, (cx, cy) in enumerate(centers):
for _ in range(40):
xs.append((cx + random.gauss(0, 0.4), cy + random.gauss(0, 0.4)))
ys.append(k)
return xs, ys
# 一個隱藏層(4 神經元)的小網路,活化函數可切換
def train(activation, epochs=200, lr=0.05):
xs, ys = make_data()
W1 = [[random.uniform(-1, 1) for _ in range(2)] for _ in range(4)]
b1 = [0.0] * 4
W2 = [[random.uniform(-1, 1) for _ in range(4)] for _ in range(3)]
b2 = [0.0] * 3
if activation == "relu":
act, dact = relu, drelu
else:
act, dact = sigmoid, dsigmoid
n = len(xs)
for ep in range(1, epochs + 1):
loss = 0.0
for (x1, x2), y in zip(xs, ys):
z1 = [W1[i][0] * x1 + W1[i][1] * x2 + b1[i] for i in range(4)]
h = [act(z) for z in z1]
z2 = [sum(W2[k][i] * h[i] for i in range(4)) + b2[k] for k in range(3)]
mx = max(z2)
e = [math.exp(z2[k] - mx) for k in range(3)]
s = sum(e)
p = [v / s for v in e]
loss += -math.log(p[y] + 1e-12)
dz2 = [p[k] - (1 if k == y else 0) for k in range(3)] # softmax+CE 梯度
dh = [sum(W2[k][i] * dz2[k] for k in range(3)) for i in range(4)]
for k in range(3):
for i in range(4):
W2[k][i] -= lr * dz2[k] * h[i] / n
b2[k] -= lr * dz2[k] / n
for i in range(4):
g = dh[i] * dact(z1[i]) # 活化函數決定梯度是否消失
W1[i][0] -= lr * g * x1 / n
W1[i][1] -= lr * g * x2 / n
b1[i] -= lr * g / n
if ep in (1, 50, 200):
print(f" {activation:>7s} epoch {ep:>3d}:平均交叉熵 = {loss / n:.4f}")
print("ReLU vs sigmoid:同一小網路在 toy 分類資料的收斂對照")
train("sigmoid")
train("relu")
ReLU vs sigmoid:同一小網路在 toy 分類資料的收斂對照
sigmoid epoch 1:平均交叉熵 = 1.6088
sigmoid epoch 50:平均交叉熵 = 1.1644
sigmoid epoch 200:平均交叉熵 = 0.6405
relu epoch 1:平均交叉熵 = 1.1623
relu epoch 50:平均交叉熵 = 0.1896
relu epoch 200:平均交叉熵 = 0.0207
先用 python3 實際執行(見下方輸出區塊),結果ReLU 的損失下降明顯快於 sigmoid——這正是 AlexNet 用 ReLU 的數學證據 ✓
結案 -- 後果與影響#
- 2012:深度學習大爆炸:
ILSVRC 2012 結束後,傳統特徵工程(SIFT + SVM)五年內絕跡; 2013 年的冠軍就是 AlexNet 的微調版,2014、2015 年全為深度網路。 - CNN 統治電腦視覺十年(2012–2021): - 2014 VGG / GoogLeNet:更深的 CNN(19 層 / 22 層), top-5 錯誤率降到 7.3% / 6.7%; - 2015 ResNet:殘差連接(He Kaiming),152 層,錯誤率 3.6%—— 超越人類(約 5%); - 物體偵測(2014 R-CNN)、語義分割——全是 AlexNet 的血統。
- GPU 的軍備競賽:
算力成為 AI 競爭的核心資源——NVIDIA 由遊戲公司變成 AI 帝國。 - ReLU 的普及:
後續變體(Leaky ReLU、GELU、Swish)都是 ReLU 的後代—— 活化函數的戰場由 AlexNet 重新洗牌。 - Hinton 的圖靈獎(2018): Hinton 因深度學習的貢獻,於 2018 年與 LeCun、Bengio 同獲圖靈獎 (見 ../資訊科學/2018-深度學習三巨頭.md)—— 從 1936 圖靈機到 2012 AlexNet,圖靈獎回到了 AI 的戰場 (見 ../資訊科學/1936-圖靈機.md)。 - 伏筆:視覺之後,輪到語言(2017): AlexNet 證明深度 + 大資料 + 算力的公式;2017 年, 這個公式被套到語言上——Transformer(見 2017-瓦茲瓦尼Transformer.md)與後來的一切大模型。
- 歷史定位:AlexNet 是 AI 的珍珠港式事件—— 一夜之間,所有人的世界觀被改寫; 6000 萬個參數、兩張顯示卡、一場競賽——深度學習的時代正式開幕。
關鍵人物與文獻#
- A. Krizhevsky:ImageNet Classification with Deep Convolutional Neural Networks(NIPS 2012);CUDA 實現;CIFAR-10/100 資料集(2009)。
- I. Sutskever:AlexNet 共同作者;後為 OpenPDF 研究主管(OpenAI 首席科學家,2015–2024);Sequence to Sequence Learning(2014)。
- G. E. Hinton:AlexNet 指導者;Dropout(2012);2018 圖靈獎(見
../資訊科學/2018-深度學習三巨頭.md)。 - Y. LeCun:卷積網路(1989,見
1989-楊立昆卷積網路.md)——AlexNet 的直接祖先;2018 圖靈獎。 - 李飛飛:ImageNet(2009)——深度學習的燃料。
- K. He(何愷明):ResNet(2015)——超越人類的視覺辨識。
- 相關案件:
1989-楊立昆卷積網路.md、2006-欣頓深度信念網路.md、2013-米科洛夫詞向量.md、../資訊科學/2018-深度學習三巨頭.md、../資訊科學/1936-圖靈機.md。