一
要理解人工神经网络这条线路的起点,得先理解一个奇怪的转译动作:把“神经元放电”翻译成“逻辑命题为真”。
1943 年,神经生理学家 Warren McCulloch 和当时只有十八岁、没有任何正式学位的逻辑天才 Walter Pitts,在《数理生物物理学通报》上发表了《神经活动中内在思想的逻辑演算》(A Logical Calculus of the Ideas Immanent in Nervous Activity)1。他们抓住了真实神经元的一个粗糙但关键的特征:神经元的放电是“全或无”(all-or-none)的——要么发放一个动作电位,要么不发放,没有中间状态。
既然输出只有 0 和 1,McCulloch 和 Pitts 就把神经元当成一个逻辑命题的真值:放电=真,静息=假。一个神经元接收若干输入,每个输入要么兴奋要么抑制,当兴奋输入的总和超过某个阈值、且没有抑制输入被激活时,它就放电。他们随后用纯粹的命题逻辑证明:把这种单元按合适的方式连接起来,可以实现任意逻辑函数——与、或、非,以及它们的任意组合2。
这是一个分水岭式的论断。它意味着大脑的“思维”原则上可以被还原为一张逻辑电路图,也意味着“计算”和“神经活动”在数学上是同一种东西。冯·诺依曼后来在设计存储程序计算机时引用了这篇论文;自动机理论、计算神经科学、人工智能都把它当作奠基文献之一1。
McCulloch-Pitts 神经元(下称 M-P 神经元)的数学形式极简。给定输入 ,权重 (在最初的版本里是固定的 ),阈值 ,输出为
写成一个阶跃函数(Heaviside step)就是 。
它能算逻辑“与”:两个输入、权重都为 1、阈值设为 2,只有两个输入都为 1 时和才达到 2。它能算“或”:阈值设为 1。它能算“非”:用一个抑制性输入。把这些拼起来,理论上任意布尔函数都能搭出来。
但 M-P 神经元有一个致命的留白:权重和阈值是人手工设定的,模型本身不会学习。它是一台需要工程师拧螺丝的逻辑机器,不是一台能从经验里自己拧螺丝的机器。让神经元“会学习”的那一步,要等到 Hebb 和 Rosenblatt。
二
1949 年,心理学家 Donald Hebb 在《行为的组织》里提出了一条后来被反复引用的学习原则,常被概括成一句口诀:“一起放电的神经元,会连在一起”(neurons that fire together, wire together)。用数学语言说,如果突触前神经元 和突触后神经元 经常同时激活,它们之间的连接权重 就应该增强:
Hebb 规则第一次把“学习”定义成“权重的局部修改”,而且是一条只依赖局部信息(前后两个神经元的活动)的规则。这正是后来所有神经网络学习算法的雏形:学习 = 调权重。但 Hebb 规则本身是无监督的、没有“目标”的,它只会让经常共现的连接变强,不会朝某个任务目标去优化。
把“目标”引进来、并给出第一台真正可训练的机器的,是 Frank Rosenblatt。
三
Rosenblatt 是康奈尔大学训练出来的心理学家,1956 年拿到博士学位后进入康奈尔航空实验室(Cornell Aeronautical Laboratory)3。1957 年他做出第一个感知机(Perceptron)原型,1958 年在《心理学评论》(Psychological Review,第 65 卷 386–408 页)发表《感知机:大脑中信息存储与组织的概率模型》34。
感知机与 M-P 神经元的根本区别在于:权重不再是手工设定的,而是从数据里学出来的。Rosenblatt 把它描述为第一个“精确指定、面向计算”的神经网络模型,并配上了一套受物理系统启发的可调参数与训练数学4。它不是一个纯软件概念——Mark I Perceptron 是一台真实的硬件机器,用一个 20×20 的光电管阵列做“视网膜”,用电位器(可变电阻)的旋转角度物理地存储权重,靠电机自动调节。这是历史上第一台“看着学”的机器。
感知机的前向计算和 M-P 神经元几乎一样,只是把阈值 挪到左边、记成偏置 ,并把权重并进一个向量 :
真正的新东西是学习规则。给定一批带标签的样本 ,,感知机逐个看样本,每看一个就比较自己的预测 和真实标签 ,按误差修正权重:
其中 是学习率。这条规则的直觉非常清楚:
- 如果预测对了(),误差项 ,权重不动。
- 如果该输出 1 却输出了 0(),就把 加到权重上——这会让下次 变大,更可能越过阈值。
- 如果该输出 0 却输出了 1(),就把 从权重里减掉——下次更不容易越过阈值。
每一次“犯错”都把决策边界朝正确方向推一点。这就是“从错误中学习”最朴素的数学化身。
四
感知机最迷人的地方,是它带着一个理论保证:只要数据是线性可分的,这个朴素的纠错规则一定会在有限步内停下来,而且能算出停下来之前最多犯多少次错。这就是 1962 年由纽约大学数学家 Albert Novikoff 证明的感知机收敛定理56。
把标签换成 更方便表述。假设存在一个单位向量 (| = 1)能以间隔(margin) 把数据分开,即对所有样本
再设所有数据点的范数有界,。那么感知机(、从零权重开始)犯错的总次数 满足
证明只用到两个简单的不等式,思路非常优雅,值得完整走一遍。设 k 是犯了第 次错之后的权重,每次犯错都做 {k} = \mathbf{w}_{k-1} + y_i \mathbf{x}_i。
下界(投影在增长):考察 在理想方向 上的投影。每犯一次错,
\top}\mathbf{w}_k = \mathbf{w}^{\top}\mathbf{w}{k-1} + y_i,(\mathbf{w}^{\top}\mathbf{x}_i) \ge \mathbf{w}^{\top}\mathbf{w}{k-1} + \gamma
从零开始累加 次,得到 \top}\mathbf{w}_M \ge M\gamma。由柯西-施瓦茨,\top}\mathbf{w}_M \ge M\gamma。
上界(范数长得慢):考察 k 自身的长度平方。每次犯错(犯错意味着 {k-1}^\top\mathbf{x}_i) \le 0),
k|^2 = |\mathbf{w}{k-1}|^2 + 2 y_i(\mathbf{w}_{k-1}^\top\mathbf{x}_i) + |\mathbf{x}i|^2 \le |\mathbf{w}{k-1}|^2 + R^2
累加 次得 ,即 。
合并:,两边整理得 。证毕。
这个界为什么重要?它说明收敛次数完全不依赖于数据的维度,也不依赖于样本的数量,只依赖于“几何上数据分得有多开”(间隔 )和“数据有多大”(半径 )。间隔越大、越好分,犯错越少。这是机器学习里第一个把“可学习性”量化成几何量的结果,是后来支持向量机(最大化间隔)和统计学习理论的思想先声。
五
理论保证带来了第一波过度乐观。Rosenblatt 本人和当时的媒体都对感知机做了大胆预言,《纽约时报》报道说海军期待这种机器未来能行走、说话、看、写、自我复制并意识到自己的存在。一时间感知机被当成通向人工智能的康庄大道。
但收敛定理有一个被乐观情绪盖住的前提,藏在那个 if 里:只要数据线性可分。如果数据不是线性可分的呢?定理什么都不保证——事实上,对线性不可分的数据,感知机的权重会永远来回震荡,不会停。
而“线性可分”这个前提,远比人们想象的脆弱。
六
1969 年,麻省理工学院的 Marvin Minsky 和 Seymour Papert 出版了《感知机》(Perceptrons)一书,用严密的代数和几何分析,系统地刻画了单层感知机能算什么、不能算什么7。其中最著名、杀伤力最大的一个例子,是逻辑“异或”(XOR)。
XOR 的真值表是:,,,。把这四个点画在平面上,标签为 1 的两个点 和 落在一条对角线上,标签为 0 的两个点 和 落在另一条对角线上。没有任何一条直线能把“1 类”和“0 类”分到两边——这就是线性不可分8。
而单层感知机的决策边界 恰恰就是一条直线(高维里是一个超平面)。所以单层感知机在数学上不可能学会 XOR。这不是训练不够久或学习率没调好的问题,是表达能力的硬上限。
更要命的是,Minsky 和 Papert 还分析了一类需要“全局”信息的几何谓词(比如判断一个图形是否连通),论证了某些问题所需的感知机规模会随问题规模爆炸式增长。书的整体基调,给当时方兴未艾的神经网络研究泼了一盆冷水。
历史叙述里常说《感知机》一书“直接引发了第一次 AI 寒冬”——这个因果应当谨慎对待。这本书出版后不久,神经网络研究的资助和热情确实显著下降,进入了从 1970 年代初到 1980 年代初的低潮期8。但把整场寒冬归因于一本书,是把复杂的资助政治、学术派系、技术瓶颈简化成了一个戏剧性的转折点。比较稳妥的说法是:《感知机》给出了单层模型局限的权威论证,与当时本就存在的过度承诺落空、算力不足等因素叠加,共同促成了那段低潮。
值得强调的是另一个常被忽略的事实:Minsky 和 Papert 批判的是单层感知机。他们也清楚,多层网络原则上能突破线性局限——把多个感知机叠起来,第一层先把 XOR 变换到一个线性可分的新空间,第二层就能分开。书里对多层网络能否被有效训练持悲观态度,而这恰恰是问题的真正关键:缺的不是多层结构的想法,而是训练多层网络的算法。这个算法,就是反向传播——它的核心思想其实在《感知机》出版前后就已被一些人独立发现,却要等到 1986 年才真正改变历史。那是下一章的故事。
七
把这一章的数学落到能跑的代码上,最能体会“收敛”与“不收敛”的分野。下面是用纯 NumPy 写的感知机,逐样本在线更新,完全对应第三节的更新规则(完整文件见配套代码 code/01_perceptron.py,可直接运行):
展开代码 · 01_perceptron.py
"""
第 01 章配套代码:感知机(Perceptron)从零实现
Runnable with: numpy only. python3 01_perceptron.py
复现 Rosenblatt 1958 在线学习规则 + Novikoff 1962 收敛性的经验验证。
演示:感知机能学线性可分(AND/OR),不能学 XOR(Minsky-Papert 1969)。
"""
import numpy as np
rng = np.random.default_rng(0)
def perceptron_train(X, y, lr=1.0, max_epochs=100):
"""Rosenblatt 在线感知机。y in {0,1}。
更新规则: w <- w + lr * (y_i - y_hat_i) * x_i ; b <- b + lr*(y_i - y_hat_i)
返回 (w, b, epochs_to_converge, mistake_count)。
"""
n, d = X.shape
w = np.zeros(d)
b = 0.0
mistakes = 0
for epoch in range(max_epochs):
errors = 0
for i in range(n):
y_hat = 1 if (X[i] @ w + b) >= 0 else 0
update = lr * (y[i] - y_hat)
if update != 0:
w += update * X[i]
b += update
errors += 1
mistakes += 1
if errors == 0:
return w, b, epoch + 1, mistakes
return w, b, max_epochs, mistakes
def novikoff_bound(X, y):
"""Novikoff 1962 错误上界 (R/gamma)^2 的经验估计。
用 {-1,+1} 标签找一个分隔超平面的 margin 下界(这里用已收敛的 w 近似)。
"""
Xpm = X
R = np.max(np.linalg.norm(Xpm, axis=1))
return R
if __name__ == "__main__":
# 线性可分: 逻辑 AND
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=float)
y_and = np.array([0, 0, 0, 1])
w, b, ep, mis = perceptron_train(X, y_and)
print(f"[AND ] 收敛于 {ep} epoch, 共 {mis} 次错误更新, w={w}, b={b:.1f}")
# 线性可分: 逻辑 OR
y_or = np.array([0, 1, 1, 1])
w, b, ep, mis = perceptron_train(X, y_or)
print(f"[OR ] 收敛于 {ep} epoch, 共 {mis} 次错误更新, w={w}, b={b:.1f}")
# 线性不可分: XOR —— 不会收敛(Minsky-Papert 1969)
y_xor = np.array([0, 1, 1, 0])
w, b, ep, mis = perceptron_train(X, y_xor, max_epochs=100)
print(f"[XOR ] 100 epoch 仍未收敛 (ep={ep}), 错误更新累计 {mis} 次 —— 线性不可分,感知机无解")
# Novikoff 边界示意(R = 最大数据范数)
R = novikoff_bound(X, y_and)
print(f"[Novikoff] 数据最大范数 R={R:.3f}; 错误界 (R/gamma)^2 随 margin gamma 减小而增大")
import numpy as np
def perceptron_train(X, y, lr=1.0, max_epochs=100):
n, d = X.shape
w = np.zeros(d); b = 0.0; mistakes = 0
for epoch in range(max_epochs):
errors = 0
for i in range(n):
y_hat = 1 if (X[i] @ w + b) >= 0 else 0
update = lr * (y[i] - y_hat) # 误差项 (y - y_hat)
if update != 0:
w += update * X[i] # w <- w + eta*(y-y_hat)*x
b += update # b <- b + eta*(y-y_hat)
errors += 1; mistakes += 1
if errors == 0: # 一整轮无错 => 收敛
return w, b, epoch + 1, mistakes
return w, b, max_epochs, mistakes
X = np.array([[0,0],[0,1],[1,0],[1,1]], dtype=float)
print(perceptron_train(X, np.array([0,0,0,1]))) # AND
print(perceptron_train(X, np.array([0,1,1,0]))) # XOR
实际运行的输出是:
[AND ] 收敛于 6 epoch, 共 11 次错误更新, w=[2. 1.], b=-3.0
[OR ] 收敛于 4 epoch, 共 5 次错误更新, w=[1. 1.], b=-1.0
[XOR ] 100 epoch 仍未收敛, 错误更新累计 398 次 —— 线性不可分,感知机无解
AND 和 OR 是线性可分的,感知机分别在 6 轮和 4 轮内停下,权重 给出的边界 确实把 单独分到正侧。而 XOR 跑满 100 轮也停不下来,错误更新累计近四百次还在震荡——这正是 Novikoff 定理的反面:前提(线性可分)不成立,保证(有限步收敛)就消失。代码把 1969 年那个抽象的代数结论,变成了屏幕上一行永不收敛的计数。
八
用一张图把这一章的几何直觉钉死。下面是 XOR 四个点的布局(o 为类别 0,x 为类别 1):
x2
1 | x(0,1) o(1,1)
|
| (任何一条直线都无法
| 把 x 和 o 分到两侧)
0 | o(0,0) x(1,0)
+-------------------------- x1
0 1
AND 的布局则是线性可分的——只有 是类别 1,一条直线(如 )就能把它从其余三点里切出来:
x2
1 | o(0,1) x(1,1) 边界 2*x1 + x2 = 3
| / (右上角单独划出)
0 | o(0,0) / o(1,0)
+-------------------------- x1
配套的 manim 动画 assets/manim/ch01_perceptron.py(含 PerceptronLine 与 XORImpossible 两个 Scene)把这件事演成几何:在 AND 上,一条分隔直线随权重更新而旋转、平移,最终把两类点干净分开;在 XOR 上,同一条直线无论怎么转、怎么移,总有一个点被切到错误的一侧。两段动画并排,就是感知机一生的隐喻——在它能分开的世界里,它优雅、可证明、必然收敛;在它分不开的世界里,它再努力也只是徒劳地震荡。
这台 1958 年的机器,第一次让“学习”成为可被数学保证的事,也第一次让我们看清:单一线性决策面的表达能力是有硬边界的。突破这个边界需要两样东西——更深的结构,和训练更深结构的算法。前者的想法早已存在,后者,将在十七年后以“反向传播”之名,把整个领域从寒冬里拉出来。
本质
感知机真正的贡献不是“模仿神经元”,而是把“学习”这件模糊的事变成了一个可证明的几何操作:在特征空间里找一个分隔超平面,并给出一条一定能找到它的更新规则。它的伟大与它的局限是同一件事——它只会画一条直线。能用一条直线分开的世界,它必然学得会且必然收敛;分不开的世界(哪怕简单如异或),它再努力也只是徒劳地震荡。此后六十年的整部神经网络史,本质上是在回答感知机留下的那一个问题:当一条直线不够用时,怎么把许多条直线叠成任意复杂的曲面。
参考文献
-
McCulloch, W. S., & Pitts, W. (1943). A Logical Calculus of the Ideas Immanent in Nervous Activity. Bulletin of Mathematical Biophysics, 5, 115–133. 原文 PDF(CMU 镜像):https://www.cs.cmu.edu/~epxing/Class/10715/reading/McCulloch.and.Pitts.pdf ;Springer 记录:https://link.springer.com/article/10.1007/BF02478259
-
“A Logical Calculus of the Ideas Immanent in Nervous Activity” — 综述与影响(含 von Neumann 引用、Pitts 生平)。Wikipedia:https://en.wikipedia.org/wiki/A_Logical_Calculus_of_the_Ideas_Immanent_in_Nervous_Activity
-
Rosenblatt, F. (1958). The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain. Psychological Review, 65(6), 386–408. Cornell Aeronautical Laboratory. PsycNet 记录:https://psycnet.apa.org/record/1959-09865-001
-
Rosenblatt 1958 原文 PDF(UIC 镜像):https://homepages.math.uic.edu/~lreyzin/papers/rosenblatt58.pdf ;MIT Press Ideas That Created the Future 评注:https://ieeexplore.ieee.org/document/9357585
-
Novikoff, A. B. J. (1962). On Convergence Proofs for Perceptrons. 原始技术报告(DTIC AD0298258):https://apps.dtic.mil/sti/tr/pdf/AD0298258.pdf
-
感知机收敛定理证明(教学整理,含 (R/γ)² 界)。University of Waterloo CS480/680 讲义:https://cs.uwaterloo.ca/~y328yu/teaching/480/480-note-per.pdf ;Perceptron 综述:https://en.wikipedia.org/wiki/Perceptron
-
Minsky, M., & Papert, S. (1969). Perceptrons: An Introduction to Computational Geometry. MIT Press. 综述:https://en.wikipedia.org/wiki/Perceptrons_(book)
-
“Perceptrons, XOR, and the first AI winter”(XOR 线性不可分性与寒冬背景,二手综述,含史料梳理)。Sean Trott:https://seantrott.substack.com/p/perceptrons-xor-and-the-first-ai ;“The Perceptron Controversy”(优先权与争议梳理):https://yuxi-liu-wired.github.io/essays/posts/perceptron-controversy/