跳轉到

1949 - Hebb 學習規則#

案件摘要#

1949 年,McGill 大學的 Donald Hebb 出版《The Organization of Behavior: A Neuropsychological Theory》,提出神經科學史上最著名的單句假設:

「當神經元 A 持續、反覆地參與激發神經元 B,某種代謝過程會發生,使 A 激發 B 的效率提升。」

這就是赫布規則:一起激發就連在一起(fire together, wire together)。寫成數學:

\[ \Delta w_i = \eta \, x_i \, y \]

其中 \(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\) (突觸前)到目標神經元(突觸後):

\[ \Delta w_i = \eta \, x_i \, y, \quad w_i \leftarrow w_i + \Delta w_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}\) 的疊加,權重收斂到它們的外積和:

\[ \mathbf{W} = \sum_k \mathbf{a}_k \mathbf{a}_k^\top \]

這正是 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 權重設定公式的源頭。