01 核心原理(大白话版)

逻辑回归解决的是二分类问题:输出一个概率,告诉你"是"的可能性。

Softmax 回归把它推广到多分类:同时输出 K 个概率,每个对应一个类别,所有概率加起来等于 1。

Sigmoid 怎么变成 Softmax?

逻辑回归(二分类)

一个线性分数 z,通过 Sigmoid 压到 (0,1),输出"是类别1"的概率。

Softmax 回归(多分类)

K 个线性分数(logits),通过 Softmax 归一化成 K 个概率,取最大的那个类别。

Softmax 公式:P(y=k) = ez_k / Σ ez_j。指数放大差距,归一化保证概率之和为 1。当 K=2 时,Softmax 等价于 Sigmoid——逻辑回归是 Softmax 的特例。

一步步构建 Softmax 回归

第一步 生成三类数据

与逻辑回归相比,标签 y 从 0/1 扩展到 0/1/2,三类数据分布在不同区域。

第二步 Softmax:把分数变概率

输入 K 个原始分数,输出 K 个概率,和为 1。减去最大值是防止数值溢出的技巧。

第三步 损失函数:多分类交叉熵

多分类交叉熵只关心真实类别的预测概率:

Loss = −log(p_y)

p_y 是模型给真实类别 y 的概率。预测越准 p_y 越接近 1,-log(1)=0 损失最小;预测完全错误时 p_y 趋向 0,损失趋向无穷大。

第四步 训练循环:梯度下降更新参数

每个类别有自己的权重向量,梯度形式与逻辑回归完全一致:err = pred - label,只是现在同时更新 K 组参数。

四段拼在一起,加上可视化,就是完整演示代码——看下面。

02 代码

03 学术性讲解

Softmax 回归(也称多项逻辑回归)是逻辑回归在多分类问题上的推广,适用于输出互斥的 K 个类别。

Softmax 函数

给定 K 个类别的线性分数(logits)z₁, z₂, ..., z_K:

P(y=k | x) = ez_k / Σj=1K ez_j

其中 z_k = w_k · x + b_k 是第 k 类的线性组合。

数值稳定性:实现时通常减去 max(z) 再做 exp,结果不变但避免了浮点溢出:ez_k - max(z) / Σ ez_j - max(z)

损失函数:多分类交叉熵

只惩罚真实类别的预测概率:

L = −log P(y=c | x)

其中 c 是样本的真实类别。等价于所有类别的完整交叉熵 −Σ y_k log p_k(one-hot 编码后非真实类别项为 0)。

梯度推导

Softmax + 交叉熵联合求导后,梯度形式极为简洁:

∂L/∂w_k = (p_k − 𝟙[k=c]) · x

与逻辑回归的梯度形式完全一致——err = 预测概率 − 真实标签,只是 K 个类别各有一套参数。

决策边界

类别 i 和类别 j 的决策边界是两者概率相等的超平面:

(w_i − w_j) · x + (b_i − b_j) = 0

K 个类别产生 K(K-1)/2 条两两决策边界,将特征空间划分为 K 个区域。

总结

任务

多分类问题

函数

Softmax

损失

多分类交叉熵

输出

K 个概率