从线性到非线性
Softmax 分类器表现出色,碰到 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 推进。