从线性到非线性
上一章的分类器看似无敌,碰到 XOR 却束手无策——为什么?
上一章的疑问
上一章末尾,我们训练了一个 Softmax 分类器 , 在两类正态分布的数据上漂亮地划出了一条决策直线,准确率接近 100%。
那么问题来了——这个分类器在 所有任务上 都这么靠谱吗? 下面让我们在几个数据集上试验一下。
实验:让 Softmax 啃硬骨头
我们准备了 4 个二维数据集,输入维度都是 2、标签都是 2 类,但 几何形状各不相同 :
- 二维高斯 :两簇正态分布点相隔一段距离,类似上一章用过的"经典两堆"—— 看起来一刀就能切开
- XOR 四点 :单位正方形的四个角, 与 是一类, 与 是另一类—— 对角同色
- 同心圆 :内圈一类、外圈一类, 类别按到原点的 距离 划分(不再是按方向)
- 月牙 :两条相互交错的半月形, 像两条咬合的香蕉,没有任何一条直线能从中"卡进去"
现在用上一章的 Softmax 分类器一一上场试试看:在控制栏里切换数据集、 调学习率,按"开始训练",左侧实时看决策面,右侧看损失曲线。
点开始训练后,差异立刻显现:在 二维高斯 上,准确率会迅速逼近 100%、 损失稳步下降,决策面是一条划过两簇之间的直线。 但换到另外三个数据集就明显吃力,且各有不同:
- XOR、同心圆 :两类样本围绕原点近似对称地分布, 无论怎么调 learning_rate 、训练多少 epoch ,准确率始终在 50% 附近徘徊,相当于乱猜
- 月牙 :两条月牙整体位置有所错开,因此线性分类器还能取到 90% 以上的准确率;但决策面始终只能是一条直线,跨不过两条月牙之间弯曲的真实边界, 落在"咬合"区域里的少数点会被错分,准确率撞上跨不过去的天花板
归根结底, 线性分类器在这三个任务上都无法学到正确的决策边界 —— 要么完全乱猜,要么卡在跨不过去的准确率天花板。
线性模型为什么搞不定?
Softmax 分类器的本质是一条 直线决策边界 。 以二维输入为例,模型判别两类的临界条件是:
这是一条标准的直线方程。无论 怎么调, 决策面始终是一条 直线 (高维下是一个超平面)—— 参数怎么动也变不出曲线、折线或闭合环。
以上图中的 同心圆 为例:内圈与外圈的真实边界是一条 闭合的圆环 , 任何一条直线都不可能把它们分到两侧。 XOR 也是同样的道理——单位正方形的 4 个角对角同色, 无论你怎么转动一条直线,总会把 同色 的两个点切到不同侧; 月牙 之间的真实边界本身就是弯的,结论也是一样:线性模型只会画直线。
两条出路
面对线性模型的局限,有两条思路可走:
思路 A:手工特征工程
让领域专家针对任务,手工设计一个非线性特征喂给模型。 以同心圆为例,把"到原点的距离" 作为新特征,内外圈在 这一维上立刻就能被一条阈值线切开。
缺点 :每换一个任务,都要由专家重新设计一套特征,难以扩展到复杂任务。
思路 B:让模型自己学非线性变换
把多个线性层 叠起来 ,让网络自动学习 所需的非线性变换。这就是接下来要走的路—— 多层感知机 (Multi-Layer Perceptron, MLP)。
思路 A 的 致命缺陷在于"换任务即换特征" : 图像、文本、语音、传感器信号——每个领域都要重新动用专家经验来设计输入维度, 工程量陡增,还容易"漏算"任务真正依赖的非线性。深度学习走的是思路 B: 把特征工程 变成网络的一部分 ,让模型在数据驱动下自动学到所需的非线性。 因此,本章后续就沿着 思路 B 一步步推进。