1943 - McCulloch–Pitts 神經元(神經元 = 邏輯單元)#
案件摘要#
1943 年,Warren McCulloch(1898–1968) 與年僅 18 歲的 Walter Pitts(1923–1969) 在《數理生物物理學會刊》發表 A Logical Calculus of the Ideas Immanent in Nervous Activity:
McCulloch–Pitts 神經元的規則極其簡單: - 輸入只有兩個值: \(x_i \in \{0, 1\}\) (不激發/激發); - 每條輸入有權重 \(w_i\) (興奮性為正、抑制性為負); - 加權總和超過閾值 \(\theta\) 就激發:
他們證明:這種神經元組成的網路,可以計算任何邏輯函式—— 神經網路與 1936 圖靈機在計算能力上接軌!
這是大腦與電腦的第一次正式會面。
前因 -- 為什麼會有這個案子#
- 圖靈機的可計算性(1936): Turing 定義了「可計算」的數學極限(見
資訊科學/1936-圖靈機.md)—— 但圖靈機是紙帶與狀態表的抽象機器,與真實的大腦毫無關係。 當時的懸案是:
- Cajal 的神經元學說(1888–1906): Santiago Ramón y Cajal 用顯微鏡染色法證明: 大腦不是連續的網狀組織,而是由離散的神經元組成—— 神經元之間有突觸(synapse)連接,訊號單向傳遞。
這是硬體的藍圖——但神經元「計算」了什麼,無人知曉。 - 布爾的邏輯代數(1854): George Boole 證明邏輯推理可以代數化:AND、OR、NOT 是運算—— 邏輯命題可以像數字一樣計算。
- McCulloch 與 Pitts 的相遇(1941–1942): McCulloch 是神經精神科醫師(懂大腦),Pitts 是自學的邏輯天才 (懂 Russell《數學原理》,曾逃家在圖書館過夜讀書)。 兩人在芝加哥大學相遇——一人提供大腦,一人提供邏輯—— 神經元邏輯模型就此誕生。
線索與推理 -- 數學式、程式、理論#
第一條線索:神經元的形式定義#
McCulloch–Pitts 神經元是一個二值函數: - 輸入: \(x_1, x_2, \ldots, x_n \in \{0, 1\}\) ; - 權重: \(w_i \in \{+1, -1\}\) (興奮/抑制,1943 年原始模型只有兩種權重); - 閾值: \(\theta\) ; - 輸出:
神經生理的對應: \(x_i\) 是突觸前神經元的動作電位、 \(w_i\) 是突觸強度、 \(\theta\) 是激發的門檻—— 數學模型與神經解剖一一對應。
第二條線索:神經元 = 邏輯閘#
用單一神經元實現基本邏輯: - AND: \(w = (1, 1), \theta = 2\) ——兩輸入皆 1 才激發:
- OR: \(w = (1, 1), \theta = 1\) ——任一輸入 1 就激發:
- NOT: \(w = (-1), \theta = 0\) ——抑制性輸入:
第三條線索:網路可計算任何邏輯函式#
McCulloch–Pitts 定理(1943):
推理: 1. AND、OR、NOT 是函數完備集(functionally complete)—— 任何布爾函式都可由它們組合而成; 2. 每個邏輯閘都是一個神經元; 3. 故任何布爾函式都是神經元網路。 但 XOR 是例外:XOR 為 1 的點 \((0,1),(1,0)\) 與為 0 的點 \((0,0),(1,1)\) 無法用一條直線(一個閾值超平面)分開—— 單一神經元無解,必須用兩層(隱藏層):
Python:McCulloch–Pitts 神經元與邏輯閘#
# 1) McCulloch-Pitts 神經元:二值輸入、加權、閾值激發
def mp_neuron(weights, theta, inputs):
"""神經元 y = 1 若 sum(w_i * x_i) >= theta,否則 0"""
s = sum(w * x for w, x in zip(weights, inputs))
return 1 if s >= theta else 0
# 2) 用單一神經元組出基本邏輯閘
AND = lambda x: mp_neuron([1, 1], 2, x) # 兩輸入皆 1 才激發
OR = lambda x: mp_neuron([1, 1], 1, x) # 任一輸入 1 就激發
NOT = lambda x: mp_neuron([-1], 0, x) # 抑制性輸入,0 才激發
print("單層 McCulloch-Pitts 神經元:")
for x in [(0,0),(0,1),(1,0),(1,1)]:
print(f" x={x} AND={AND(x)} OR={OR(x)}")
for x in [0, 1]:
print(f" x={x} NOT={NOT([x])}")
# 3) XOR:單一神經元無解,需要兩層(隱藏層)
print("\n單一神經元能做 XOR 嗎?")
print(" XOR 為 1 的點 (0,1),(1,0) 與為 0 的點 (0,0),(1,1)")
print(" 無法用一條直線(一個閾值超平面)分開 → 單一神經元無解!")
# 4) 兩層神經元網路:XOR = AND(OR, NOT(AND))
def XOR(x):
h1 = OR(x) # 隱藏神經元 1:至少一個 1
h2 = NOT([AND(x)]) # 隱藏神經元 2:不是兩個都 1
return mp_neuron([1, 1], 2, (h1, h2))
print("\n兩層神經元網路(OR 與 NOT-AND 當隱藏層):")
for x in [(0,0),(0,1),(1,0),(1,1)]:
print(f" x={x} XOR={XOR(x)}")
print("\n結論:神經元 = 邏輯閘,網路 = 邏輯電路")
print(" → 邏輯閘可組出圖靈機(1936)→ 神經網路可計算一切可計算!")
單層 McCulloch-Pitts 神經元:
x=(0, 0) AND=0 OR=0
x=(0, 1) AND=0 OR=1
x=(1, 0) AND=0 OR=1
x=(1, 1) AND=1 OR=1
x=0 NOT=1
x=1 NOT=0
單一神經元能做 XOR 嗎?
XOR 為 1 的點 (0,1),(1,0) 與為 0 的點 (0,0),(1,1)
無法用一條直線(一個閾值超平面)分開 → 單一神經元無解!
兩層神經元網路(OR 與 NOT-AND 當隱藏層):
x=(0, 0) XOR=0
x=(0, 1) XOR=1
x=(1, 0) XOR=1
x=(1, 1) XOR=0
結論:神經元 = 邏輯閘,網路 = 邏輯電路
→ 邏輯閘可組出圖靈機(1936)→ 神經網路可計算一切可計算!
結案 -- 後果與影響#
- 神經網路與計算理論的接軌(1943):
von Neumann 在《The Computer and the Brain》(1958,遺作)中 特別討論了這篇論文——大腦與電腦的語言終於相同。 - AI 與認知科學的起點(1943 → 1956): McCulloch 後來主持 MIT 的研究實驗室,Pitts 也加入—— 這個團體是 1956 年達特茅斯會議(AI 誕生)的思想源頭之一。
- 可學習性的缺口(1943 → 1949): 1943 模型的權重與閾值是固定的(設計者手工設定)—— 它不能學習!神經元「會算」但「不會學」—— 這個缺口由 Hebb(1949)補上(見
1949-赫布學習規則.md)。
- Pitts 的悲劇結局(1969): Pitts 晚年與合作者 Lettvin 決裂,燒毀自己所有的論文, 1969 年死於食道出血,年僅 45 歲—— 天才的悲劇,與 Turing(1954)、Hebb 的失語症晚年遙相呼應。
- 深層的伏筆(1943 → 1969): XOR 需要兩層——但多層網路如何訓練?1943 年無人知曉—— 這個問題引發了 1969 年 Minsky–Papert 的批判與第一次 AI 寒冬 (見
1958-羅森布拉特感知機.md的結案)。 - 歷史定位:McCulloch–Pitts 神經元是神經網路的第一塊磚——
一切從「神經元 = 邏輯閘」這個等式開始。
關鍵人物與文獻#
- W. S. McCulloch:A Logical Calculus of the Ideas Immanent in Nervous Activity(1943,與 Pitts 合著);Embodiments of Mind(1965)。
- W. Pitts:自學邏輯天才(18 歲完成此作);三層網路與溫度平衡(1953)。
- S. R. Cajal:神經元學說(1888–1906)——離散神經元的解剖學基礎(1906 諾貝爾獎)。
- G. Boole:邏輯代數(1854)——AND/OR/NOT 的數學化。
- A. Turing:圖靈機(1936)——可計算性的極限(見
資訊科學/1936-圖靈機.md)。 - J. von Neumann:The Computer and the Brain(1958)——大腦與電腦的比較。
- 相關案件:
1949-赫布學習規則.md、1958-羅森布拉特感知機.md、1960-韋德羅ADALINE.md、資訊科學/1936-圖靈機.md。