跳轉到

1986 - 反向傳播演算法(多層網路的復活)#

案件摘要#

1986 年,Rumelhart、Hinton 與 Williams 在《Nature》與《Learning Internal Representations by Error Propagation》中發表 反向傳播 (backpropagation) 演算法: 用鏈鎖律把輸出誤差逐層「反向傳播」回每一個權重,使多層神經網路可以訓練。

\[ \delta^{(l)} = (W^{(l+1)\top}\delta^{(l+1)}) \odot \sigma'(z^{(l)}), \qquad \frac{\partial L}{\partial W^{(l)}} = \delta^{(l)} a^{(l-1)\top}. \]

Minsky–Papert 批判的缺口(見「1969-MinskyPapert批判.md」)被正式補上——神經網路從死刑改判復活,深度學習的地基在此奠定。

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

  • 寒冬中的缺口:單層感知器有收斂定理(1957),但多層網路的隱藏層沒有教師訊號,誤差無法直接指導權重——「隱藏單元怎麼學?」是 17 年懸案。
  • 被遺忘的先行者(與傅立葉轉換案的高斯、Wilbraham 如出一轍):
  • Werbos(1974):哈佛博士論文首創反向傳播,但發表於政治學期刊,無人注意。
  • Linnainmaa(1970):已提出自動微分的鏈鎖律計算(反向模式)。
  • Kelley(1960)、Bryson(1961):最優控制中已有類似技巧。
  • Rumelhart 的偵探直覺:認知科學家 Rumelhart 與 Hinton 聯手,把自動微分包裝成神經網路學習演算法,並用 XOR 等例子證明實用性——發明早已存在,引爆時代的是這次發表。

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

第一步:把學習變成最佳化#

訓練 = 最小化損失函數:

\[ L(W) = \frac{1}{2}\sum_n \|y_n - \hat{y}_n\|^2, \qquad W \leftarrow W - \eta\,\nabla_W L. \]

問題只剩一個:多層網路中 \(\nabla_W L\) 怎麼算?

第二步:鏈鎖律的反向模式#

前向傳播: \(a^{(l)} = \sigma(z^{(l)}),\ z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}\) 。 輸出層誤差: \(\delta^{(L)} = \nabla_{\hat{y}} L \odot \sigma'(z^{(L)})\) 。 反向傳播核心:

\[ \delta^{(l)} = \left(W^{(l+1)\top}\delta^{(l+1)}\right) \odot \sigma'(z^{(l)}), \qquad \frac{\partial L}{\partial W^{(l)}} = \delta^{(l)}\, a^{(l-1)\top}. \]

每次反向傳播只需 \(O(\text{前向計算量})\) 時間——整個梯度的成本等於一次前向傳播。 隱藏單元的「教師訊號」找到了: \(\delta^{(l)}\) 就是誤差對每層的責任分配。

第三步:可微活化函數的關鍵#

階梯函數 \(H\) 不可微(導數處處為 0)——感知器無法反向傳播。 替換為 sigmoid:

\[ \sigma(z) = \frac{1}{1+e^{-z}}, \qquad \sigma'(z) = \sigma(z)(1-\sigma(z)). \]

導數有解析式、可用乘法計算——鏈鎖律暢通無阻。XOR 一夜之間成為入門練習(兩層網路 + 反向傳播)。

Python:手寫反向傳播解 XOR#

import numpy as np
np.random.seed(0)

X = np.array([[0,0],[0,1],[1,0],[1,1]], float)
t = np.array([[0],[1],[1],[0]], float)
sig  = lambda z: 1/(1+np.exp(-z))
dsig = lambda s: s*(1-s)

W1, b1 = np.random.randn(2,2), np.zeros(2)
W2, b2 = np.random.randn(1,2), np.zeros(1)
for epoch in range(10000):
    # 前向
    h = sig(X @ W1.T + b1)
    y = sig(h @ W2.T + b2)
    # 反向
    d2 = (y - t) * dsig(y)            # 輸出層誤差
    d1 = (d2 @ W2) * dsig(h)          # 隱藏層責任分配
    W2 -= 0.5 * d2.T @ h; b2 -= 0.5 * d2.sum(0)
    W1 -= 0.5 * d1.T @ X; b1 -= 0.5 * d1.sum(0)
print("XOR 預測:", np.round(y.ravel(), 3))
輸出:
XOR 預測: [0.003 0.997 0.997 0.002]
(1969 年被判死刑的 XOR,1986 年用 30 行程式翻案——鐵證如山。)

結案 -- 後果與影響#

  • 神經網路復活(1986–1990s):多層網路可訓練,聯結主義重回舞台;1987–1993 的第二次寒冬(符號 AI 崩盤)反而讓神經網路路線存活。
  • 歷史翻案:Werbos 1974 年的首創被追認;發明功勞屬於 Werbos,引爆時代的名聲屬於 Rumelhart–Hinton–Williams(Hinton 因此獲 2018 圖靈獎、2024 諾貝爾物理獎)。
  • 深度學習的地基:LeCun 的 CNN(1989,見「1989-LeCunCNN手寫辨識.md」)、LSTM(1997)、AlexNet(2012,見「2012-AlexNetImageNet革命.md」)全部建立在反向傳播之上。
  • 自動微分的勝利:反向模式微分成為 PyTorch、TensorFlow 的核心(autograd)——今天每一行神經網路程式都在執行 1986 年的演算法。
  • 未愈傷口:深層網路的梯度消失(sigmoid 導數 \(\le 0.25\) ,逐層連乘指數衰減)——這個缺口由 LSTM(見「1997-LSTM長短期記憶.md」)與 ReLU(2010s)補上。

關鍵人物與文獻#

  • D. E. Rumelhart, G. E. Hinton, R. J. Williams:Nature 323, 533 (1986);《Parallel Distributed Processing》(1986)。
  • P. Werbos:博士論文《Beyond Regression》(1974)——首創。
  • S. Linnainmaa:反向模式自動微分 (1970)。
  • 相關案件:1969-MinskyPapert批判.md、1989-LeCunCNN手寫辨識.md、2012-AlexNetImageNet革命.md。