机器学习数学基础 120 章

指数、对数、Sigmoid、Softmax 与 LogSumExp

层级:A|必学

1. 分类模型的核心函数族

指数把实数映射为正数,对数把乘积变成和,Sigmoid 把单个分数变为二分类概率,Softmax 把多个分数变为概率向量,LogSumExp 则是它们背后的稳定归一化函数。本章把公式、导数和代码稳定性放在一起理解。

2. 指数与对数回顾

ex>0,ddxex=ex,e^x>0, \quad\frac d{dx}e^x=e^x, logx 定义于 x>0,ddxlogx=1x.\log x\text{ 定义于 }x>0, \quad\frac d{dx}\log x=\frac1x.

指数增长很快:双精度中 e1000e^{1000} 溢出;e1000e^{-1000} 下溢为 0。稳定实现必须避免无界指数输入。

3. Sigmoid

σ(z)=11+ez.\sigma(z)=\frac1{1+e^{-z}}.

性质:

  • 输出范围 (0,1)(0,1)
  • σ(0)=1/2\sigma(0)=1/2
  • 单调递增;
  • σ(z)=1σ(z)\sigma(-z)=1-\sigma(z)
  • 导数
σ(z)=σ(z)(1σ(z)).\sigma'(z)=\sigma(z)(1-\sigma(z)).

导数最大为 1/41/4,绝对值大时接近 0,出现饱和。

4. Logit 与 odds

若概率 p(0,1)p\in(0,1),odds 为

p1p.\frac p{1-p}.

logit 是对数几率:

logit(p)=logp1p.\operatorname{logit}(p)=\log\frac p{1-p}.

它是 Sigmoid 的反函数:

p=σ(z)    z=logp1p.p=\sigma(z) \iff z=\log\frac p{1-p}.

逻辑回归假设 log-odds 对特征为仿射函数:

logp(y=1x)1p(y=1x)=wTx+b.\log\frac{p(y=1|x)}{1-p(y=1|x)}=w^Tx+b.

5. 稳定计算 Sigmoid

直接公式在大负 zz 时计算 eze^{-z} 可能溢出。可分支:

σ(z)={1/(1+ez),z0,ez/(1+ez),z<0.\sigma(z)= \begin{cases} 1/(1+e^{-z}),&z\ge0,\\ e^z/(1+e^z),&z<0. \end{cases}

实际应调用库的稳定实现。训练二分类优先直接传 logits 给合并损失函数。

6. Softmax

给定 logits zRKz\in\mathbb R^K

pk=ezkj=1Kezj.p_k=\frac{e^{z_k}}{\sum_{j=1}^{K}e^{z_j}}.

每个 pk>0p_k>0kpk=1\sum_kp_k=1。Softmax 保留排序:logit 越大,概率越大。

它对统一平移不变:

softmax(z+c1)=softmax(z).\operatorname{softmax}(z+c\boldsymbol1) =\operatorname{softmax}(z).

因此 logits 只由相对差异确定,绝对零点不可辨识。

7. 稳定 Softmax:减最大值

m=maxjzjm=\max_jz_j

pk=ezkmjezjm.p_k=\frac{e^{z_k-m}}{\sum_je^{z_j-m}}.

所有指数输入不大于 0,至少一个为 0,既避免上溢,也减少全部下溢。数学值因分子分母同乘 eme^{-m} 不变。

8. Softmax Jacobian

pizj=pi(δijpj),\frac{\partial p_i}{\partial z_j} =p_i(\delta_{ij}-p_j),

矩阵形式:

J=diag(p)ppT.J=\operatorname{diag}(p)-pp^T.

对角项 pi(1pi)>0p_i(1-p_i)>0,非对角项 pipj<0-p_ip_j<0:提高一个 logit 会提高自身概率,并因总和为 1 压低其他类别概率。

9. Softmax + 交叉熵

one-hot 标签 yy 的损失:

L=kyklogpk.L=-\sum_ky_k\log p_k.

若真实类别为 cc,就是 L=logpcL=-\log p_c。对 logits 的梯度极其简洁:

Lz=py.\frac{\partial L}{\partial z}=p-y.

它是预测概率与真实 one-hot 向量之差。

10. LogSumExp

LSE(z)=logk=1Kezk.\operatorname{LSE}(z) =\log\sum_{k=1}^{K}e^{z_k}.

稳定形式:

LSE(z)=m+logkezkm.\operatorname{LSE}(z) =m+\log\sum_ke^{z_k-m}.

Softmax 是它的梯度:

LSEzk=pk.\frac{\partial\operatorname{LSE}}{\partial z_k}=p_k.

LSE 是凸函数,是最大值的光滑近似:

maxkzkLSE(z)maxkzk+logK.\max_kz_k \le\operatorname{LSE}(z) \le\max_kz_k+log K.

11. 从 logits 直接写损失

多分类真实类别 cc

logpc=zc+LSE(z).-\log p_c =-z_c+\operatorname{LSE}(z).

二分类的稳定 logistic 损失可写为

softplus(z)yz,\operatorname{softplus}(z)-yz,

其中

softplus(z)=log(1+ez)=max(0,z)+log(1+ez).\operatorname{softplus}(z)=\log(1+e^z) =\max(0,z)+\log(1+e^{-|z|}).

后一个形式稳定。不要先把概率截断再取对数,除非明确理解其梯度影响。

12. 温度参数

pk(T)=ezk/Tjezj/T,T>0.p_k(T)=\frac{e^{z_k/T}}{\sum_je^{z_j/T}}, \qquad T>0.
  • T<1T<1:分布更尖锐;
  • T>1T>1:更平滑;
  • T0+T\to0^+:趋近 argmax 的 one-hot;
  • TT\to\infty:趋近均匀分布。

温度缩放可做概率校准,但应在独立验证集上拟合。

13. Softmax 不是独立 Sigmoid

多类单标签任务中类别互斥,用 Softmax 让概率竞争且总和为 1。多标签任务每个标签可独立存在,通常对每个 logit 用 Sigmoid。选错会改变问题的概率假设。

易错点

  1. logits 不是概率,可以为任意实数。
  2. Softmax 必须沿类别轴归一化,不是沿 batch 轴。
  3. 直接 exp(z) 可能溢出,应减最大值。
  4. 概率已做 Softmax 时不要再把它传给期望 logits 的交叉熵 API。
  5. Softmax 输出不能表达精确零概率,浮点下却可能下溢为 0。

常见问答

Q1:为什么所有 logits 加 100 后概率不变?

公因子 e100e^{100} 在分子分母抵消。实现减最大值利用的就是平移不变性。

Q2:Softmax 概率高就是校准好吗?

不是。Softmax 只给归一化分数,模型可能过度自信。校准需比较预测置信度与真实频率。

Q3:二分类能用两维 Softmax 吗?

可以,与单 logit Sigmoid 在适当参数化下等价,但两维 logits 有一个共同平移冗余,单 logit 更简洁。

练习

  1. 计算 σ(0)\sigma(0)σ(z)\sigma(-z) 的关系。
  2. logits (1,2)(1,2)(101,102)(101,102) 的 Softmax 是否相同?
  3. 写出三分类 Softmax Jacobian 的通式。
  4. 真实类为 2 时,交叉熵用 logits 如何写成 LSE?
  5. 解释多标签任务为何不用单个 Softmax。

答案与提示

  1. 1/21/2σ(z)=1σ(z)\sigma(-z)=1-\sigma(z)
  2. 相同。
  3. Jij=pi(δijpj)J_{ij}=p_i(\delta_{ij}-p_j)
  4. z2+LSE(z)-z_2+\operatorname{LSE}(z)
  5. Softmax 强制标签互斥并让概率总和为 1,多标签需要每个标签独立为真。