阶段 1 · 最小学习机器

感知机:一刀切开
整个世界的机器

1958 年的感知机,是最小号的"人工智能": 在平面上画一条直线,把东西分成两堆。 《数学地图》摆好路标,这一章就动第一刀—— 后面所有网络都只是这一刀的叠加。

1

在这之前,规则是人写的

你想写个程序,判断一封邮件是不是垃圾邮件。你能想到的写法只有一种: 自己把规则一条条列出来。

出现「中奖」「点击链接」「汇款」,就判成垃圾;发件人不在通讯录里,也判成垃圾。 写完拿几十封邮件试一遍,漏了几个,再补两条。

而且规则一多还会互相打架:「汇款」是诈骗,可家人给你打钱也写「汇款」。

对比规则由人写规则由数据定
规则从哪来你想出来的算法从例子里算出来
你要提供什么一份规则清单一批带答案的例子
你没想到的怎么办它永远看不见例子会替你说

1958 年,Rosenblatt 造了一台走第二条路的机器。它是第一台 你没告诉它规则、它自己从例子里定出一条规则的机器。 这一章要看的,就是这条规则长什么样。

2

它到底在算什么

这是个监督学习的最小学徒——给它一批带答案的例子,它自己从例子里调。 具体说,给它两个输入(比如"考试分数"和"作业完成度"),它做三步: 加权相加 → 加偏置 → 过一道门槛。算出来的那个数叫 z(加权和,也是它给这个点打的"分数"):z 大于 0 输出 1,否则输出 0。

🎯 类比

像公司裁员:每个员工有一个"重要度"权重,老板把大家的表现加权加起来,超过某条线就"留下"(1),否则"走人"(0)。 这个类比只到门槛为止——公司的结局只有两个, 但感知机真正的上限不在输出上,而在下一节那条线里。

3

为什么说它"画了一条线"

把两个输入当成平面上的横纵坐标。感知机输出 1 的区域和输出 0 的区域, 中间永远隔着一条直线。拖动下面的滑块,看这条线怎么动。 蓝点想让输出为 1,橙点想让输出为 0;带上红圈的,说明它分错了。

为什么它画出来的,一定是一条直线?

分界线就是这个方程:w₁x₁ + w₂x₂ + b = 0,意思是「分数 z 刚好等于 0」。 其中 w₁、w₂、b 是定好的数字,只有 x₁、x₂ 在动;每换一组 (x₁, x₂) 就是一个点, 分数刚好为 0 的那些点连起来,正好是一条直线。

互动 · 拖滑块,看分界线怎么动

把鼠标停在下面公式里的 w₁ / w₂ / b 上,那根滑杆会亮起来,拖它看分界线怎么动。

💡 记住这个画面

后面所有神经网络都在做同一件事:把很多条这样的直线拼起来。 一条线只能切一刀;四条线可以围出一个方框;一百条线可以围出任意凸多边形(没有凹进去的角的多边形);想要任意形状,得再叠一层。 "深度"就是这么来的。

两个输入时,这一刀是平面上的一条线;三个输入时,它是一个平面; 再多,就叫超平面——名字变了,作用没变。

步骤公式人话
加权求和z = w₁x₁ + w₂x₂两个输入各按"重要程度"打个折,加起来
加偏置z = z + b再整体挪一挪,相当于"门槛高低"
过门槛z > 0 → 输出 1,否则 0够了就是 1,不够就是 0
4

它怎么学:错了就推一把

感知机的学习规则极其朴素,只有四种情况,其中两种需要动手:

正确答案它猜的怎么办
11猜对了,什么都不做
00猜对了,什么都不做
10把权重往输入的方向加一点
01把权重往输入的方向减一点
🎯 类比

像调收音机旋钮:听到杂音就往一个方向拧,清楚一点就继续拧。 区别是不用你判断清不清楚,答案早就写在例子里了。
它没有复杂的数学,只有「错就修」。感知机收敛定理保证了:只要问题真的能被一条直线分开,它一定能学会。

互动 · 错就推一把:推的到底是哪几个数

5

亲手训练:AND、OR都能学会

下面在浏览器里跑感知机学习算法。 点"开始训练",看那条线慢慢挪到正确的位置。

互动 · 实时训练

更新次数
0
当前错误点
0

M

数学 · 点怎么算,线怎么动

前面五节你一直在拖那条线、看它自己挪。这一节把两件事摊开: ① 一个点是怎么被算成 0 或 1 的(前向),以及 ② 那条线为什么会动(反向)。两边的符号是同一批,只换一个记法—— 为了公式对称,下面把输出 0 记成 −1:输出 1 ↔ +1,输出 0 ↔ −1。

① 一个点,怎么变成 0 或 1

互动 · 左边的点,右边把它的分数拆成三条横条

互动 · 每个符号管图上的哪一块

操作:把 w₂ 拖到 0,分界线变成竖的,因为第二条横条彻底没了。 再把 x₁ 拖成负数,第一条横条翻到门槛左边,那个点跟着跳到另一半。 图上哪一块动了,公式里就是哪个符号在动,一一对应。

② 线为什么会动:错就推一把,推的到底是谁的梯度

第 4 节给了你一张表,说「错了就往输入的方向推一把」。这一半回答两件事: 那个方向为什么是它,以及为什么推完真的对了一点。 先记住两个词:梯度 回答「w 动一点,错得有多远会跟着变多少」这个问题,求导 就是算它的动作。 顺带你会看到全站反复出现的一句话:一个弯的东西,只要盯住一小块,它就是直的。

感知机在雾里下山:它看不见整座山,只能摸脚下。而且它摸的不是全部, 只是被它分错的那几个点。先把「这次错得有多远」记成一个数:

公式卡 · 这次错得有多远

符号人话在图上是哪一块
L这次的损失,越小越好下面右图那条折线的高度
x_i第 i 个点左边平面上的一个圆点
y_i第 i 个点的真实答案(+1 或 −1)那个点是蓝的还是橙的
w·x_i + b算出来的分数它落在分界线的哪一边
max(0, ·)分对了就不计分折线的折痕就在这儿,越过它,这一项就归零
Σ把所有点加起来右图那条曲线是所有点一起贡献的

只看那个被分错的点(分对的点贡献 0,求导也是 0),对 w 求导:

公式卡 · 往哪个方向推

这个式子说了三件事,第三件最反直觉。 ① 方向由 x_i 定,往那个点自己的方向推。 ② 正负由 y_i 定,它该在哪一边,就往哪边推。 ③ 力度不由「错得多远」定。求导时 w·x 的系数就是 x, 错多远根本没出现在结果里。 所以「走多远」要另外给一个数:η(读「伊塔」,叫学习率)——每次沿这个方向推多远,由人定。 梯度只回答「往哪走」,从不回答「走多远」。

于是「推一把」就是把上面那个方向走一步:

公式卡 · 走一步

把它和第 4 节那张表对一遍,一模一样:

真实答案 y它猜的y·x 是什么第 4 节那张表怎么说的
+1−1+x把权重往输入的方向加一点 ✓
−1+1−x把权重往输入的方向减一点 ✓

「错了就推一把」听起来像一条经验规则。它不是——它就是梯度下降。 后面每一章你都会看到同一个动作:先算出往哪走(梯度),再按 η 走一步。 感知机只是这件事最简单的一个版本。

脉络 Ⅰ 的第一课:这一章的损失面,是几块平板拼的

左边那些点你还认得。右边这条曲线是损失随 w₁ 变化的样子:它由几段直线拼起来,不是光滑的弧。 拖 η,然后按「推一步」,看小球落到哪。

互动 · 摸脚下的那块板

折痕出现在「某个点刚好压在分界线上」的那一瞬间。只有那一刻,它才从「不计分」变成「计分」。 所以在任何一段上,你脚下都是一块平板,梯度处处一样,一眼看到底。 而感知机这一章简单到连曲面都不是,只是几块平板拼的帐篷。

真实的感知机,也是这样一次算所有错分点吗?

不是。真实实现每次只挑一个错分点推一把(更省,也叫随机/在线感知机); 这里是把所有错分点一起算。两者方向一致、都能收敛,只是路径不同。

为什么损失会有一段完全平的?

因为这一段的 w₁ 让三个点全部分对了:每一项 max(0, ·) 都归零。平地上梯度是 0,所以一旦走进去就彻底不动了:感知机停下来, 不是因为「学得够好」,是因为没得可推了。

η 拖小和拖大,到底差在哪?

都从同一个起点出发:η=0.05 每步只挪一点点,走十几步才归零; η=0.35 三步归零;η=1.5 一步就跳到了零损失。
梯度只回答「往哪走」,走多远一直是你定的。

③ 为什么它一定停得下来

第 4 节有一句话是直接给你的:「只要问题真的能被一条直线分开,它一定能学会。」 那就是 1962 年 Novikoff 证明的收敛定理。它的证明短到可以整段说完, 而且证完会露出一个很少被提的结论。

证明只用三个记号。γ(读「伽马」)是间隔:分界线离最近的那个点有多远。 R 是半径:最远的那个点离原点有多远。N 是更新了几次。 ‖w‖ 读「w 的长度」,就是 w 这个箭头从原点伸出去多长。

w 从 0 出发。设 w* 是那条能把两类点分开的线(长度取 1)。每次在一个分错的点 x 上推一把 (w ← w + η·y·x),w 和 w* 的点积(照 z 的办法两两相乘再相加)就涨了 η·y·(w*·x) ≥ ηγ (每个点的 y·(w*·x) 都不小于 γ); N 次之后 w*·wN ≥ ηγN。这是「进度」的下限。

再看长度:‖w‖²(长度的平方)每次涨 η²‖x‖² + 2η·y·(w·x)。 点被分错说明 y·(w·x) ≤ 0,所以每次最多涨 η²R²;N 次后 ‖wN‖² ≤ η²R²N, 开根号得 ‖wN‖ ≤ ηR√N。这是「路程」的上限。

两者一夹:ηγN ≤ w*·wN ≤ ‖wN‖ ≤ ηR√N (w* 长度取 1,所以点积不会超过 ‖wN‖)。η 约掉,就逼出步数的上界——和 η 取多少无关:

静态图 · γ 和 R 是图上哪两段

步数 N ≤ (R / γ)²  ——不管数据长什么样,只要线性可分,这个数就是有限的

下面这个互动让这条式子可以被你自己验。拖那个滑块,把两类点往中间挤—— 间隔越小,上界涨得越凶。

互动 · 把两类点挤近一点,看上界怎么变

0.40

真的去拖一遍,你会看到一件定理没明说的事: γ = 0.12 时,上界涨到 110 步,而它实际只走了 3 步。 把滑块从最右拖到最左(γ 从 0.90 拉到 0.08),上界从 4 涨到 245,实际步数只从 1 涨到 8。

所以这条定理保证的是「一定会停」,不是「要走这么多步」。 它给的是一个存在性的上界,而且这个上界非常松。

6

换掉一行,它就是另一个方法

感知机不是一次失败的尝试,是一条线的起点。 表里这些方法,每一个都能说清自己动的是哪里:门槛、损失、层数,或者「最后拿哪一组权重用」。

方法它改了哪一行换来什么什么时候你才需要它
感知机
Rosenblatt · 1958
本章这一个 3 个参数,一条「一定能停下来」的定理 两类东西之间真的隔着一道直墙
口袋算法
pocket · 1990
不改规则,只是多存一份目前为止最好的那组数值 切不开时也能收手,交出「错得最少」的那组 数据分不干净,又必须给个答案
平均感知机
averaged · 1999
最后不只取那最后一组,取历次结果的平均 换个数据顺序,答案不再飘 结果要能复现。2000 年前后的 NLP 拿它当标配
逻辑回归
Logistic Regression
只换门槛那一行:0/1 跳变 → 一条 S 形曲线(sigmoid) 输出从「是或否」变成「有多大把握」 要排序、要设阈值,而不只是要一个答案
支持向量机
SVM
换损失那一行,再要求间隔尽可能宽 间隔越宽越抗噪 数据有噪声、样本又不多
多层感知机
MLP
换门槛那一行(0/1 跳变换成 ReLU——一种门槛,小于 0 输出 0、大于 0 原样输出;《激活函数》那章细讲),再多叠几层 边界能弯,不再是一条直线 边界不再是直线的时候

最容易和本章混的是逻辑回归。两者算的是同一个分数 z,分界线也是同一条, 差别全在最后那一步和更新时机:感知机只在分错时动,逻辑回归每一步都动。 用法上的区别就一句话:感知机给你一个答案,逻辑回归给你一个把握。

7

它连 XOR 都学不会

把数据集切到 XOR(异或),你会看到它永远学不完:更新次数一直涨,错误数就是不归零。这不是训练不够久,是数学上不可能。

x₁x₂XOR 的答案
000
011
101
110

答案是 1 的那两个点——(0,1) 和 (1,0)——叫正例,另外两个是负例。

把上面的数据集切到「异或」看看

AND / OR 的四个点
一条线就能切开 ✅
XOR 的四个点
怎么画都切不开 ❌

XOR 的四个点分布在对角线上:同类的两个点被异类的两个点夹在两头。 任何一条直线最多只能切对三个点,这件事可以用一句话证明。

证法只有四步:设那条直线是 w₁x₁ + w₂x₂ + b = 0,输出 1 的那一半满足 w₁x₁ + w₂x₂ + b > 0。 (0,0) 要输出 0,得 b ≤ 0;(1,0) 和 (0,1) 要输出 1,得 w₁ + b > 0、w₂ + b > 0, 两式相加得 w₁ + w₂ + 2b > 0;两边减掉一个 b,得 w₁ + w₂ + b > −b;又因为 b ≤ 0,所以 −b ≥ 0。 可 (1,1) 要输出 0,又要求 w₁ + w₂ + b ≤ 0。两头的要求撞上了,这样的 w₁、w₂、b 不存在。

1969 年,Minsky 和 Papert 在《Perceptrons》里把这件事写成了证明,神经网络研究随后进入十几年的低谷。 这十几年换来的一句话是:它缺的不是训练技巧,是表达能力,而这件事可以被证明。

除了切不开,它还有四个毛病

限制具体表现什么时候真的会痛
只会划直线 边界必须是一道直墙,弯一点都不行 图片、语言、XOR,真实数据的边界很少是直的
切不开就永远转 它不会说「我做不到」。更新次数一直涨,错的分错点一直有几个 数据里有几条标错的样本时。它会一直转,看起来像「还没练够」
答案不唯一 能切开的线有无穷多条,它停在最先碰到的那一条 换一个数据顺序就得到另一条线:同一份数据跑两次,结果不同
只给答案,不给把握 输出只有 0 和 1,没有「有多像」这个数 要排序、要设阈值、要拿这个分数喂给下一步时,它给不出来

选型时先问一句:我的两类东西之间,真的隔着一道直墙吗? 是,就用它,3 个参数换来一个有收敛保证的算法,很难有比这更划算的。 不是,就得先想清楚要改哪一行,第 6 节那张表就是干这个用的。

8

出路:多叠几层,把直线折起来

一个感知机画一条线。但如果两个感知机各画一条线,再让第三个感知机把这两条线的结果组合起来,就能用这两条线夹出一条"带子",把 XOR 的两个正例点框进去。

这里要动两处,不是一处:门槛那一步先换成能折的 ReLU(第 6 节),再往上多叠几层。 只换门槛、不加层,边界还是直的;只加层、门槛还是 0/1 跳变,XOR 能拼得出来,但没法用梯度一点点把它训出来(跳变处以外斜率处处是 0)。

对比感知机(1 层)MLP(2 层)
能画什么一条直线折线拼出的多边形
XOR学不会轻松学会
参数量3 个9 个
类比一刀切用几刀围出一个框

互动 · 两条线之间的那条带子,正好是 XOR

9

小结

这一章没有公式要背。它留下来的东西是一个假设,而后面 70 多章都在干同一件事:换掉那个假设,或者把它变软。

它对应哪条线 ② 没有免费午餐——它的意思是:没有哪种方法对所有问题都最好;想在某类问题上好,就得先假设点什么。感知机把「一条直线就够用」这个假设,直接写进了算法本身
一句话 感知机的做法,本质上是在先假设「两类东西之间隔着一道直墙」,再去这条墙里找一个最好的位置。
它牺牲了什么 牺牲了表达力(暗线 B:什么被牺牲了)。换来的是两样很实在的东西:一个能证明一定收敛的定理,和 3 个参数的成本。
代价是:只要真实规律不是一道直墙,它就永远学不会。注意这是表达力不够(连训练数据都学不好),不是模型太灵活、把答案背了下来。
💡 检验一下:你现在能指着哪个互动说这句话

回到第 3 节那张图。把 w₁、w₂、偏置 b 三个滑块任意拖,分界线会转、会平移、会换角度,但永远是一条直线:你找不到任何一组数值能让它弯一下。

再切到第 5 节,把数据集换成「异或 XOR」,点开始训练。你会看到更新次数一直涨、 错误数就在 1~3 之间来回跳、永远不归零。
那个瞬间你看到的就是「假设破了,方法整个失效」。 如果你刚才没有想指着某个滑块说这句话,那这一节对你就是没用的,回去再拖一次。

它在暗线里站在哪

暗线这一章的回答
A 信息流动 两个数 (x₁, x₂) 进来,先被压成一个数 z, 再被压成一个比特 (0 或 1)。这是全课信息量最小的一步,能力上限就是被这个「塌缩」定死的
B 什么被牺牲了 牺牲了表达力,换来收敛保证。这笔交换很划算: 只要数据真的线性可分,这个笨规则一定能在有限步内停下。 代价是它表达不出任何一条直线切不开的规律
C 参数账本 2 个权重 + 1 个偏置 = 3 个参数,一次前向大约 3 次乘加——算力完全不是问题。
对比下一章:同一个 XOR 问题,最小的 MLP(2 个隐藏单元 + 1 个输出)要 9 个参数,下一章演示用的是更大的网络; 而 224×224 彩色图接一层「每个输入都连到每个神经元」的隐藏层,要 3,854 万个 参数。从 3 到 3854 万,中间没有台阶
E 它假设了什么 假设数据线性可分,也就是「两类之间隔着一道直墙」。 这个假设是公开写在算法里的,没有讨价还价的余地。XOR 就是它的破产现场,假设的代价在这里。
F 违背了哪个直觉 直觉是「多练就会好」。感知机在 XOR 上失败不是训练不够: 它的误差永远不归零,权值会一直绕圈。 数学上不存在解,练一万年也不会出现。「不够努力」和「不可能」是两件事。
另一个直觉是「看着像能分开,就一定分得开」——XOR 四个点画在纸上像两簇, 可一条直线怎么也切不开:「看着能分」和「线性可分」是两件事

它接住了什么:《数学地图》先让你认路——六块数学各在哪一章用上; 这一章就动手切第一刀,用的是其中的线性代数。

它给下一章留了什么:既然一条线不够,那就多画几条、再把它们接起来。 这就是 《MLP 多层感知机》要回答的问题。

一句话带走感知机

感知机 = 加权求和 + 过门槛,几何上就是一刀切开平面。
它的学习规则只是"错就推一把",简单到令人意外。
但它有个死穴:XOR 切不开。而补上这个死穴的方法,就是下一章的 MLP。

10

拓展阅读

上面讲的都是「够用」的版本。想往下挖,这里有三个入口—— 它们不是必修内容,是给想再往前走一步的读者准备的。

📄 这一章的说法从哪来

💻 工业界怎么写

∑ 更严格的形式