线性模型与正则化核心20 分钟kp-009#多分类#softmax#交叉熵

多分类线性模型与 softmax 回归

进度

一句话定义

softmax 回归为 K 类各配一组线性打分,用 softmax 函数把打分向量压成归一化概率分布 pk = esk∑j esj,并以多类交叉熵训练,是二分类逻辑回归的规范多类推广。

为什么重要

类别数大于 2 是常态(文档主题、商品品类、疾病分型)。softmax + 交叉熵是「输出一个概率分布」的标准范式:它天然保证各类概率和为 1、损失凸(对线性打分)、梯度形式简洁;深度网络的分类输出层就是它,这里的推导可原样迁移。

前置知识

逻辑回归与交叉熵损失 的 sigmoid、伯努利似然与交叉熵推导。

核心概念

  • 打分向量:s = W^⊤ x,W ∈ ℝp × K,每类一组权重。
  • softmax:pk = exp(sk)∑j=1K exp(sj),单调映射保序,类别间竞争(和为 1)。
  • 多类交叉熵:L = -∑k yk log pk(y 为 one-hot)。
  • OvR(One-vs-Rest):另一种多分类策略——训 K 个独立二分类器,预测取最大者;softmax 称为「多类」方案,两者边界形状不同。
  • 决策区域:softmax 的边界 {k, l} 满足 (wk - wl)^⊤ x = 0,仍是线性超平面。

直观类比

K 个专家各给自己的类打分,softmax 是「按指数放大分差后按比例分蛋糕」:分差越大,胜者拿走越多概率份额;温度(缩放打分)控制蛋糕的分散程度——打分同乘小系数则接近均匀分布,乘大系数则接近 one-hot。这一温度旋钮在知识蒸馏与 LLM 采样中同样核心。

原理与机制

从多项分布似然推导:y 服从类别分布(多项分布单次试验),p(y = k | x) = pk。对数似然 ∑i ∑k yik log pik 的负平均即交叉熵。对打分求梯度得到经典简洁形式:

∂ Li∂ sik = pik - yik

与二分类完全同构(预测分布减 one-hot)。数值上必须配合LogSumExp 稳定技巧:先减去最大打分 smax,log pk = sk - smax - log∑j esj - smax,避免上溢。

softmax vs OvR 的选择:类别互斥且完备 → softmax(概率有全局语义);类别可重叠(一个样本可同时属多类)→ 多个独立 sigmoid(多标签),此时不做 softmax。

公式与推导

minW   -1n∑i=1n∑k=1K yik log ewk^⊤ xi∑j ewj^⊤ xi + λ ‖ W ‖F2

其中 yik = 1[yi = k]。凸性:交叉熵是 softmax 打分的凸函数(log-sum-exp),仿射复合后仍凸,故可全局优化。

图示

        特征空间被 K−1 个线性超平面切成 K 个区域
   ┌──────────────────────────────┐
   │  ○○○○  类1区                  │
   │  ○○○  ╲                      │
   │        ╲  △△△△ 类2区          │
   │         ╲ △△△ ╲              │
   │          ╲     ╲ □□□□ 类3区   │
   └──────────────────────────────┘
   相邻两类边界: (w_k − w_l)ᵀx = 0

实例或案例

iris 三分类,直接比较 softmax 与 OvR 的决策:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline

X, y = load_iris(return_X_y=True)
soft = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))     # 默认 multinomial
ovr  = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000, multi_class="ovr"))
print("softmax CV:", cross_val_score(soft, X, y, cv=5).mean().round(3))
print("OvR     CV:", cross_val_score(ovr, X, y, cv=5).mean().round(3))

预测时 predict_proba 给出每类概率,配合业务阈值做拒识(最大概率过低则转人工)是常见工程用法。

常见误区

  • 把多标签问题套 softmax:softmax 强制和为 1,会抑制「同时属于多类」的表达;应改用 K 个 sigmoid。
  • 忽视类别不平衡:softmax 的概率竞争会让少数类几乎拿不到概率质量,需类权重(kp-026)。
  • 以为概率高=校准好:softmax 分布的绝对数值依赖正则强度与训练充分性,跨模型比较概率要校准。

与其他知识点的关系

逻辑回归与交叉熵损失 是 K=2 特例(sigmoid 可由 softmax 推出);分类评估指标:混淆矩阵、Precision/Recall 与 ROC-AUC 的多分类指标(macro/micro 平均)消费这里的概率输出;端到端机器学习工作流与 Pipeline 展示把它嵌进端到端 Pipeline 的完整做法。

自测题

  1. softmax 与多个独立 sigmoid 的本质区别?

- 要点:softmax 类间竞争、概率归一(互斥多类);独立 sigmoid 各自为政(多标签/可重叠)。

  1. 推导多类交叉熵对打分的梯度并说明其含义。

- 要点:pik - yik,即预测概率与 one-hot 目标之差;误差按类分配,直指分类错误的方向。

  1. 打分同乘 T → 0 与 T → ∞ 时 softmax 行为?

- 要点:T → 0(放大)退化为 argmax 独热;T → ∞(压平)趋于均匀分布;T 即温度。

延伸阅读

Bishop《PRML》第 4.3.4 节;Goodfellow 等《Deep Learning》第 6.2 节(输出单元)。