神经网络处理分类任务时,最后一层经常只是一个线性层。它接收特征向量,为每个类别输出一个实数,再把分数最大的类别作为结果。这个过程看起来只有一次矩阵乘法,却包含三个需要分开的环节:模型怎样计算类别分数,概率和误判代价怎样决定最终动作,训练数据又怎样确定模型参数。
本文从线性判别函数出发,先推导零一损失和非对称误判代价下的分类规则,再比较生成式分类器与判别式分类器。两类方法采用不同的概率分解和训练目标,最后都可能得到同一个形式的线性边界。读完后应该能够判断一个分类器究竟线性在哪里,Softmax 在决策中做了什么,以及什么时候不能直接使用最大分数作为业务决策。
这里有一组容易混淆的术语:判别函数是分类时用来比较类别的分数,判别式分类器则是一类直接学习后验概率或决策边界的方法。生成式分类器同样需要判别函数。前者描述决策所用的量,后者描述参数怎样从数据中学得。
线性判别函数
设输入已经表示为 维特征向量 ,类别集合为 。多分类线性模型为每个类别定义一个判别函数(discriminant function):
是类别 的分数, 决定各维特征怎样参与评分, 是偏置。把所有权重按行堆叠,可以写成一次矩阵运算:
严格说,这是一项仿射变换,因为它包含偏置;机器学习中仍习惯称它为线性层或线性分类器。最常见的决策规则是选择最高分:
二分类时可将类别记为 和 ,并只保留一个分数 。令 ,得到一个法向量为 的超平面。平面两侧分别满足 和 ,因此被判为不同类别。在当前坐标度量下,点到边界的带符号距离为
将 和 同乘一个正数不会移动边界,却会改变原始分数及其经过 sigmoid 后的概率。这说明决策边界、分数尺度和概率解释是三件不同的事。
多分类时,类别 与 的分界满足
也就是
每一对类别之间仍是超平面。某个类别的决策区域由 的若干半空间相交而成,所以在线性模型的原始特征空间中,每个非空类别区域都是凸集。若同一类别的数据天然分成彼此隔开的两块,单个线性层往往无法同时包住它们而不纳入其他类别。
分类决策理论
最高分规则默认所有错误的代价相同。实际任务通常还要考虑误报、漏报、人工复核或拒绝预测的成本。分类决策理论把模型输出与最终动作分开处理:概率描述当前信息下各类别有多可信,损失函数描述做错不同动作要付出什么代价。
记真实类别为 ,动作 表示预测为 , 表示采取动作 而真实类别为 时的损失。观察到 后,动作的条件风险为
贝叶斯决策规则选择条件风险最小的动作:
若采用零一损失,预测正确时损失为 0,预测错误时损失为 1,则
最小化风险等价于选择后验概率最大的类别,也就是最大后验(maximum a posteriori,MAP)规则。此时若各类别分数是后验概率经过同一个严格单调变换后的结果,比较分数即可,不必真的把它归一化成概率。
误判代价不对称时,阈值会随之改变。考虑二分类,假阳性的损失为 ,假阴性的损失为 ,正确分类的损失为 0。预测 的风险是 ,预测 的风险是 。因此仅当
时才预测 。等价的概率阈值为
例如,漏报的损失是误报的 5 倍,即 、,阈值便从 降为 。这个阈值只在输出能够近似真实后验、代价定义稳定时才有明确含义。Softmax 输出之和为 1 并不自动保证概率已经校准;需要按部署分布在独立验证集上检查可靠性,并把训练时的类别权重、采样策略和部署时的决策阈值分别记录,避免重复修正同一种类别不平衡。
决策集合也不必局限于已有类别。若低置信度错误的代价高于人工复核,可以增加“拒绝预测”动作,并为它指定固定或样本相关的损失。最小风险原则本身不变,只是多比较一个动作。
生成式分类器
生成式分类器学习类别先验 和类条件分布 ,也就是把联合分布写成
得到这两项后,再通过贝叶斯公式计算后验:
对所有类别而言,分母相同。采用零一损失时,可以直接比较未归一化的对数分数
这里的“生成式”描述模型学习了 在各类别下怎样分布,并不意味着分类时必须生成新样本。一个生成式模型是否适合采样,还取决于它对数据分布的具体建模方式。
线性判别分析
假设每个类别的特征服从多元高斯分布,均值为 ,所有类别共享协方差矩阵 ,类别先验为 :
将高斯密度取对数并展开二次项,可得
第一项和最后的常数对所有类别都相同,在类别比较时可以消去。剩余部分正是线性判别函数:
其中
这就是线性判别分析(Linear Discriminant Analysis,LDA)的概率模型。共享协方差使各类别共同拥有的二次项被抵消;类别均值决定权重方向,协方差按照特征的联合尺度调整方向,先验则通过偏置移动边界。若每个类别使用不同的协方差 ,含 的项无法消去,边界一般变成二次曲面,对应二次判别分析(QDA)。
这段推导是 LDA 的高斯生成式表述。标准分布与信息论初步从类间散度与类内散度之比推导了 Fisher 的原始线性判别。二分类且类内散度矩阵可逆时,Fisher 方向满足 。当合并类内散度 用来估计共享协方差时,这个方向与高斯模型的边界法向量一致;两者的推导目标和概率解释仍需区分。
多项式朴素贝叶斯
朴素贝叶斯假设给定类别后各特征条件独立。以适合词频等非负计数的多项式朴素贝叶斯为例, 表示第 个词的计数, 表示类别 下该词的概率。忽略只依赖样本总计数的项后,判别函数为
它对计数向量 仍是线性的。参数来自类条件分布的计数估计,所以它依然是生成式分类器。相反,高斯朴素贝叶斯若允许每个类别、每个特征拥有不同方差,展开后通常包含 ,边界一般不是线性的。是否线性取决于分布假设消去了哪些高阶项,不能只看“朴素贝叶斯”这个名称。
生成式方法的优势来自可用的结构假设:当类条件分布与数据相符时,可以分别估计先验、均值、协方差或词频,并解释它们怎样形成分数。代价也来自同一处。高维小样本下协方差可能不可逆,条件独立假设可能与实际特征依赖冲突,错误的密度模型还会把无需用于分类的分布细节带进估计过程。实际使用 LDA 时通常需要检查特征尺度、协方差估计和必要的收缩正则化。
判别式分类器
判别式分类器不先拟合 。概率型方法直接建模 ,另一些方法则直接学习足以作出决策的分数或边界。
二分类逻辑回归把线性分数送入 sigmoid:
sigmoid 单调递增,所以使用 概率阈值时,边界仍是 。训练通常最小化条件负对数似然,也就是二元交叉熵:
多分类逻辑回归为每类生成一个未归一化分数(logit),再用 Softmax 归一化:
Softmax 保持 logit 的大小次序,因此在零一损失下, 与 完全相同。它提供的是一个条件概率模型,不会为线性层增加弯曲的决策边界。交叉熵最小化真实类别的负对数概率:
在 PyTorch 中,一个多分类线性网络可以直接写成 nn.Linear。CrossEntropyLoss 接收原始 logits,并在数值稳定的实现中完成 LogSoftmax 与负对数似然;训练时不要预先调用 Softmax。
import torch
from torch import nn
torch.manual_seed(7)
features = torch.tensor(
[
[-2.0, -1.0],
[-1.5, -2.0],
[2.0, -1.0],
[1.5, -2.0],
[0.0, 2.0],
[0.5, 1.5],
]
)
targets = torch.tensor([0, 0, 1, 1, 2, 2])
model = nn.Linear(in_features=2, out_features=3)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
loss_fn = nn.CrossEntropyLoss()
for _ in range(200):
optimizer.zero_grad(set_to_none=True)
logits = model(features)
loss = loss_fn(logits, targets)
loss.backward()
optimizer.step()
with torch.no_grad():
logits = model(features)
probabilities = logits.softmax(dim=1)
predictions = logits.argmax(dim=1)
print(predictions.tolist())
这段代码只学习 和 ,所以三类之间的边界都是直线。若在线性层前加入非线性特征提取器 ,末端仍可写成
但它只对特征 线性,整个网络对原始输入 通常是非线性的。现代神经网络中的“线性分类头”指的正是这个局部结构。
感知机和线性支持向量机也属于判别式方法。感知机在样本被分错时更新参数;支持向量机用合页损失约束类别间隔。它们学习可比较的分数或边界,却不直接给出后验概率。若下游决策必须使用成本矩阵,通常还需要在独立数据上做概率校准,或者直接根据目标指标选择工作阈值。
生成式学习与判别式学习
生成式与判别式的区别在于训练时学习什么,不在于最后有没有判别函数。任何分类器在作出决策前都需要某种可比较的量;生成式模型也会计算 ,而判别式模型也可以输出概率。
| 方法 | 训练时估计的对象 | 得到线性边界的条件 | 原始输出的含义 |
|---|---|---|---|
| LDA | 与 | 各类高斯分布共享协方差 | 联合对数密度的可比较部分 |
| 多项式朴素贝叶斯 | 类别先验与各类特征概率 | 输入是计数,使用多项式类条件模型 | 对数联合概率的可比较部分 |
| 逻辑回归与 Softmax 回归 | logit 是输入特征的仿射函数 | 条件概率模型的 logit | |
| 感知机与线性 SVM | 分类分数或间隔 | 直接限制分数为仿射函数 | 无默认概率解释的分数 |
两条路线也没有脱离数据假设的固定胜负。Ng 和 Jordan 对朴素贝叶斯与逻辑回归的分析表明,在他们研究的条件和数据中,生成式模型可能更快接近自己的渐近误差,而判别式模型在样本增加后达到更低的渐近误差。这个结果解释了小样本阶段可能出现的差异,却不是“生成式模型总是更省样本”或“判别式模型最终总是更准”的普遍定律。模型假设是否贴合数据、正则化、特征表示和评价方式都会改变结论。
选择方法时可以先看任务中哪些量可信。若类条件分布有合理的领域模型,先验和各类参数又需要单独解释,LDA 或朴素贝叶斯是清楚的基线。若主要目标是在给定特征上预测标签,且不需要描述输入怎样生成,逻辑回归或线性 SVM 通常减少了不必要的分布假设。它们仍然带有结构限制:线性逻辑回归假定类别对数几率是特征的仿射函数,线性 SVM 则把可用边界限制为超平面。两边都应与简单基线比较,而不能只按方法所属类别判断。
特征表示与线性边界
线性模型只能用超平面划分当前特征空间。经典的异或(XOR)数据把 与 放在一类,把 与 放在另一类;任意一条直线都会同时切错至少一个点。增加训练轮数或更换优化器无法改变这个几何限制。
一种处理方式是显式构造新特征。例如加入 后,模型仍对新特征向量线性,却可以在原空间形成非线性边界。核方法隐式完成类似映射,深度网络则用多层非线性变换学习 。判断模型能力时,应始终说明“相对于哪一组特征线性”。
即便边界形状足够,部署决策仍可能因数据变化而失效。类别先验变化会移动贝叶斯最优阈值,特征分布漂移会破坏训练时估计的概率,未标准化的不同量纲还会影响正则化对各权重的约束。上线前至少应固定特征处理流程,在贴近部署分布的验证集上检查分类指标与概率可靠性,并根据明确的错误成本确定阈值。训练损失、概率校准和业务动作分别回答不同问题,合在一个默认的 argmax 中会掩盖这些假设。
分类评分、概率与决策
线性分类网络先用 生成类别分数,分数相等的位置构成超平面边界。分类决策理论再把后验概率和错误成本组合成条件风险;只有在零一损失下,最大后验和最高分规则才自然重合。
生成式分类器通过 得到后验,共享协方差高斯模型和多项式朴素贝叶斯都能导出线性判别函数。判别式分类器直接学习后验、分数或间隔,逻辑回归、Softmax 回归、感知机和线性 SVM 采用不同目标拟合同一种几何形式。模型属于哪条路线,不能单凭边界形状判断。
因此,使用线性分类器时需要依次回答三个问题:当前特征是否能被超平面合理分开,训练目标产生的分数能否解释为所需的概率,部署时的损失与类别分布是否支持当前阈值。三个条件都明确后,一层简单的线性网络才构成完整的分类方案。
参考文献
- R. A. Fisher. The Use of Multiple Measurements in Taxonomic Problems. Annals of Eugenics, 1936. DOI: 10.1111/j.1469-1809.1936.tb02137.x
- C. M. Bishop. Pattern Recognition and Machine Learning. Springer, 2006. DOI: 10.1007/978-0-387-45528-0
- I. Goodfellow, Y. Bengio, and A. Courville. Deep Learning, Chapter 5: Machine Learning Basics. MIT Press, 2016
- A. Y. Ng and M. I. Jordan. On Discriminative vs. Generative Classifiers: A comparison of logistic regression and naive Bayes. NIPS, 2001
- C. Guo, G. Pleiss, Y. Sun, and K. Q. Weinberger. On Calibration of Modern Neural Networks. ICML, 2017
- PyTorch Contributors. CrossEntropyLoss Documentation. PyTorch Documentation