感知器学习模拟器 返回
机器学习模拟器

感知器学习模拟器 — 线性分类器的收敛

2输入简单感知器 y = sign(w1·x1 + w2·x2 + b) 的学习规则可视化。对线性可分数据,决策边界收敛过程可通过改变学习率和初始值进行观察。

参数设置
学习率 η
迭代次数
w_1 初始值
b 初始值

w_2 的初始值固定为 0.5。数据由固定种子(LCG seed=42)生成,每次重绘显示相同的20个点。

计算结果
最终分类精度
学习后 w_1
学习后 w_2
收敛迭代次数
最终决策边界

蓝色圆点=类别+1/红色×=类别-1/绿色实线=学习后的决策边界/灰色虚线=真实边界 x1+x2=0

理论与主要公式

简单感知器是2输入线性阈值单元,输出为加权和的符号:

$$y = \operatorname{sign}(w_1 x_1 + w_2 x_2 + b)$$

学习规则(感知器学习算法,PLA)。$t$ 为教师信号 $\pm 1$,$y$ 为模型输出:

$$w_i \leftarrow w_i + \eta\,(t - y)\,x_i,\quad b \leftarrow b + \eta\,(t - y)$$

决策边界为 $w_1 x_1 + w_2 x_2 + b = 0$,图形表示为:

$$x_2 = -\frac{w_1 x_1 + b}{w_2}$$

间隔(到最近点的距离)通过权重范数标准化评估:

$$\gamma = \frac{w \cdot x_{\text{target}} + b}{\|w\|}$$

若数据线性可分,感知器收敛定理保证有限次迭代后必然得到分离超平面。

感知器学习模拟器简介

🙋
「感知器」是神经网络学习中最先出现的术语。这个概念现在还值得学习吗?
🎓
值得。跳过它的话,之后出现的深度学习会显得像「某种咒语」。简单感知器只是「用2个输入的加权和的符号来分开2个类」,最小化的模型,学习规则也简洁:$w \leftarrow w + \eta(t-y)x$。上面模拟器的「最终分类精度」是100%,因为数据线性可分。
🙋
当我把学习率 η 调到接近1.0时,决策边界的斜率变化很大。
🎓
那是因为步长太大,一个误分类点就会导致权重大幅摆动。线性可分的数据最后会收敛,但收敛到那一刻可能需要更多的迭代次数,或者决策边界会远离「真实边界 x1+x2=0」。实际操作中通常从较小的 η(0.01~0.1)开始,如果振动太大就调小,太慢就调大。
🙋
我注意到「收敛迭代次数」的卡片显示的数字相当小。这表示什么?
🎓
这是指「整个数据集过一遍都没有误分类的第一个迭代」。初始值 w=(0.5, 0.5), b=0 已经能很好地分离数据,所以几乎在第一次就达到零误差。试试把 w_1 初始值改成 -2,最初会把红色×和蓝色圆点分类反了,需要多个迭代才能收敛,这样就能看出差异。
🙋
那么「学习」本质上是从初期的猜测逐步接近正确答案?
🎓
完全正确。而且只在出现误分类时才进行修正,这是一种很节俭的方法。这是1958年Rosenblatt提出的在线学习的原型,对流式数据很有优势。现在的SGD(随机梯度下降)直接继承了这个思想。随着滑块移动观察边界如何变动,你就能体会到现代深层学习优化器的「心路历程」。

常见问题

不能。XOR是线性不可分的,无论学习多少次迭代,权重都会永远振动,决策边界无法收敛。Minsky和Papert在1969年的著作《Perceptrons》中指出了这个限制,这引发了第一个神经网络的「冬天」时期。多层感知器(MLP)通过添加至少一个隐藏层,可以对特征空间进行非线性变换,从而表达XOR。
简单感知器只能解决线性可分的问题,但添加一层或多层隐藏层后,根据通用近似定理,可以任意精度近似任意连续函数。学习采用反向传播算法(误差反向传播法),激活函数从阶跃函数改为Sigmoid、ReLU等。现代深度学习本质上就是将这种多层结构进一步深化。
两者都是寻找线性分离超平面的方法,但优化目标不同。感知器是「找到任何能够分离的超平面」,解不唯一,取决于数据呈现顺序和初始值。SVM是「找到最大化间隔(最近数据点到边界的距离)的超平面」,解唯一且泛化性能更强。此外SVM还可通过核方法扩展到非线性问题。
最主要的原因是数据线性不可分。此时感知器收敛定理不适用,权重会无限振动。解决方法包括:(1)用散点图确认数据是否真的线性可分;(2)使用口袋算法(Pocket Algorithm)保留「迄今为止误分类最少的权重」;(3)对于线性不可分的情况,切换到MLP或核SVM。本模拟器使用线性可分的固定数据集,因此必然能达到100%精度。

现实应用

历史意义(1958年~):Frank Rosenblatt提出的简单感知器是现代神经网络和深度学习的起点。当时甚至还有硬件实现,被作为「会学习的机器」而备受关注。虽然后来被Minsky和Papert指出了线性可分性的局限而进入「冬天」,但多层化和反向传播的发现使其复兴,最终演变成今天的深度学习。

线性SVM和逻辑回归的理论基础:「用线性超平面分离两个类」这个基本框架是线性SVM、逻辑回归、线性判别分析(LDA)等现在仍在实务中广泛使用的线性分类器的共同基础。理解感知器后,你就能将这些方法的区别理解为「损失函数」和「优化方法」的不同。

在线学习和流式数据:感知器是「每次处理一个样本就更新权重」的在线学习原型。无需查看全体批数据,内存消费很少,在数据依次到达的场景(广告点击预测、欺诈检测、物联网传感器分析等)中至今仍在发挥作用。

教育与概念验证:这是机器学习入门教材中最频繁出现的算法。「权重」「偏置」「学习率」「收敛」「过拟合」「线性可分性」等现代深度学习共通的重要概念,在这里用最少的代码行数就能体验到。

常见误解和注意事项

最常见的误解是「只要学习足够长,任何数据都能最终分离」。感知器收敛定理的形式是「若数据线性可分,则有限次迭代后必然收敛」。对于线性不可分的数据,无论迭代100次还是10000次都不会收敛,权重会永远振动。本模拟器故意使用线性可分的固定数据集,所以必然达到100%精度,但现实中大多数数据需要特征工程才能实现线性可分。

第二个常见陷阱是「学习率越大收敛越快」这个想法导致把 η 设成接近1.0。虽然单步幅度更大,但一个误分类点就能造成权重大幅摆动,最后可能需要更多迭代才能稳定,或在远离「真实边界 x1+x2=0」的地方停下来。在上面的模拟器中缓慢调整 η 从0.01到1.0,对比「学习后 w_1, w_2」和「决策边界」的变化就能看出来。实务中标准做法是从小 η(0.01~0.1)开始,振动太大就降低,收敛太慢就提高。

最后一个误解是「感知器的解是唯一的」。线性可分的数据集有无穷多个分离超平面(只要有哪怕一点儿的间隔,就能在这个范围内平移和旋转边界)。感知器只是返回「第一个达到零误差的权重」,所以根据数据呈现顺序和初始值的不同,会得到不同的边界。如果你想要一个「最优的、唯一的」边界,标准选择是使用SVM,它的目标函数明确地包含了间隔最大化。

使用指南

  1. 在0.01~1.0范围内设置学习率(η)。较小的值会导致收敛变慢,较大的值有振动风险。
  2. 用滑块从-2.0~+2.0范围内选择初始权重w1和偏置b(w2固定为0.5)。改变数值会自动重新训练。
  3. 设置迭代次数(1~100),对固定种子(LCG seed=42)生成的20个线性可分点,实时显示决策边界的收敛过程。

具体计算示例

使用默认值 η=0.1、初始w1=0.5(w2固定为0.5)、b=0.0 时,固定种子的20个点((3,3)附近的类+1与(-3,-3)附近的类-1)已被正确分离,因此仅1次迭代即达到100%最终分类精度。将w1初值设为-2.0时最初几个点会被误分类,但仍在2次迭代内收敛到100%——这正是「线性可分时有限次必收敛」的感知器收敛定理实例。

实务注意事项