ML ML Learning Lab
07 / 14
第 7 步 · 从二分类到多分类

多分类 + SoftmaxMulti-class + Softmax

不止两类怎么办?Softmax 把任意分数变成概率分布

8 分钟
阅读 + 实操
1 个
交互演示
中级
难度

Softmax 多分类 · 交互演示

损失 CE--
准确率--
步数0
学习率 0.1
速度 20步/秒

为什么学这步?

二分类用 sigmoid 输出一个概率,但现实问题常常是多分类:识别手写数字(0-9 共 10 类)、ImageNet 图像分类(1000 类)、新闻主题分类。Softmax 是 sigmoid 的多分类推广:把模型输出的任意一组分数变成"概率分布"——所有类别的概率加起来正好等于 1,最大那个就是模型的预测。这一步是从二分类迈向多分类的关键,也是后续神经网络分类头的标准配置。

📌 发生了什么

  • 每个类别有自己的一组权重,3 类共 9 个参数。
  • softmax 把原始分数归一化为概率分布,所有类概率和为 1。
  • 交叉熵损失只惩罚"正确类"的概率,梯度线性干净。

⚠️ 常见陷阱

  • softmax 概率是"相对"的——一类升高必然压低其他类,多分类不是 K 个独立二分类。
  • 用 MSE 训练 softmax?别这么做。交叉熵配合 softmax 是天生一对,MSE 会梯度极小、训练卡死。
  • 准确率高就够了?不一定。混淆矩阵会把每个类别的预测质量摊开看。

本章小结

  • Softmax:把任意分数向量归一化为概率分布,所有类概率和为 1。
  • 多分类参数:K 个类各有独立的权重向量,共 K×(d+1) 个参数。
  • 混淆矩阵:比单一准确率更细致,暴露每个类的预测情况。

📐 Softmax 与交叉熵梯度推导

Softmax 将任意实数向量转化为概率分布,配合交叉熵损失,梯度形式极其简洁。

多类交叉熵损失(真实标签为 one-hot 编码):

对 z_k 求导,利用 softmax 的雅可比矩阵 σ'_ij = σ_i(δ_ij − σ_j):

梯度形式与逻辑回归完全一致:预测概率减去真实标签。带温度的 Softmax 用于知识蒸馏:

🎛 温度参数 τ 对比

温度 τ 控制 softmax 输出的"尖锐度"。τ 越小分布越集中,τ 越大越平滑。

温度 τ 表现 结果
τ = 0.5 分布尖锐,接近 one-hot,梯度信号强 易过自信
τ = 1.0 标准 softmax,概率合理 推荐
τ = 2.0 分布平滑,各类概率接近 欠自信
τ = 5.0 几乎均匀分布,丧失区分能力 无效

💡 知识蒸馏中,用高 τ 的教师模型输出"软标签"指导学生模型学习类间关系。

💻 Softmax + 交叉熵梯度

数值稳定的 softmax 实现及交叉熵梯度计算(Python):

import numpy as np

# 数值稳定的 Softmax(减去最大值防止 exp 溢出)
def softmax(z, tau=1.0):
    z = np.asarray(z, dtype=float)
    exp_z = np.exp((z - z.max()) / tau)
    return exp_z / exp_z.sum()

# 交叉熵损失
def cross_entropy(y_true, y_pred):
    loss = 0.0
    for i in range(len(y_true)):
        loss -= y_true[i] * np.log(y_pred[i] + 1e-8)  # 加 epsilon 防止 log(0)
    return loss

# 梯度:∂L/∂z = ŷ - y(极其简洁)
def softmax_ce_gradient(y_true, y_pred):
    return y_pred - y_true

📚 参考文献与延伸阅读

  • Goodfellow, Bengio & Courville, Deep Learning (2016), §6.2.2 Output Units — Softmax 输出单元的完整分析
  • Bishop, Pattern Recognition and Machine Learning (2006), §4.2 Probabilistic Generative Models — 多分类的生成式与判别式视角
  • Hinton, Vinyals & Dean (2015). Distilling the Knowledge in a Neural Network. — 温度参数在知识蒸馏中的应用
  • Wikipedia: Softmax function — Softmax 的数学性质与变体

📝 课后练习

检验你的理解——答对为止