4.1 Softmax 回归 — 学习笔记

一、分类问题 vs 回归问题

  • 回归:预测"多少"——房价、胜场数、住院天数(连续值)
  • 分类:预测"哪个类别"——垃圾邮件/正常、猫/鸡/狗(离散值)

二、标签编码:为什么用 One-Hot

One-Hot 编码:向量长度 = 类别数,对应类别的位置为 1,其余为 0。

\text{猫} = (1, 0, 0), \quad \text{鸡} = (0, 1, 0), \quad \text{狗} = (0, 0, 1)

为什么不用数字 1, 2, 3?

  • 数字自带大小关系:3 > 2 > 1,暗示"狗 > 鸡 > 猫",但类别之间没有大小之分。
  • 数字自带距离关系:2-1=1,暗示"猫和鸡的距离 = 鸡和狗的距离",这也是无意义的。
  • One-Hot 向量互相垂直,没有大小和远近之分,每个类别平等。

注:当类别本身有顺序时(如评分 1-5 星、衣服尺码 S/M/L),用数字是合理的,这叫有序分类(ordinal regression)。


三、线性模型

每个输出 o_j 是所有输入 x加权和(仿射函数):

\begin{aligned} o_1 &= x_1 w_{11} + x_2 w_{12} + x_3 w_{13} + x_4 w_{14} + b_1 \\ o_2 &= x_1 w_{21} + x_2 w_{22} + x_3 w_{23} + x_4 w_{24} + b_2 \\ o_3 &= x_1 w_{31} + x_2 w_{32} + x_3 w_{33} + x_4 w_{34} + b_3 \end{aligned}

矩阵形式\mathbf{o} = \mathbf{W}\mathbf{x} + \mathbf{b}

  • \mathbf{W} \in \mathbb{R}^{d \times q}d 个输入特征,q 个输出类别
  • 示意图中,每个输入节点到每个输出节点都有连线,代表一个权重 w

四、为什么需要 Softmax

线性模型的输出 o_i 存在两个问题:

  1. 不能保证非负o_i 可以是任意实数(-\infty+\infty
  2. 不能保证和为 1:不满足概率的基本性质

例子:卧室数量与买房概率正相关,线性模型对豪宅(20 间卧室)的预测可能超过 1。

Softmax 的定义

\hat{y}_i = \frac{\exp(o_i)}{\sum_{j=1}^q \exp(o_j)}

  • 取指数 \exp(o_i):保证非负,且保持单调性(o_1 > o_2 \Rightarrow \exp(o_1) > \exp(o_2)
  • 除以总和:保证所有概率加起来等于 1(归一化)

重要性质:softmax 保持排序不变,所以判断哪个类别概率最大时,直接比较 o_i 即可,无需算 softmax:

\operatorname*{argmax}_j \hat{y}_j = \operatorname*{argmax}_j o_j

与 Probit 模型的对比

SoftmaxProbit
挤压函数Sigmoid / Softmax正态分布 CDF \Phi(x)
噪声假设Logistic 分布正态分布
优点计算简洁,优化问题好理论上优雅
缺点实际效果不如 softmax,优化不够好

五、向量化计算

将单个样本扩展为一个 minibatch(n 个样本):

\mathbf{O} = \mathbf{X}\mathbf{W} + \mathbf{b}, \quad \hat{\mathbf{Y}} = \mathrm{softmax}(\mathbf{O})

  • \mathbf{X} \in \mathbb{R}^{n \times d}n 个样本,每个 d 维特征
  • \mathbf{O} \in \mathbb{R}^{n \times q}n 个样本,每个 q 个类别的原始分数
  • o_{i,j}:第 i 个样本属于第 j 类的原始分数
  • softmax 逐行作用,每行独立归一化

一次矩阵乘法算出整个 minibatch 的所有分数,比逐个计算快得多。


六、损失函数:交叉熵

推导过程(极大似然估计)

目标:最大化所有样本的联合概率(独立同分布假设):

P(\mathbf{Y} \mid \mathbf{X}) = \prod_{i=1}^n P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)})

  • \mathbf{x}^{(i)}:第 i 个样本的特征
  • \mathbf{y}^{(i)}:第 i 个样本的标签(one-hot)
  • 每个样本对应一个标签,标签之间相互独立

取负对数(乘积变求和,最大化变最小化):

-\log P(\mathbf{Y} \mid \mathbf{X}) = \sum_{i=1}^n l(\mathbf{y}^{(i)}, \hat{\mathbf{y}}^{(i)})

单个样本的损失(交叉熵损失):

l(\mathbf{y}, \hat{\mathbf{y}}) = -\sum_{j=1}^q y_j \log \hat{y}_j

  • 由于 y 是 one-hot,求和后只剩正确类别那一项
  • 例:\mathbf{y} = (0, 1, 0),则 l = -\log \hat{y}_2

为什么叫"交叉"熵

公式中用了两个不同的分布

H(P, Q) = -\sum_j P(j) \log Q(j)

  • P(j) 在外面当权重(真实分布)
  • Q(j)\log 里面(估计分布)

两个分布"交叉"使用,故名交叉熵。对比熵 H(P) = -\sum_j P(j) \log P(j),用的是同一个分布。

梯度形式

\frac{\partial l}{\partial o_j} = \hat{y}_j - y_j = \mathrm{softmax}(\mathbf{o})_j - y_j

梯度 = 模型预测 - 真实标签,与线性回归的梯度形式一致。

交叉熵的最小值

结论H(P, Q) \geq H(P),等号当且仅当 P = Q

证明(利用 \log x \leq x - 1):

H(P, Q) - H(P) = \sum_j P(j) \log \frac{P(j)}{Q(j)} \geq \sum_j P(j) \left(\frac{Q(j)}{P(j)} - 1\right) = \sum_j (Q(j) - P(j)) = 0


七、信息论视角

熵(Entropy)

H[P] = \sum_j -P(j) \log P(j)

表示编码来自分布 P 的数据所需的最少信息量(单位:nat)。

惊讶度(Surprisal)

-\log P(j):观察到事件 j 时的"惊讶程度"。概率越低,惊讶越大。

交叉熵的两种理解

  1. 极大似然:最大化观测数据出现的概率
  2. 最小化惊讶度:让模型的预测尽可能接近真实分布,减少编码标签所需的信息量

八、计算效率优化

全连接层参数量 \mathcal{O}(dq),当 d, q 很大时开销很高。两种压缩方法:

Deep Fried Convnets

将权重矩阵 \mathbf{W} 分解为排列 + 傅里叶变换 + 缩放的组合。FFT 计算复杂度 \mathcal{O}(d \log d),远低于 \mathcal{O}(d^2)

四元数分解

\mathbf{W} 拆成 n 个小矩阵,参数量从 dq 降到 dq/n

精度损失来源:强制权重矩阵服从特殊结构,自由度减少,有些变换无法精确表达。


九、激活函数(补充概念)

激活函数是加在神经网络每层输出上的非线性函数。没有它,多层网络等价于单层线性变换。常见激活函数:

名称公式用途
ReLU\max(0, x)隐藏层最常用
Sigmoid\frac{1}{1+e^{-x}}二分类输出层
Softmax\frac{e^{o_j}}{\sum e^{o_k}}多分类输出层

十、总结

概念作用
One-Hot公平表示无序类别
线性模型 \mathbf{o} = \mathbf{Wx} + \mathbf{b}从特征到原始分数
Softmax将原始分数压缩为概率分布
交叉熵损失衡量预测分布与真实分布的差距
极大似然估计交叉熵损失的理论基础
信息论交叉熵的另一种理解:最小化惊讶度