1949 - Hebb 學習規則#
案件摘要#
1949 年,McGill 大學的 Donald Hebb 出版《The Organization of Behavior: A Neuropsychological Theory》,提出神經科學史上最著名的單句假設:
「當神經元 A 持續、反覆地參與激發神經元 B,某種代謝過程會發生,使 A 激發 B 的效率提升。」
這就是赫布規則:一起激發就連在一起(fire together, wire together)。寫成數學:
其中 \(x_i\) 是突觸前活性, \(y\) 是突觸後活性。這一行公式讓神經網路第一次自己學習——權重不再是寫死的,而是被經驗雕刻出來的。本案的本質是:學習的候選模型從「教導」變成「共激活的統計帳本」。
前因 -- 為什麼會有這個案子#
- 1943 年 M-P 神經元證明了網路能算任何邏輯(見 1943-麥卡洛克皮茨邏輯神經元.md),但權重是手工指定的——網路不會學,這是最大的洞。
- 1890 年 James 的聯想主義已寫下散文版:「重複通過使路徑暢通」(見 1890-WilliamJames聯想主義.md)——Hebb 的貢獻是把散文翻譯成方程。
- Lashley 的失敗線索:Karl Lashley 1929 年起花三十年在老鼠腦中搜尋「記憶痕跡」的具體位置,始終找不到——他轉而提出「質量作用律」(記憶分散儲存在皮層質量中)。這暗示記憶不存在單點,而存在連結的分佈中。
- 行為主義的困境:Watson 與 Skinner 用刺激—反應解釋學習,但無法回答「嬰兒為什麼不用獎勵也能學會看世界」。
- Hebb 的動機:他是生理心理學家,想解釋知覺學習——嬰兒天生就會把視覺碎片拼成物體,這不需要 Skinner 的強化,只需要「同時出現的東西自然連結」。
- 時代背景:控制論正當紅(Wiener 1948),「回饋」與「自我調節」是流行詞,Hebb 的規則正好是生物版的自我調節。
線索與推理 -- 數學式、程式、理論#
第一條線索:赫布規則的數學形式#
突觸 \(i\) 連結神經元 \(i\) (突觸前)到目標神經元(突觸後):
四種活性組合的後果:
| \(x_i\) (前) | \(y\) (後) | \(\Delta w_i = \eta x_i y\) | 後果 |
|---|---|---|---|
| 1 | 1 | \(+\eta\) | 連結加強(赫布配對) |
| 1 | 0 | \(0\) | 不變 |
| 0 | 1 | \(0\) | 不變 |
| 0 | 0 | \(0\) | 不變 |
關鍵推理:規則只需要局部訊息——突觸不需要知道全局目標,只看兩端是否同時活躍。這是生物上可信的(突觸兩端各有一個分子即可),也是工程上強大的(可大規模並行)。
第二條線索:赫布規則自動學會特徵#
把赫布規則用在輸入模式上,網路會自動提取統計上最顯著的模式。設輸入是二值向量 \(\mathbf{x} \in \{0,1\}^n\) ,輸出是單一神經元 \(y = H(\mathbf{w}^\top \mathbf{x})\) ,反覆呈現同一模式:權重 \(\mathbf{w}\) 會收斂到該模式本身——網路「記住」了它。若呈現的是兩個模式 \(\mathbf{a}\) 、 \(\mathbf{b}\) 的疊加,權重收斂到它們的外積和:
這正是 1982 年 Hopfield 網路的權重設定公式(見 1982-霍普菲爾德網路.md)——Hebb 規則的矩陣版就是內容定址記憶的存取方式。用一小段程式演示:
import numpy as np
a = np.array([ 1, 1, -1, -1, 1, -1]) # 模式 A
b = np.array([-1, 1, 1, -1, -1, 1]) # 模式 B
W = np.outer(a, a) + np.outer(b, b) # 赫布式儲存
cue = np.array([ 1, 1, -1, -1, 0, 0]) # 線索:只給前四個位元
s = np.sign(W @ cue) # 全域喚起
print(s)
輸出:
[ 1 1 -1 -1 1 -1]
只給一半的線索,網路喚起出完整的模式 A——這就是「聯想」的矩陣實作,James 在 1890 年畫的「束式聯想」在 1949 年有了引擎。
第三條線索:赫布配對的生理驗證——LTP#
Hebb 的假設是理論先行,生理證據晚到三十年: - 1973 年 Bliss 與 Lømo 在海馬迴發現長期增益效應(LTP):高頻刺激突觸後,突觸傳遞效率長期提升——這就是赫布配對的生理學版本。 - 1980 年代發現 NMDA 受體是「巧合偵測器」:它需要突觸前釋放麩胺酸且突觸後去極化同時發生才打開——分子層面的 \(x_i \cdot y\) 乘積。 - 「neurons that fire together, wire together」這句口訣其實是 Carla Shatz 1992 年改寫的版本,但精神完全是 Hebb 的。
第四條線索:赫布規則的三個後裔#
同一條規則在不同領域長出不同的後代:
| 後裔 | 公式 | 領域 |
|---|---|---|
| 感知器學習 | \(\Delta \mathbf{w} = \eta (t - y)\mathbf{x}\) | 有教師訊號的赫布變體(1957) |
| Delta rule / LMS | \(\Delta \mathbf{w} = \eta (t - \mathbf{w}^\top \mathbf{x})\mathbf{x}\) | 連續誤差版(1960) |
| Oja 規則 | \(\Delta w_i = \eta\, y\,(x_i - y w_i)\) | 加了正規化,收斂到主成分(PCA)(1982) |
| STDP | 時序差分的赫布規則 | 尖峰時序依賴可塑性(1998) |
關鍵推理:感知器與 delta rule 都是把赫布規則的 \(y\) 換成 \((t - y)\) 或 \((t - \mathbf{w}^\top\mathbf{x})\) ——用誤差調制共激活。這一「換」讓赫布規則從無教師聯想變成有教師學習,也埋下了反向傳播的種子。
結案 -- 後果與影響#
- 神經網路第一次能學習:權重由經驗決定,這是連結主義 AI 的立身之本——「智慧來自學習,而非設計」。
- 神經科學獲得核心範式:LTP、NMDA 受體、STDP 都是赫布假設的實驗後代,Hebb 成為計算神經科學的奠基者。
- 伏筆一:赫布規則 + M-P 網路 → 1956 Dartmouth 會議把「自組織的神經網路」列為 AI 研究議題。
- 伏筆二:赫布規則的誤差調制變體 → 1957 感知器收斂定理(見 1957-Perceptron感知器.md)→ 1960 ADALINE 的 LMS(見 1960-ADALINE自適應線性元件.md)。
- 伏筆三:赫布規則的矩陣版 \(\mathbf{W} = \sum \mathbf{a}\mathbf{a}^\top\) → 1982 Hopfield 網路 → 2024 年物理學諾獎表彰 Hopfield 的貢獻——Hebb 的帳本寫了七十五年還在生息。
- 伏筆四:無教師的赫布學習 → 現代自監督學習(masked prediction、contrastive learning)的精神遠祖——2020 年代的巨型語言模型訓練時不需要人工標籤,只靠「下一詞與上下文的共激活」。
關鍵人物與文獻#
- Donald Hebb:《The Organization of Behavior: A Neuropsychological Theory》(1949),第 4 章提出赫布規則
- William James:《The Principles of Psychology》(1890),聯想律的散文前身
- Karl Lashley:〈Brain Mechanisms and Intelligence〉(1929),質量作用律與搜尋記憶的失敗
- Timothy Bliss & Terje Lømo:LTP 的發現(1973),赫布規則的生理驗證
- Erkki Oja:〈A Simplified Neuron Model as a Principal Component Analyzer〉(1982),赫布規則的正規化版
- 相關案件:1890-WilliamJames聯想主義.md、1943-麥卡洛克皮茨邏輯神經元.md、1957-Perceptron感知器.md、1960-ADALINE自適應線性元件.md、1982-霍普菲爾德網路(科學與歷史/神經網路/1982-霍普菲爾德網路.md)、1986-反向傳播演算法(科學與歷史/人工智慧/1986-反向傳播演算法.md)
補充 -- 程式實作(python + numpy)#
本案公式 Δwᵢ = ηxᵢy 及其矩陣版 W = Σₖ aₖaₖᵀ 的最小可執行版本,見 _code/1949-Hebb.py(已實測可跑):
# 1949 - Hebb 學習規則
# 公式: Δw_i = η x_i y ; 矩陣版 W = Σ_k a_k a_k^T (外積和)
import numpy as np
def hebb_store(patterns):
"""patterns: list of {+1,-1} 向量, 回傳 Hebb 權重矩陣 (對角線歸零)."""
n = len(patterns[0])
W = sum(np.outer(p, p) for p in patterns)
np.fill_diagonal(W, 0)
return W / n
def recall(W, cue, steps=5):
s = cue.astype(float).copy()
for _ in range(steps):
s = np.sign(W @ s)
s[s == 0] = 1
return s.astype(int)
def main():
a = np.array([1, 1, -1, -1, 1, -1]) # 模式 A (書中範例)
b = np.array([-1, 1, 1, -1, -1, 1]) # 模式 B
W = hebb_store([a, b])
cue = np.array([1, 1, -1, -1, 0, 0]) # 只給前 4 位
s = recall(W, np.where(cue == 0, 0.0, cue.astype(float)))
print("模式 A:", a)
print("模式 B:", b)
print("線索 :", cue, "(0=未知)")
print("喚起 :", s)
print("喚起==模式A:", bool(np.array_equal(s, a)),
"(只給一半線索即補全 = 聯想的矩陣實作)")
w, eta = 0.2, 0.5
x, y = 1, 1
print(f"單突觸 Hebb 更新: w {w} + {eta}*{x}*{y} -> {w + eta * x * y}")
if __name__ == "__main__":
main()
執行結果(python3 _code/1949-Hebb.py,numpy 2.4.5):
模式 A: [ 1 1 -1 -1 1 -1]
模式 B: [-1 1 1 -1 -1 1]
線索 : [ 1 1 -1 -1 0 0] (0=未知)
喚起 : [ 1 1 -1 -1 1 -1]
喚起==模式A: True (只給一半線索即補全 = 聯想的矩陣實作)
單突觸 Hebb 更新: w 0.2 + 0.5*1*1 -> 0.7
程式解說:hebb_store 正是本文第二條線索的外積和公式——兩個模式的外積相加即權重矩陣,連除法與歸零都只是數值細節。recall 用 sign(W·s) 反覆喚起,只給前 4 位線索就補出完整模式 A,演示「內容定址」:線索本身就是位址。最後一行把矩陣版縮回單突觸版 Δw = ηxy,說明兩者是同一規則的兩種尺度;此式正是 1982 年 Hopfield 權重設定公式的源頭。