1985 - Boltzmann 機器#
案件摘要#
1985 年,Hinton 與 Sejnowski 提出 Boltzmann 機器:一個帶隱藏變數、以統計物理為骨架的隨機神經網路。網路的狀態分佈服從波茲曼定律:
這是第一次,一個神經網路模型能「學習」自己的機率分佈——不只是回憶(Hopfield),而是生成。它是 2002 年對比散度(Contrastive Divergence)與 2006 年深度信念網路的直系遠祖。
前因 -- 為什麼會有這個案子#
- 1969-MinskyPapert批判.md 判了單層感知器死刑:線性不可分問題(如 XOR)無解,AI 進入寒冬。學界急需要一個「多層、可學」的模型。
- 1982-Hopfield網路能量函數.md 證明了能量函數 \(E(s)\) 極小化對應網路收斂,讓物理學家相信神經網路可以用統計力學描述——但 Hopfield 網路只有記憶(吸引子),沒有學習,且對稱連接下無隱藏單元。
- Ackley、Hinton、Sejnowski 的動機:能否在 Hopfield 的能量框架上,加入隱藏單元與隨機性,讓網路透過調整權重去「擬合」外部資料的統計結構?三人的合作地點是羅徹斯特與約翰霍普金斯——認知科學與神經科學的交界,正是本書「智慧模型」的主題所在。
- 更廣的前驅線索:1890 年 William James 的聯想主義(見 1890-WilliamJames聯想主義.md)主張「心智是聯想的網路」——Boltzmann 機器把這個百年直覺第一次寫成可學習的數學。
- 當時的理論障礙:有隱藏單元時,看不出哪些權重該為資料負責——「歸因問題」懸而未決(1986 年反向傳播是另一條解法線索)。
- 統計物理的 Ising 模型與模擬退火(Metropolis, 1953;Kirkpatrick, 1983)提供了現成的數學工具箱。
線索與推理 -- 數學式、程式、理論#
第一條線索:從確定到隨機——溫度 \(T\) 的引入#
Hopfield 網路每個神經元確定性地取 \(\mathrm{sign}(\sum_j w_{ij} s_j)\) ,能量只能下降,容易卡在局部極小。Boltzmann 機器讓神經元以機率翻轉:
其中 \(\Delta E_i\) 是翻轉 \(s_i\) 帶來的能量變化。高溫時網路亂走(逃離局部極小),降溫後收斂到低能組態——這正是模擬退火。
第二條線索:學習法則——兩種「統計」的角力#
網路在兩種模式下運行:夾住(clamped)可見單元(資料 \(P_{\text{data}}\) )與自由運行(模型 \(P_{\text{model}}\) )。學習法則驚人地簡單對稱:
| 項 | 統計意義 | 物理意義 |
|---|---|---|
| \(+\langle s_i s_j \rangle_{\text{data}}\) | 資料中兩單元共同激活的頻率 | 推高權重,讓模型喜歡資料 |
| \(-\langle s_i s_j \rangle_{\text{model}}\) | 模型自由幻想時的共現頻率 | 壓低權重,抑制幻覺 |
這條法則等價於極大化資料的對數概似 \(\log P(v)\) ,其梯度恰是上式。推理至此清晰:歸因問題被隨機共現統計解決——隱藏單元與可見單元的相關性,自動分配了功勞。
第二條線索補遺:與 Hopfield 的關鍵差異#
| Hopfield 網路(1982) | Boltzmann 機器(1985) | |
|---|---|---|
| 神經元更新 | 確定性 \(\mathrm{sign}(\cdot)\) | 隨機性 \(P(s_i=1)=\frac{1}{1+e^{-\Delta E_i/T}}\) |
| 隱藏單元 | 無 | 有(歸因問題的核心) |
| 能量走向 | 單調下降,卡局部極小 | 可上升(逃離局部極小) |
| 學習 | 權重寫死或 Hebb 式微調 | 機率分佈的極大概似 |
| 輸出性質 | 記憶(吸引子) | 生成(機率分佈) |
偵探的判讀:從「回憶」到「生成」的一步之差,是本案件的本質——Boltzmann 機器不只是把 Hopfield 加溫,而是把網路從動力系統升格為機率模型。
隱藏單元不對應任何單一概念,而是多個隱藏單元的聯合狀態共同編碼一個模式。這是分佈式表徵(distributed representation)的最早實例:一個概念由許多神經元共同表示,一個神經元參與表示許多概念。XOR 這類線性不可分問題,在隱藏空間中被自動攤平成線性可分。
第三條線索補遺:兩個任務——回憶與完成#
Boltzmann 機器同時是記憶與補全模型:
| 任務 | 操作 | 物理類比 |
|---|---|---|
| 模式記憶 | 夾住部分可見單元,自由單元收斂 | 彼此吸引的粒子聚成低能組態 |
| 模式補全 | 遮住影像一角,網路「幻想」出缺失部分 | 能量面把殘缺狀態拉向完整吸引子 |
推理的偵探視角:權重 \(w_{ij}\) 就是能量地形的地圖——學習即雕刻地形,推論即地形上的滾動。這個「能量地形」意象日後滲透整個深度學習:損失曲面的局部極小、鞍點與平滑度,都是同一語言。
第四條線索:計算的代價#
學習法則中 \(\langle s_i s_j \rangle_{\text{model}}\) 需要馬可夫鏈蒙地卡羅跑到平衡,代價是 \(O(\text{網路規模})\) 次迭代每一步——對大網路完全不可行。這個「瓶頸」正是下一個案件的伏筆:Hinton 二十年後用對比散度(只跑 1–2 步)破解了它。
結案 -- 後果與影響#
- 確立了「能量模型 + 機率詮釋 + 隨機學習」三合一框架,成為生成式神經網路的起點。
- 「幻想(hallucination)」第一次成為術語:模型自由運行時生成的組態被稱為幻想——四十年後同一個詞成為 LLM 時代的中心議題。
- 分佈式表徵的理念直接催生了 1986 年反向傳播網路的表徵理論(見 1986-反向傳播演算法.md)。
- 學習法則的正負兩項,是 2002 年對比散度與 2014 年 GAN 對抗訓練的思想原型(對比散度保留正負兩項;GAN 則把「壓低模型統計」交給另一個網路判別器)。
- 2006 年深度信念網路(見 2006-Hinton深度信念網路.md)正是「多層受限波茲曼機器」,開啟深度學習時代。
- 侷限:訓練太慢、隱藏單元間的連接使採樣混亂——後來的受限波茲曼機器(RBM, Smolensky 1986 的和諧理論)乾脆砍掉隱藏單元之間的連接,只留跨層連接。
- 影像任務的延伸:1990 年代 RBM 被嘗試用於手寫與臉部影像,但規模有限;直到 2006 年 DBN 才證明多層堆疊可行(見 2006-Hinton深度信念網路.md)。
- 知識表示的旁支:Boltzmann 機器與同期的專家系統(見 1965-DENDRAL專家系統.md)代表兩種智能觀——知識由專家寫入,或由統計學出。本卷的結論是後者勝出。
- 伏筆:能量模型的路在深度學習爆發後暫時讓位給判別式模型,但 2019 年後又以 Energy-Based Models 之名復活(見 2017-Transformer.md 之後的生成模型譜系)。
關鍵人物與文獻#
- Geoffrey Hinton / Terrence Sejnowski:Boltzmann 機器的共同提出者。
- Ackley, Hinton & Sejnowski, A Learning Algorithm for Boltzmann Machines, Cognitive Science, 1985。
- Sherrington & Kirkpatrick, Solvable Model of a Spin-Glass, 1975;Kirkpatrick et al., Optimization by Simulated Annealing, 1983(模擬退火)。
- Smolensky, Information Processing in Dynamical Systems: Harmony Theory, 1986(RBM 的前身)。
- James, The Principles of Psychology, 1890(聯想主義的百年直覺)。
- Hopfield, Neural networks and physical systems with emergent collective computational abilities, PNAS, 1982。
- Hinton, Training Products of Experts by Minimizing Contrastive Divergence, 2002(對比散度,遠祖的回聲)。
- 相關案件:1982-Hopfield網路能量函數.md、1986-反向傳播演算法.md、2006-Hinton深度信念網路.md、1969-MinskyPapert批判.md(見「科學與歷史/神經網路/」)
補充 -- 程式實作(python + numpy)#
本案兩條核心公式——隨機翻轉 P(sᵢ=1) = 1/(1+e^(−ΔEᵢ/T)) 與學習法則 Δw = η(⟨ss⟩data − ⟨ss⟩model)——最小可執行版本,見 _code/1985-BoltzmannMachine.py(已實測可跑):
# 1985 - Boltzmann 機器
# 公式: P(s_i=1) = 1/(1+exp(-ΔE_i/T)); Δw_ij = η(<s_i s_j>_data - <s_i s_j>_model)
import numpy as np
def sample_p(h):
return 1.0 / (1.0 + np.exp(-h))
def gibbs_step(state, W, b, T):
for i in np.random.permutation(len(state)):
h = (W[i] @ state + b[i]) / T
state[i] = 1 if np.random.rand() < sample_p(h) else -1
return state
def cooccur(samples):
return np.mean([np.outer(s, s) for s in samples], axis=0)
def main():
rng = np.random.default_rng(0)
np.random.seed(0)
data = [np.array([1, 1, -1, -1]), np.array([-1, -1, 1, 1])] * 50
N = 4
W = np.zeros((N, N))
b = np.zeros(N)
eta, T = 0.1, 1.0
for epoch in range(60):
Cd = cooccur(data) # clamped (data) 統計
fantasies = []
for _ in range(50):
s = rng.choice([-1, 1], size=N).astype(float)
fantasies.append(gibbs_step(s, W, b, T).copy())
Cm = cooccur(fantasies) # free-running (model) 統計
dW = eta * (Cd - Cm) # 核心: 資料共現推高, 幻想共現壓低
dW[np.diag_indices(N)] = 0
W += dW
print("學到的 W (符號):\n", np.sign(W).astype(int))
print("含義: (0,1) 與 (2,3) 內部正相關、兩群間負相關 = 記住兩個模式的共現結構")
print("T=10 時 P(翻轉|h=1):", round(float(sample_p(-1 / 10)), 3), "(近隨機亂走)")
print("T=0.1 時 P(翻轉|h=1):", round(float(sample_p(-1 / 0.1)), 5), "(近確定性=Hopfield)")
if __name__ == "__main__":
main()
執行結果(python3 _code/1985-BoltzmannMachine.py,numpy 2.4.5):
學到的 W (符號):
[[ 0 1 -1 -1]
[ 1 0 -1 -1]
[-1 -1 0 1]
[-1 -1 1 0]]
含義: (0,1) 與 (2,3) 內部正相關、兩群間負相關 = 記住兩個模式的共現結構
T=10 時 P(翻轉|h=1): 0.475 (近隨機亂走)
T=0.1 時 P(翻轉|h=1): 5e-05 (近確定性=Hopfield)
程式解說:dW = η(Cd − Cm) 即本文第二條線索的學習法則全文——資料中共現的單元對被推高權重,模型自由幻想中共現的被壓低,兩種統計角力至平衡時 p_model ≈ p_data,等價於極大化對數概似。學到的符號矩陣顯示網路確實刻出兩個模式的共現結構。末兩行演示溫度 T 的角色:高溫 T=10 翻轉機率近五成(逃離局部極小),低溫 T=0.1 機率近零(退化為確定性的 Hopfield)——模擬退火的精神全在這兩個數字裡。