1958 - Rosenblatt 感知機(第一個可學習的神經網路)#
案件摘要#
1958 年,康乃爾的 Frank Rosenblatt(1928–1971) 發表 The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain, 並建造了 Mark I Perceptron 機器(400 個光電池 + 電動電位器):
感知機的結構: - 輸入 \(x_1, \ldots, x_n\) (Mark I 用 20×20 的感光格子看圖片); - 權重 \(w_i\) (由馬達驅動的電位器實現,可自動調整!); - 輸出: \(o = \mathrm{step}(w \cdot x + b)\) 。 學習規則(Hebb 規則的監督版):
收斂定理(1958/1960/1962):
New York Times(1958)的預言:感知機是 「會走路、說話、看、寫、自我複製、並意識到自身存在的電腦的胚胎」—— 媒體的期待遠遠超出了數學的事實。 八十年後回顧:這是深度學習的直系祖先——
前因 -- 為什麼會有這個案子#
- Hebb 規則的缺口(1949): Hebb 給了學習規則 \(\Delta w_i = \eta x_i y\) —— 但它是無教師的:不知道「正確答案」是什麼。
Rosenblatt 的回答:來自訓練樣本的目標 \(t\) ——監督學習。 - McCulloch–Pitts 神經元(1943): 神經元 = 邏輯閘(見 1943-麥卡洛克皮茨神經元.md)—— 但權重固定、不能學習。Rosenblatt 把兩者結合: 閾值單元 + Hebb 式權重更新 = 可學習的機器。 - FORTRAN 與 IBM 硬體(1957): John Backus 的 FORTRAN 編譯器問世(1957) (見 程式語言/1957-巴克斯FORTRAN.md)—— IBM 704 電腦成為科學計算的標準平台—— Rosenblatt 的模擬程式跑在 IBM 704 上; Mark I 的硬體(電位器、馬達)則是為學習而生的專用機器—— 硬體與軟體第一次為神經網路服務。 - 海軍研究的資金(1958): 美國海軍研究辦公室(ONR)資助了康乃爾航空實驗室的感知機計畫—— 軍方夢想「能從照片中認出敵艦的機器」——
Mark I 於 1958 年對媒體展示,記者蜂擁而至—— AI 的第一次媒體熱潮(數年後釀成第一次 AI 寒冬)。
線索與推理 -- 數學式、程式、理論#
第一條線索:感知機的形式定義#
感知機是一個線性二值分類器:
- 決策邊界是超平面 \(w \cdot x + b = 0\) —— 單層感知機只能做線性分類。
- 與 1943 神經元的差別:權重不是設計的,是學來的。
第二條線索:感知機學習規則#
**對每個訓練樣本 \((x, t)\) **: 1. 計算輸出 \(o = \mathrm{step}(w \cdot x + b)\) ; 2. 更新權重:
- 分類正確( \(t = o\) )→ 不更新;
- 漏報( \(t = 1, o = 0\) )→ 權重往 \(x\) 方向移動( \(\Delta w = +\eta x\) );
- 誤報( \(t = 0, o = 1\) )→ 權重遠離 \(x\) ( \(\Delta w = -\eta x\) )。
這是 Hebb 規則加上符號翻轉:
第三條線索:感知機收斂定理#
定理(Rosenblatt 1958/1962;Novikoff 1962 證明):
- \(\gamma\) :分離間距(margin)——資料離超平面有多遠;
- 錯誤次數的上界:
推理直覺:每次犯錯, \(w\) 往 \(w^*\) 的投影方向前進至少 \(\gamma\) —— \(w\) 與 \(w^*\) 的夾角越來越小——有限步內必正確。 - 線性可分 → 必收斂(定理的鐵律); - 非線性可分 → 可能永不收斂(定理的前提不成立)—— XOR 就是死穴:為 1 的點 \((0,1),(1,0)\) 與為 0 的點 \((0,0),(1,1)\) 無法用一條直線分開——
這是 1969 危機的伏筆。
Python:感知機訓練與 XOR 失敗#
# 1) 感知機:o = step(w·x + b),學習 Δw = η (t - o) x
def step(v):
return 1 if v >= 0 else 0
def perceptron_train(X, t, eta=0.1, epochs=20):
"""X:輸入列表;t:目標輸出;回傳 (w, b, 紀錄)"""
w = [0.0] * len(X[0])
b = 0.0
history = []
for ep in range(1, epochs + 1):
errors = 0
for x, target in zip(X, t):
o = step(sum(wi * xi for wi, xi in zip(w, x)) + b)
delta = target - o
if delta != 0:
errors += 1
for i in range(len(w)):
w[i] += eta * delta * x[i] # Δw = η(t-o)x
b += eta * delta
history.append((ep, errors, list(w), b))
if errors == 0:
break
return w, b, history
# 2) 線性可分資料:AND
X = [(0,0),(0,1),(1,0),(1,1)]
t_and = [0, 0, 0, 1]
w, b, hist = perceptron_train(X, t_and, eta=0.5, epochs=20)
print("感知機訓練 AND(線性可分):")
for ep, errs, ww, bb in hist:
print(f" epoch {ep}: 錯誤數={errs} w={ww} b={bb:.1f}")
print("\n訓練結果的驗證:")
for x, target in zip(X, t_and):
o = step(sum(wi * xi for wi, xi in zip(w, x)) + b)
ok = "✓" if o == target else "✗"
print(f" x={x} → o={o} (期望 {target}) {ok}")
# 3) 收斂定理的推理:錯誤數有上界
print("\n感知機收斂定理:")
print(" 若資料線性可分(存在 w*, γ>0 使 t(w*·x) >= γ)")
print(" 則訓練必在有限步內收斂:錯誤次數 <= (R/γ)²")
print(" R = ||x|| 的最大值,γ = 分離間距(margin)")
# 4) XOR 失敗:非線性可分 → 收斂定理的前提不成立
print("\n感知機訓練 XOR(非線性可分):")
t_xor = [0, 1, 1, 0]
w2, b2, hist2 = perceptron_train(X, t_xor, eta=0.5, epochs=20)
for ep, errs, ww, bb in hist2[:5]:
print(f" epoch {ep}: 錯誤數={errs} w={ww} b={bb:.1f}")
print(f" ... 訓練到 epoch {hist2[-1][0]} 仍有錯誤數={hist2[-1][1]}——永不收斂!")
print("\n結論:單層感知機是線性分類器,XOR 是它的死穴(1969 危機的伏筆)。")
感知機訓練 AND(線性可分):
epoch 1: 錯誤數=2 w=[0.5, 0.5] b=0.0
epoch 2: 錯誤數=3 w=[1.0, 0.5] b=-0.5
epoch 3: 錯誤數=3 w=[1.0, 0.5] b=-1.0
epoch 4: 錯誤數=2 w=[1.0, 1.0] b=-1.0
epoch 5: 錯誤數=1 w=[1.0, 0.5] b=-1.5
epoch 6: 錯誤數=0 w=[1.0, 0.5] b=-1.5
訓練結果的驗證:
x=(0, 0) → o=0 (期望 0) ✓
x=(0, 1) → o=0 (期望 0) ✓
x=(1, 0) → o=0 (期望 0) ✓
x=(1, 1) → o=1 (期望 1) ✓
感知機收斂定理:
若資料線性可分(存在 w*, γ>0 使 t(w*·x) >= γ)
則訓練必在有限步內收斂:錯誤次數 <= (R/γ)²
R = ||x|| 的最大值,γ = 分離間距(margin)
感知機訓練 XOR(非線性可分):
epoch 1: 錯誤數=3 w=[-0.5, 0.0] b=-0.5
epoch 2: 錯誤數=3 w=[-0.5, 0.0] b=0.0
epoch 3: 錯誤數=4 w=[-0.5, 0.0] b=0.0
epoch 4: 錯誤數=4 w=[-0.5, 0.0] b=0.0
epoch 5: 錯誤數=4 w=[-0.5, 0.0] b=0.0
... 訓練到 epoch 20 仍有錯誤數=4——永不收斂!
結論:單層感知機是線性分類器,XOR 是它的死穴(1969 危機的伏筆)。
結案 -- 後果與影響#
- 第一個可學習的機器(1958):
Mark I Perceptron 學會了辨識簡單的字母與形狀—— 媒體狂熱(NYT 的「會走路的機器」預言)、軍方追加資金—— AI 的第一次泡沫。 - 收斂定理的光芒與陰影(1960–1969): 線性可分必收斂是美麗的定理—— 但 Minsky 與 Papert 的《Perceptrons》(1969)用數學證明: - 單層感知機不能計算 XOR、不能辨識連通性; - 多層網路沒有已知的訓練演算法。
第一次 AI 寒冬(1969–1980s):資金枯竭、Rosenblatt 於 1971 年 在帆船事故中去世(46 歲,與 Pitts 同年早逝)—— 神經網路被判了「死刑緩期」。 - 伏筆的兌現(1969 → 1986): Minsky–Papert 指出的「多層訓練無解」在 1986 年被 Rumelhart、Hinton、Williams 的反向傳播(backpropagation)破解——
2018 年 Hinton 獲圖靈獎——感知機的孫子們統治了 AI。 - Widrow 的務實路線(1960): 與 Rosenblatt 同年,Widrow 與 Hoff 提出 ADALINE: 用連續誤差(而非階梯輸出的離散誤差)學習—— 更穩定、更實用(見 1960-韋德羅ADALINE.md)—— 感知機的另一條分支活到了今天(自適應濾波、深度學習的優化器)。 - 歷史定位:Rosenblatt 是機器學習的第一位工程師—— 他建造了真正會「從經驗中改變自己」的機器——
媒體錯了(「會走路」太遠),但方向對了(學習是正途)。
關鍵人物與文獻#
- F. Rosenblatt:The Perceptron(1958);Principles of Neurodynamics(1962);Mark I Perceptron(1958–1960)。
- M. Minsky 與 S. Papert:Perceptrons(1969)——單層能力的數學極限(1969 圖靈獎得主 Minsky)。
- D. Hebb:學習規則(1949)——感知機的直接源頭(見
1949-赫布學習規則.md)。 - W. S. McCulloch 與 W. Pitts:神經元邏輯模型(1943)——閾值單元。
- J. Backus:FORTRAN(1957)——感知機模擬的計算平台(見
程式語言/1957-巴克斯FORTRAN.md)。 - B. Widrow 與 T. Hoff:ADALINE 與 delta 規則(1960)——並行的務實路線。
- 相關案件:
1943-麥卡洛克皮茨神經元.md、1949-赫布學習規則.md、1960-韋德羅ADALINE.md、資訊科學/1936-圖靈機.md、程式語言/1957-巴克斯FORTRAN.md。