1960 - Widrow–Hoff ADALINE(delta 規則與最小均方)#
案件摘要#
1960 年,史丹佛的 Bernard Widrow(1929–) 與博士生 Ted Hoff(1937–) (後來的 Intel 4004 微處理器共同發明人!)發表 ADALINE (Adaptive Linear Neuron,自適應線性神經元):
ADALINE 與感知機的關鍵差別: - 感知機用階梯函數後的離散誤差 \((t - o)\) ; - ADALINE 用階梯函數前的連續誤差:
delta 規則(LMS)——對誤差 \(E\) 做梯度下降:
形式上與感知機相同,本質上更深刻:它在最小化二次誤差面—— 收斂性更強、對雜訊更穩健。 ADALINE/Madaline 是第一批實際應用的神經網路: 電話迴音消除器(adaptive filter)曾部署在全球的電話網路中——
前因 -- 為什麼會有這個案子#
- Rosenblatt 感知機的缺陷(1958): 感知機的學習用階梯輸出的誤差 \((t - o) \in \{-1, 0, 1\}\) —— 錯很多只知「錯了」:誤差訊號粗、收斂慢、對雜訊敏感。
Widrow 的回答:對連續誤差做梯度下降——delta 規則。 - McCulloch–Pitts 與 Hebb 的遺產(1943、1949): 神經元 = 閾值單元(1943-麥卡洛克皮茨神經元.md); Hebb 規則 = 學習的第一定律(1949-赫布學習規則.md)—— Widrow 把它們工程化:他要的不是模擬大腦,是有用的機器。 - 最小平方法的回聲(1795 → 1960): Gauss 與 Legendre 在 1795 年前後發明最小平方法(least squares):
這是回歸分析的基礎。Widrow–Hoff 的 LMS 是最小平方法的線上版—— 不一次吃全部資料,而是一個樣本一個樣本地更新:
- 貝爾實驗室的迴音問題(1950s–1960s): 長途電話有迴音(訊號反射回原端)—— 迴音路徑因線路而異、隨時間變化—— 固定濾波器無法消除——需要自適應(adaptive)的濾波器—— ADALINE 正好是「會自我調整的線性濾波器」——
線索與推理 -- 數學式、程式、理論#
第一條線索:ADALINE 的形式定義#
ADALINE 是一個線性單元(無階梯函數的輸出):
- 輸出 \(y\) 是連續的(與感知機的二值輸出不同);
- 二值決策(若需要)在 \(y\) 之後用符號函數 \(\mathrm{sgn}(y)\) 做出;
- 學習發生在連續輸出 \(y\) 上——這是核心差別。
第二條線索:delta 規則 = 誤差面的梯度下降#
均方誤差(單一樣本):
對 \(E\) 求梯度(連鎖法則):
梯度下降(往誤差下降最快的方向走):
這是 delta 規則(LMS, least mean squares)—— - 感知機:誤差 \((t - o)\) 只有 \(\{-1, 0, +1\}\) (階梯後); - ADALINE:誤差 \((t - y)\) 是連續實數(階梯前)—— 錯得越多,推得越用力——
- 收斂性:當 \(\eta\) 足夠小( \(\eta < 2/\lambda_{\max}\) , \(\lambda_{\max}\) 是輸入相關矩陣的最大特徵值), LMS 必收斂到誤差面的最低點——比感知機的行為更可控。
第三條線索:LMS = 最小平方法的線上版#
批次最小平方(Gauss, 1795):一次用全部 \(p\) 筆資料解正規方程:
線上 LMS(Widrow, 1960):一筆一筆更新:
- 兩者收斂到同一個解(最小均方解);
- 但 LMS 不需要儲存全部資料、能追蹤緩慢變化的系統——
- 這正是迴音消除需要的:迴音路徑隨時間變化, LMS 濾波器即時跟蹤—— 這是隨機梯度下降(SGD)的第一次實戰。
Python:LMS 線性回歸與自適應濾波#
# 1) LMS(delta 規則):Δw = η (t - y) x,對「連續輸出」的誤差
def lms_train(X, t, eta=0.1, epochs=50):
"""線性回歸:y = w·x,最小化均方誤差"""
w = [0.0] * len(X[0])
history = []
for ep in range(1, epochs + 1):
total_se = 0.0
for x, target in zip(X, t):
y = sum(wi * xi for wi, xi in zip(w, x)) # 連續輸出(無階梯函數)
e = target - y
total_se += e * e
for i in range(len(w)):
w[i] += eta * e * x[i] # Δw = η(t-y)x
mse = total_se / len(X)
history.append((ep, mse, list(w)))
return w, history
# 2) 線性回歸:學習 y = 2x1 + 3x2(沒有截距的簡單案例)
X = [(1, 1), (2, 1), (3, 2), (1, 3)]
t = [5, 7, 12, 11] # y = 2x1 + 3x2
w, hist = lms_train(X, t, eta=0.05, epochs=30)
print("LMS 線性回歸(學習 y = 2x1 + 3x2):")
for ep, mse, ww in hist[:4]:
print(f" epoch {ep:2d}: MSE={mse:.4f} w={ww}")
print(" ...")
for ep, mse, ww in hist[-2:]:
print(f" epoch {ep:2d}: MSE={mse:.6f} w={ww}")
print("\n學到的權重:")
print(f" w1={w[0]:.4f}(目標 2)、w2={w[1]:.4f}(目標 3)")
# 3) 驗證:預測新資料
print("\n新資料的預測:")
for x in [(4, 1), (2, 2)]:
y = w[0] * x[0] + w[1] * x[1]
print(f" x={x} → y={y:.3f} (真值 {2*x[0] + 3*x[1]})")
# 4) 自適應濾波:電話迴音消除
print("\n自適應濾波(電話迴音消除):")
# 接收訊號 d = 原聲 s + 迴音;LMS 濾波器先「辨識」迴音路徑(學到係數)
s = [1.0, 0.5, -0.5, 1.0, 0.0, 0.5]
echo_a = 0.6 # 真實迴音係數(未知,待學習)
echo = [echo_a * s[i-1] if i > 0 else 0.0 for i in range(len(s))]
d = [s[i] + echo[i] for i in range(len(s))] # 接收到的訊號
w_f = 0.0 # 濾波器對迴音係數的估計
step_no = 0
for rep in range(6): # 通話持續,訊號反覆輸入
for k in range(1, len(s)):
step_no += 1
x_echo = s[k-1] # 迴音的來源訊號(延遲一拍)
y_echo = w_f * x_echo # 估計的迴音
e = echo[k] - y_echo # 誤差 = 真迴音 - 估計迴音
w_f += 0.5 * e * x_echo # LMS 更新
if step_no % 6 == 0:
print(f" step {step_no:2d}: 迴音估計={w_f:.4f} 誤差={e:.4f}")
print(f" 最終估計 w={w_f:.4f}(真實迴音係數 {echo_a})✓")
print(" 迴音消除:從接收訊號減去估計的迴音:")
for k in range(1, len(s)):
residual = d[k] - w_f * s[k-1]
print(f" 原聲={s[k]:+.1f} 消除後殘留={residual:+.4f} (≈原聲,迴音已被移除)")
print("\n結論:delta 規則 = 最小平方法的線上版——Gauss(1795)的現代迴響。")
LMS 線性回歸(學習 y = 2x1 + 3x2):
epoch 1: MSE=38.6127 w=[2.34875, 2.0962500000000004]
epoch 2: MSE=1.1261 w=[2.5729332499999997, 2.4818947500000004]
epoch 3: MSE=0.5877 w=[2.5119136657999994, 2.6065766604000005]
epoch 4: MSE=0.4337 w=[2.4265237128070694, 2.68139029060641]
...
epoch 29: MSE=0.000024 w=[2.0031487732557163, 2.9976620378129493]
epoch 30: MSE=0.000016 w=[2.0025871300312024, 2.998079057558382]
學到的權重:
w1=2.0026(目標 2)、w2=2.9981(目標 3)
新資料的預測:
x=(4, 1) → y=11.008 (真值 11)
x=(2, 2) → y=10.001 (真值 10)
自適應濾波(電話迴音消除):
step 6: 迴音估計=0.5426 誤差=0.1148
step 12: 迴音估計=0.5904 誤差=0.0055
step 18: 迴音估計=0.5984 誤差=-0.0009
step 24: 迴音估計=0.5998 誤差=0.0003
step 30: 迴音估計=0.6000 誤差=0.0000
最終估計 w=0.6000(真實迴音係數 0.6)✓
迴音消除:從接收訊號減去估計的迴音:
原聲=+0.5 消除後殘留=+0.5000 (≈原聲,迴音已被移除)
原聲=-0.5 消除後殘留=-0.5000 (≈原聲,迴音已被移除)
原聲=+1.0 消除後殘留=+1.0000 (≈原聲,迴音已被移除)
原聲=+0.0 消除後殘留=+0.0000 (≈原聲,迴音已被移除)
原聲=+0.5 消除後殘留=+0.5000 (≈原聲,迴音已被移除)
結論:delta 規則 = 最小平方法的線上版——Gauss(1795)的現代迴響。
結案 -- 後果與影響#
- 第一批實用的神經網路(1960s):
- Madaline I(1961):多層 ADALINE,做自適應模式辨識;
- 迴音消除器:部署在全球電話網路——神經網路的第一個商業應用。
- 反向傳播的預言(1960 → 1986): delta 規則是「對連續誤差做梯度下降」—— Rumelhart–Hinton–Williams 的反向傳播(1986)把它推廣到多層: 誤差從輸出層逐層回傳,每層都用 delta 規則更新——
Widrow 的單層規則,養育了多層的世界。 - Hoff 的另一個傳奇(1971): Ted Hoff 離開史丹佛後加入 Intel, 是 Intel 4004 微處理器(1971)的四位共同發明人之一——
- 第一次寒冬中的倖存者(1969–1980s): Minsky–Papert 的批判(1969)凍結了感知機路線—— 但 ADALINE 因為有實際應用(電話、數據機)而倖存—— Widrow 的史丹佛實驗室持續運作,培養了新一代的神經網路研究者—— 務實的工程活過了理論的寒冬。
- 歷史定位:Widrow–Hoff 是神經網路的工程師與倖存者——
「讓它有用」——ADALINE 用電話網路證明了神經網路的價值。
關鍵人物與文獻#
- B. Widrow 與 M. E. Hoff:Adaptive Switching Circuits(1960 WESCON)——ADALINE 與 delta 規則。
- B. Widrow 與 S. Stearns:Adaptive Signal Processing(1985)——自適應濾波的教科書。
- M. E. Hoff:Intel 4004 微處理器(1971)四位發明人之一。
- F. Rosenblatt:感知機(1958)——同年的競爭與對照(見
1958-羅森布拉特感知機.md)。 - C. F. Gauss 與 A. M. Legendre:最小平方法(1795/1805)——LMS 的數學遠祖。
- D. E. Rumelhart、G. E. Hinton、R. J. Williams:反向傳播(1986)——delta 規則的多層推廣。
- 相關案件:
1943-麥卡洛克皮茨神經元.md、1949-赫布學習規則.md、1958-羅森布拉特感知機.md、資訊科學/1936-圖靈機.md。