跳轉到

1982 - 霍普菲爾德網路(遞迴網路與聯想記憶)#

案件摘要#

1982 年,物理學家 John Hopfield(1933–2024) 在《美國國家科學院院刊》發表 Hopfield 網路——第一個有能量函數的遞迴神經網路:

\[ \boxed{E = -\frac{1}{2}\sum_{i \ne j} w_{ij}\, s_i s_j \quad\text{——網路會收斂到能量的極小值}} \]

神經元彼此全連接、雙向遞迴:每個神經元 \(i\) 的狀態 \(s_i \in \{-1, +1\}\) , 依符號函數非同步更新:

\[ s_i \leftarrow \operatorname{sgn}\!\left(\sum_j w_{ij}\, s_j\right). \]

Hopfield 證明了收斂定理:對稱權重( \(w_{ij} = w_{ji}\) 、對角線為零)之下, 非同步更新只會讓能量下降或持平——網路必然停在不動點。 記憶的存儲用 Hebbian 規則:

\[ w_{ij} = \sum_k x_i^k\, x_j^k \quad\text{(把每個模式的外積「烙」進權重)}. \]

雜訊的輸入會被「吸」回最接近的記憶——這是聯想記憶:

\[ \text{雜訊輸入} \xrightarrow{\text{能量下降}} \text{最接近的存儲模式}. \]

統計物理(自旋玻璃)+ 神經科學(Hebb 規則)的跨界偵探—— 四十二年後,Hopfield 與 Hinton 獲 2024 年諾貝爾物理學獎。

前因 -- 為什麼會有這個案子#

  • Hebb 的學習規則(1949): Donald Hebb 在《行為的組織》提出神經科學最著名的假說 (見「1949-赫布學習規則.md」):
\[ \boxed{\text{「一起激發的神經元連在一起」——Learning by association}} \]
\[ w_{ij} \leftarrow w_{ij} + \eta\, s_i\, s_j \quad\text{(同時活躍則加強連結)}. \]

Hopfield 把這條規則變成數學:存儲模式 \(x^k\) 的外積和就是它的實現。 - 感知機寒冬的教訓(1969): Minsky 與 Papert 的《Perceptrons》凍結了神經網路研究十三年 (見「1969-明斯基感知機寒冬.md」)。 1982 年的孤島上:福島的 Neocognitron 在日本孤軍奮戰 (見「1980-福島新認知機.md」)—— Hopfield 以圈外人的身分(物理學家!)重新點燃火種。 - 統計物理:自旋玻璃與 Ising 模型: 物理學家研究自旋系統數十年:Ising 模型(1925)的能量

\[ H = -\sum_{i \ne j} J_{ij}\, s_i s_j \]

而自旋玻璃(1975)的隨機 \(J_{ij}\) 造成多個能量極小。 Hopfield 的洞察:

\[ \text{自旋} \leftrightarrow \text{神經元}, \quad J_{ij} \leftrightarrow w_{ij}, \quad \text{能量極小} \leftrightarrow \text{記憶}. \]
\[ \boxed{\text{神經網路 = 一個物理系統——記憶是能量的極小值}} \]
  • 物理學家的聲望(1982): Hopfield 是普林斯頓的凝聚態物理教授—— 以物理學家的身分發表神經網路論文,期刊與經費的大門為他敞開。 一個領域的復興,有時需要一個圈外的偵探。

線索與推理 -- 數學式、程式、理論#

第一條線索:能量函數與收斂定理#

Hopfield 網路 = \(N\) 個神經元、對稱權重 \(W\) ( \(w_{ij} = w_{ji}\) 、 \(w_{ii} = 0\) )。 能量函數:

\[ E = -\frac{1}{2}\sum_{i \ne j} w_{ij}\, s_i s_j. \]

收斂定理(Hopfield, 1982):非同步更新只會讓 \(E\) 下降或持平。 證明:翻轉神經元 \(i\) (狀態變化 \(\Delta s_i = \pm 2\) ),能量變化:

\[ \Delta E = -\Delta s_i \sum_{j \ne i} w_{ij}\, s_j = -\Delta s_i \cdot h_i, \qquad h_i = \sum_{j \ne i} w_{ij} s_j. \]

更新規則 \(s_i' = \operatorname{sgn}(h_i)\) 保證 \(\Delta s_i \cdot h_i \ge 0\) ,即 \(\Delta E \le 0\) 。

\[ \boxed{\Delta E \le 0 \text{ 恆成立——能量單調下降,網路必然收斂}} \]

能量有下界( \(E \ge -\frac{1}{2}\sum_{i \ne j} |w_{ij}|\) )—— 單調下降 + 有下界 = 必然停在極小值。

第二條線索:Hebbian 權重與聯想記憶#

存儲 \(p\) 個模式 \(\{x^1, \dots, x^p\}\) ( \(x^k \in \{-1, +1\}^N\) ):

\[ w_{ij} = \sum_{k=1}^{p} x_i^k\, x_j^k \quad (i \ne j), \qquad w_{ii} = 0. \]

為什麼模式會成為能量極小?把權重代入能量:

\[ E = -\frac{1}{2}\sum_{k=1}^{p} \left(\sum_i x_i^k s_i\right)^2 + \frac{pN}{2} + \text{交叉項}. \]
  • 主項: \(-\frac{1}{2}\sum_k m_k^2 N\) ,其中 \(m_k = \frac{1}{N}\sum_i x_i^k s_i\) 是重疊度(overlap);
  • 若 \(s = x^\mu\) (完全重疊, \(m_\mu = 1\) ),主項達到極小;
  • 交叉項是雜訊——當 \(p\) 太大時會破壞記憶。 容量定理:模式的數量 \(p\) 不能超過
\[ \boxed{p_{\max} \approx 0.138\,N} \]

超過容量,交叉項的雜訊會讓記憶互相干擾(災難性干涉)—— \(N = 25\) 時約可存 \(3\) 個模式。

第三條線索:聯想記憶的動力學#

聯想記憶 = 從部分或雜訊的線索回復完整記憶:

\[ \text{雜訊輸入 } s(0) \xrightarrow{\text{非同步更新}} s(1) \xrightarrow{} s(2) \xrightarrow{} \cdots \xrightarrow{} s(\infty) = x^\mu. \]
  • 輸入與某個模式的重疊度 \(m_\mu >\) 閾值(約 \(0.5\) )→ 吸入該模式的吸引盆;
  • 能量地形:每個記憶是一個碗,雜訊輸入像一顆滾進碗裡的球;
  • 這就是「回想」的數學模型——你想起一張臉,只需要幾個特徵。
\[ \text{內容定址(content-addressable):用內容找記憶,不用地址} \]

這是一切現代「檢索」思想的遠祖—— 從向量資料庫到注意力機制(見「人工智慧/2017-Transformer注意力機制.md」)。

Python:Hopfield 網路存儲模式、雜訊輸入、迭代收斂#

import random

# Hopfield 網路:5x5 二值模式(+1/-1)作為聯想記憶
PATTERNS = {
    "十字": [
        "..#..",
        "..#..",
        "#####",
        "..#..",
        "..#..",
    ],
    "斜線": [
        "#....",
        ".#...",
        "..#..",
        "...#.",
        "....#",
    ],
    "丁字": [
        "#####",
        "..#..",
        "..#..",
        "..#..",
        "..#..",
    ],
}

def to_bipolar(rows):
    return [1 if ch == '#' else -1 for row in rows for ch in row]

patterns = {name: to_bipolar(rows) for name, rows in PATTERNS.items()}
N = 25

# Hebbian 存儲:w_ij = sum_k x_i^k x_j^k(對角線為 0)
W = [[0] * N for _ in range(N)]
for x in patterns.values():
    for i in range(N):
        for j in range(N):
            if i != j:
                W[i][j] += x[i] * x[j]

def overlap(s, x):
    return sum(s[i] * x[i] for i in range(N)) / N

def update(s):
    """非同步更新:隨機挑一個神經元,依符號函數更新"""
    i = random.randrange(N)
    s[i] = 1 if sum(W[i][j] * s[j] for j in range(N)) >= 0 else -1
    return s

def show(s, title):
    print(title)
    for r in range(5):
        print("   " + "".join('#' if s[r * 5 + c] == 1 else '.' for c in range(5)))

random.seed(42)
target_name = "十字"
clean = patterns[target_name][:]

# 給雜訊:翻轉 6 個位元
noisy = clean[:]
flips = random.sample(range(N), 6)
for i in flips:
    noisy[i] = -noisy[i]

print(f"Hopfield 網路:存儲 3 個模式(十字、斜線、丁字),N=25")
print(f"理論容量 0.138N ≈ {0.138 * N:.2f} 個模式 → 3 個在容量之內\n")
show(noisy, f"雜訊輸入(目標「十字」翻轉 {len(flips)} 個位元):")
print(f"   與「十字」的重疊度 = {overlap(noisy, clean):.2f}\n")

def energy(s):
    """能量函數 E = -1/2 Σ_ij w_ij s_i s_j(非同步更新只會下降或持平)"""
    return -0.5 * sum(W[i][j] * s[i] * s[j] for i in range(N) for j in range(N))

# 迭代收斂:每輪 N 次非同步更新,直到整輪狀態不變(不動點)
s = noisy[:]
steps = 0
for it in range(50):
    steps = it + 1
    new = s[:]
    for _ in range(N):
        new = update(new)
    if new == s:
        break
    s = new

show(s, f"收斂結果({steps} 輪 = {steps * N} 次非同步更新後狀態不變):")
print(f"   與「十字」的重疊度 = {overlap(s, clean):.2f}")
print(f"   能量變化:{energy(noisy):.0f} → {energy(s):.0f}(單調下降)")
print(f"   完全復原「十字」?{s == clean}")
輸出:
Hopfield 網路:存儲 3 個模式(十字、斜線、丁字),N=25
理論容量 0.138N ≈ 3.45 個模式 → 3 個在容量之內

雜訊輸入(目標「十字」翻轉 6 個位元):
   #.##.
   ...#.
   #####
   ..#..
   #.#.#
   與「十字」的重疊度 = 0.52

收斂結果(3 輪 = 75 次非同步更新後狀態不變):
   ..#..
   ..#..
   #####
   ..#..
   ..#..
   與「十字」的重疊度 = 1.00
   能量變化:-60 → -316(單調下降)
   完全復原「十字」?True

結案 -- 後果與影響#

  • 神經網路復興的火種(1982):
\[ \text{寒冬(1969–1986)} \xrightarrow{\text{Hopfield(1982):物理學家的跨界}} \text{復興} \]
  • 圈外的聲望:物理期刊與經費大門為 Hopfield 敞開—— 神經網路研究重新獲得學術正當性;
  • 能量函數成為神經網路的數學語言——「學習 = 降能量」的思想影響至今;
  • 1986 年反向傳播(見「人工智慧/1986-反向傳播演算法.md」)—— 復興的高潮在 Hopfield 鋪路之後到來。
  • 2024 年諾貝爾物理學獎:
\[ \boxed{\text{Hopfield 與 Hinton 獲 2024 年諾貝爾物理學獎——「以神經網路發現奠定機器學習的基礎」}} \]
  • John Hopfield:能量函數與聯想記憶(1982);
  • Geoffrey Hinton:Boltzmann 機(1985,與 Sejnowski)—— Hopfield 網路 + 隨機更新 = 機率式的能量模型;
\[ \text{Ising(1925)} \xrightarrow{} \text{Hopfield(1982)} \xrightarrow{} \text{Boltzmann 機(1985)} \xrightarrow{} \text{諾貝爾獎(2024)}. \]
  • 現代遞迴網路與注意力機制的遠祖:
  • 遞迴網路(RNN, 1990s):狀態在時間中遞迴—— Hopfield 的「狀態迭代」是它的原型(見「人工智慧/1997-LSTM長短期記憶.md」);
  • 注意力機制(2017):查詢與鍵值的內積找記憶—— 這正是重疊度 \(m_\mu = \frac{1}{N}\sum_i x_i^\mu s_i\) 的推廣; 2020 年 Ramsauer 等人直接指出:
\[ \text{Transformer 的注意力} = \text{Hopfield 的新版本(Modern Hopfield Network)}. \]
  • 能量函數思想影響擴散模型(2015–2020): 生成 = 從雜訊「降能量」到資料流形(見「人工智慧/2014-GAN對抗式生成網路.md」):
\[ \text{雜訊} \xrightarrow{\text{能量/分數下降}} \text{資料} \quad\text{(與聯想記憶同構)}. \]
  • 容量的教訓(0.138N): 容量定理警告:記憶會互相干涉——預告了「災難性遺忘」問題(1990s); 現代解法:Modern Hopfield Network(指數容量 \(2^{N/2}\) )。
  • 歷史定位:Hopfield 是統計物理與神經科學的跨界偵探—— 他用物理學的能量語言,為神經網路寫下了第一份「力學」;
\[ \text{Hebb(1949)} \xrightarrow{} \text{Ising/自旋玻璃(1925/1975)} \xrightarrow{} \text{Hopfield(1982)} \xrightarrow{} \text{諾貝爾獎(2024)}. \]

記憶是能量的極小值——這個思想統治了 AI 四十二年。

關鍵人物與文獻#

  • J. Hopfield:Neural networks and physical systems with emergent collective computational abilities(1982, PNAS)——能量函數與聯想記憶;2024 諾貝爾物理學獎。
  • D. Hebb:The Organization of Behavior(1949)——Hebbian 學習規則(見「1949-赫布學習規則.md」)。
  • G. Hinton & T. Sejnowski:Boltzmann 機(1985)——Hopfield 網路的機率版本;2024 諾貝爾物理學獎。
  • E. Ising:Ising 模型(1925)——自旋系統的能量;統計物理的前因。
  • D. Amit, H. Gutfreund, H. Sompolinsky:Spin-glass models of neural networks(1985)——容量 0.138N 的嚴格證明。
  • J. Ramsauer et al.:Hopfield Networks is All You Need(2020)——注意力機制 = Modern Hopfield Network。
  • 相關案件:1936-圖靈機.md、1969-明斯基感知機寒冬.md、1980-福島新認知機.md、人工智慧/1986-反向傳播演算法.md、人工智慧/1997-LSTM長短期記憶.md、人工智慧/2017-Transformer注意力機制.md。