2006 - Hinton 深度信念網路(深度學習的誕生)#
案件摘要#
2006 年,59 歲的 Geoffrey Hinton(1947–) 與學生 Simon Osindero、Yee-Whye Teh 在《Science》發表 A Fast Learning Algorithm for Deep Belief Networks:
他們把多個受限玻爾茲曼機(RBM, Restricted Boltzmann Machine) 像積木一樣堆疊成深度信念網路(Deep Belief Network, DBN): - 先無監督地一層一層預訓練(每一層學一種特徵); - 再用反向傳播微調整體。
「deep learning」一詞由這波研究開始流行—— 沈寂二十年的深層神經網路,就此復活。
前因 -- 為什麼會有這個案子#
- 1986 反向傳播的復興與困境: Rumelhart、Hinton、Williams 在 1986 年讓反向傳播(見
1986-反向傳播復興.md)廣為人知,但只用了一兩層的隱藏層。 深層網路(四層以上)訓練時,梯度一層層往回傳就消失:
- 1995 年之後的 SVM 主流時代: Vapnik 的支持向量機(SVM, 見 1980–1995 的統計學習理論) 有凸優化的漂亮數學,成為機器學習主流:
神經網路被視為「黑盒子、訓練不穩、理論不清」—— 學術界几乎不再投神經網路的履歷。 - Hinton 的堅持: Hinton 相信大腦就是深層的——視覺皮層 V1 → V2 → V4 → IT, 層層抽取特徵。問題不在「深」,而在初始化:
他的解法來自 1980 年代的能量模型——RBM。 - 計算力的成熟: 2000 年代中,CPU 叢集讓大量無監督預訓練變得可行—— 天時、地利、人和,只欠一個演算法。
線索與推理 -- 數學式、程式、理論#
第一條線索:受限玻爾茲曼機(RBM)的能量#
RBM = 可見層 \(v\) (資料)+ 隱藏層 \(h\) (特徵),層內無連結、層間全連結。 定義能量函數:
- \(b\) :可見層偏置; \(c\) :隱藏層偏置; \(W\) :權重矩陣。 機率由能量給出(能量越低,機率越大):
因為層內無連結,給定一層時另一層的各神經元條件獨立:
其中 \(\sigma(x) = \dfrac{1}{1+e^{-x}}\) 是 sigmoid 函數。
第二條線索:最大概似與配分函數的障礙#
訓練目標是最大化資料的對數概似:
對 \(W\) 微分得到優美的梯度:
障礙在負相位: \(\mathbb{E}_{P(v,h)}\) 需要對所有 \((v,h)\) 加權——
MCMC(Gibbs 取樣)要混合很久才收斂——這正是深層模型被冷落的原因之一。
第三條線索:對比散度(Contrastive Divergence)的直覺#
Hinton 的絕招(2002):負相位不必取樣到收斂—— 只跑一兩步 Gibbs 取樣就停: 1. 資料 \(v_0\) → 取樣 \(h_0\) (正向); 2. \(h_0\) → 取樣 \(v_1\) (反向,重建); 3. \(v_1\) → 取樣 \(h_1\) (正向); 4. 更新: \(\Delta W = v_0 h_0^T - v_1 h_1^T\) 。
直覺:從真實資料出發的取樣鏈,一開始就靠近資料分佈—— 重建誤差( \(v_0\) 與 \(v_1\) 的差)會隨訓練下降, 這個誤差下降就是「模型正在學會資料」的偵探證據。
第四條線索:堆疊成深度信念網路#
逐層貪婪預訓練: 1. 用 CD 訓練 RBM \(_1\) : \(v \to h^{(1)}\) (學低階特徵,如邊); 2. 凍結 RBM \(_1\) ,把 \(h^{(1)}\) 當下一層的可見層,訓練 RBM \(_2\) (學高階特徵,如角、紋理); 3. 依此類推,堆疊 RBM \(_3\) 、RBM \(_4\) ……; 4. 最後在頂端加標籤層,用反向傳播微調整個網路。
預訓練把權重放在靠近好解的區域——反向傳播不再陷入爛的局部極小, 梯度消失的問題被「好的初始化」繞過了。
Python:簡化 RBM 的單步對比散度#
# 受限玻爾茲曼機(RBM):單步對比散度(小二值向量)
import random, math
random.seed(42)
def sigmoid(x):
return 1.0 / (1.0 + math.exp(-x))
# 資料:8 個樣本,每個 6 維二值向量(前 3 維為一組、後 3 維為一組)
data = [
[1, 1, 1, 0, 0, 0],
[1, 0, 1, 0, 0, 0],
[1, 1, 1, 0, 0, 1],
[0, 0, 0, 1, 1, 1],
[0, 0, 1, 1, 1, 0],
[0, 0, 0, 1, 0, 1],
]
n_v, n_h = 6, 4
W = [[random.uniform(-0.1, 0.1) for _ in range(n_h)] for _ in range(n_v)]
b = [0.0] * n_v # 可見層偏置
c = [0.0] * n_h # 隱藏層偏置
lr = 0.5
def sample_h(v):
"""正向:P(h=1|v) = sigmoid(c + W^T v)"""
probs = []
for j in range(n_h):
z = c[j] + sum(W[i][j] * v[i] for i in range(n_v))
probs.append(sigmoid(z))
return [1 if random.random() < p else 0 for p in probs], probs
def sample_v(h):
"""反向(重建):P(v=1|h) = sigmoid(b + W h)"""
probs = []
for i in range(n_v):
z = b[i] + sum(W[i][j] * h[j] for j in range(n_h))
probs.append(sigmoid(z))
return [1 if random.random() < p else 0 for p in probs], probs
def recon_error(v, v1):
"""重建誤差:v0 與重建 v1 的平均平方差"""
return sum((v[i] - v1[i]) ** 2 for i in range(n_v)) / n_v
print("RBM 單步對比散度(重建誤差應隨訓練下降):")
for epoch in range(1, 2001):
lr = 0.5 if epoch <= 500 else (0.1 if epoch <= 1500 else 0.02) # 學習率退火
err = 0.0
for v0 in data:
h0, _ = sample_h(v0) # 正相位取樣
v1, _ = sample_v(h0) # 反向:一步重建
h1, _ = sample_h(v1) # 負相位取樣
# 更新:ΔW = v0 h0^T − v1 h1^T(對比散度)
for i in range(n_v):
for j in range(n_h):
W[i][j] += lr * (v0[i] * h0[j] - v1[i] * h1[j]) / len(data)
for i in range(n_v):
b[i] += lr * (v0[i] - v1[i]) / len(data)
for j in range(n_h):
c[j] += lr * (h0[j] - h1[j]) / len(data)
err += recon_error(v0, v1)
if epoch in (1, 100, 1000, 2000):
print(f" epoch {epoch:>4d}:平均重建誤差 = {err / len(data):.4f}")
# 驗證:訓練後的模型重建資料(用機率,不用隨機取樣)
print("\n訓練後的重建(機率取整):")
for v0 in data:
h0, _ = sample_h(v0)
v1p, _ = sample_v(h0)
v1 = [round(p) for p in v1p]
print(f" {''.join(map(str, v0))} → {''.join(map(str, v1))}")
RBM 單步對比散度(重建誤差應隨訓練下降):
epoch 1:平均重建誤差 = 0.5556
epoch 100:平均重建誤差 = 0.1667
epoch 1000:平均重建誤差 = 0.0833
epoch 2000:平均重建誤差 = 0.0556
訓練後的重建(機率取整):
111000 → 111000
101000 → 101000
111001 → 111001
000111 → 000111
001110 → 001110
000101 → 000101
先用 python3 實際執行(見下方輸出區塊),結果重建誤差穩定下降, 訓練後的模型能把資料幾乎完美地重建—— 對比散度確實讓 RBM 學會了資料的結構 ✓
結案 -- 後果與影響#
- 2006:深度學習的誕生年:
「deep learning」一詞隨 DBN 開始流行; 2009 年 Hinton 團隊用 DBN 打破語音辨識的紀錄(MSR 合作)—— 語音界第一個大規模轉向深度學習。 - AlexNet 的前夜(2012): DBN 證明「深層可訓練」之後,問題只剩「更快、更大」—— 2012 年,Hinton 的學生 Krizhevsky、Sutskever 用 GPU 訓練 AlexNet(見 2012-亞歷克斯AlexNet.md)橫掃 ImageNet—— 預訓練的角色後來被 ReLU + 大資料取代,但深度學習的路是 DBN 開出來的。
- RBM 與能量模型的血統:
Hinton 因 Hopfield–Boltzmann 機一脈的貢獻,於 2018 年與 Hopfield 同獲圖靈獎(見 ../資訊科學/2018-深度學習三巨頭.md)—— 2024 年 Hopfield 更進一步獲諾貝爾物理學獎。 - 預訓練思想的延續: 逐層預訓練雖被 ReLU 時代淡忘,但「先無監督、後監督」的思想 在 2010 年代末以預訓練語言模型的形式重生:
- 理論與工程的合作: CD 沒有完整證明(Carreira-Perpiñán & Hinton 2005 只給了部分分析)—— 「先試了再說」的工程直覺與能量模型的嚴謹數學並存, 正是深度學習的方法論縮影。
- 歷史定位:Hinton 是深度學習的守夜人—— 在神經網路最冷的年代(1969 寒冬、SVM 主流)堅持深層的信念二十年, 終於在 2006 年點火;這把火一直燒到今天的大模型。
關鍵人物與文獻#
- G. E. Hinton:A Fast Learning Algorithm for Deep Belief Networks(Science, 2006,與 Osindero、Teh);Training Products of Experts by Minimizing Contrastive Divergence(2002);2018 圖靈獎。
- S. Osindero、Y.-W. Teh:DBN 共同作者——逐層貪婪訓練的數學。
- R. Rumelhart、D. E. Rumelhart:反向傳播(1986,見
1986-反向傳播復興.md)——深層的困境由它暴露。 - P. Smolensky:Harmonium(1986)——RBM 的前身。
- J. Hopfield:Hopfield 網路(1982)——能量模型的起點。
- V. Vapnik:SVM(1995 前的主流)——神經網路最冷年代的對手。
- 相關案件:
1986-反向傳播復興.md、2012-亞歷克斯AlexNet.md、../資訊科學/2018-深度學習三巨頭.md、../資訊科學/1936-圖靈機.md。