Math-00.数学分布-50.分布与机器学习损失

本文梳理 Math-00 数学分布 系列与机器学习损失函数的对应:多数训练目标本质是负对数似然(negative log-likelihood,NLL)或等价形式。理解分布 → 似然 → 损失,有助于正确选型与诊断。

段末注释NLL 为负对数似然;最小化 NLL 等价于极大似然估计(maximum likelihood estimation,MLE)。

读前说明:本篇为衔接专论,不对应单一分布的 PMF/PDF;下文以损失—分布对照表为主。系列:00 规划 | 01 总论


1. 为什么从分布理解损失

图 1 似然—损失链条

监督学习假设数据由某概率模型生成:$p(y \mid \mathbf{x}, \boldsymbol{\theta})$。训练求:

$$
\hat{\boldsymbol{\theta}} = \arg\max_{\boldsymbol{\theta}} \sum_i \log p(y_i \mid \mathbf{x}i, \boldsymbol{\theta})
\quad \Leftrightarrow \quad
\arg\min
{\boldsymbol{\theta}} \underbrace{-\sum_i \log p(y_i \mid \mathbf{x}i, \boldsymbol{\theta})}{\text{损失 = NLL}}
$$

选错分布 ≈ 选错损失 → 偏差、校准差、异常点敏感。


2. 基本设定

符号 含义
$y$ 标签(连续 / 0-1 / 多类 / 计数)
$f(\mathbf{x})$ 模型输出(均值、logit、log-rate 等)
$\phi$ 分布族参数与链接函数

3. 损失—分布对照

图 2 主要对照表可视化

任务 假设分布 损失(NLL 等价) 系列专篇
回归(同方差) $y \sim \mathcal{N}(f(\mathbf{x}), \sigma^2)$ MSE $\propto (y-f)^2$ 20.正态
回归(重尾) $y \sim t(f, \sigma^2, \nu)$ 加权 MSE / Huber 27.t
二分类 $y \sim \mathrm{Bernoulli}(\sigma(f))$ BCE / Logistic NLL 10.伯努利
多分类 $y \sim \mathrm{Categorical}(\mathrm{softmax}(f))$ 交叉熵 15.多项
计数 $y \sim \mathrm{Poisson}(\exp(f))$ Poisson NLL 12.泊松
过离散计数 $y \sim \mathrm{NB}(\mu, \alpha)$ NB NLL 14.负二项
正值连续 $\log y \sim \mathcal{N}(f, \sigma^2)$ 对 $\log y$ 的 MSE 21.对数正态
比例/不确定性 $p \sim \mathrm{Beta}(\alpha,\beta)$ 非点损失;贝叶斯 NLL 25.Beta

3.1 回归:MSE ↔ 正态

$$
p(y \mid f) = \frac{1}{\sqrt{2\pi}\sigma}\exp\left(-\frac{(y-f)^2}{2\sigma^2}\right)
\Rightarrow -\log p \propto (y-f)^2 + \text{const}
$$

3.2 分类:交叉熵 ↔ 多项

$$
-\log p(y=k \mid f) = -\log \frac{e^{f_k}}{\sum_j e^{f_j}} = \text{CrossEntropy}(f, y)
$$

3.3 计数:Poisson NLL

$$
-\log p(y \mid f) = e^{f} - y f + \log(y!)
$$

($\log(y!)$ 与 $\theta$ 无关,训练时常省略。)


4. 数字特征与鲁棒性

损失 对异常值 隐含假设
MSE 敏感(平方) 正态噪声
MAE 较鲁棒 拉普拉斯(Laplace)
Huber 折中 混合
BCE 标签噪声敏感 Bernoulli
Poisson 大计数权重大 等离散

5. 分布族扩展

扩展 说明
GLM 指数族 + 链接:Poisson/log、Binomial/logit
异方差 $y \sim \mathcal{N}(f, \sigma^2(\mathbf{x}))$ → 加权 NLL
零膨胀 ZIP / ZINB → 混合分布
贝叶斯 NN 权重先验 → 后验预测
focal loss 修正类别不平衡(非严格 NLL,但源于 BCE 加权)

6. 前提假设(损失—分布对应)

选用某种损失时,隐含假设训练数据由对应分布生成:

损失 隐含生成假设 违背时
MSE $y\mid x \sim N(f(x),\sigma^2)$ 厚尾/异常值 → Huber 等
BCE $y\in{0,1}\sim\mathrm{Bernoulli}(\sigma(f))$ 标签噪声大 → 鲁棒损失
交叉熵(多类) $y\sim\mathrm{Multinomial}(1,\mathrm{softmax}(f))$ 类不平衡 → 加权
Poisson NLL $y\sim\mathrm{Poisson}(e^f)$ 过离散 → NB 损失
通用假设 含义
i.i.d. 样本 各训练样本独立同分布(或条件 i.i.d.)
正确设定 所选分布族与真实 $p(y\mid x)$ 一致
可识别 参数由无限数据可唯一确定

段末注释NLL(negative log-likelihood,负对数似然)最小化等价于 MLE(maximum likelihood estimation,极大似然估计)。


7. 适用场景

图 3 选型场景

数据 推荐损失/分布
酶活/表达(正偏) 对数正态 → $\log y$ 上 MSE
RNA-seq 读段 Poisson / NB NLL
0/1 有害突变 BCE(Bernoulli)
10 类结构预测 Softmax + 交叉熵
蛋白活性回归(WT 附近对称) MSE / 正态

8. 局限与误用

图 4 误用后果

误用 后果
正偏数据用 MSE 低估高值、残差非正态
过离散计数用 Poisson NLL 校准差、标准误偏小
多标签当多类 Softmax 互斥假设错误
忽略 $\sigma$ 变化 异方差下 MLE 非最优
只调损失不调评估 业务指标与 NLL 脱节

9. 实践建议

  1. 看 $y$ 类型01 总论 决策树
  2. 看残差/QQ → 正态性、Poisson 等离散
  3. 看离散度 $\mathrm{Var}/\mathbb{E}$ → Poisson vs NB
  4. 交叉验证 比较 NLL 与业务指标(Spearman、RMSE)

10. 示例与代码

场景:同一合成数据,比较 MSE(正态)与 Poisson NLL 拟合计数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
from sklearn.linear_model import LinearRegression, PoissonRegressor
from sklearn.metrics import mean_squared_error

rng = np.random.default_rng(42)
# count data: lambda = exp(0.5 + 0.3*x)
x = rng.uniform(0, 2, 200)
lam = np.exp(0.5 + 0.3 * x)
y_count = rng.poisson(lam)

# wrong: treat counts as continuous
lr = LinearRegression().fit(x.reshape(-1, 1), y_count)
pred_lr = lr.predict(x.reshape(-1, 1))
print("Linear MSE:", mean_squared_error(y_count, pred_lr))

# right: Poisson GLM
pr = PoissonRegressor(alpha=0).fit(x.reshape(-1, 1), y_count)
pred_pr = pr.predict(x.reshape(-1, 1))
# deviance ~ Poisson NLL up to const
nll_poisson = np.mean(pred_pr - y_count * np.log(pred_pr + 1e-9))
print("Poisson mean NLL term:", nll_poisson)

# binary: BCE = Bernoulli NLL
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss
y_bin = (y_count > np.median(y_count)).astype(int)
clf = LogisticRegression(max_iter=500).fit(x.reshape(-1, 1), y_bin)
print("BCE:", log_loss(y_bin, clf.predict_proba(x.reshape(-1, 1))[:, 1]))

11. 小结

  • MSE ↔ 正态BCE ↔ Bernoulli交叉熵 ↔ 多项Poisson NLL ↔ Poisson 是最常用四条。
  • 选型先问「$y$ 如何生成」,再选分布与损失;与 40.极限 及酶学 ML 最佳实践 衔接。

系列导航01 总论 | 10 伯努利 | 20 正态

ML 数学续读Math-05/03 CE与KL | Math-04/01 优化总论 | Math-04/04 Adam | Math-03 线性代数


参考文献

  1. Murphy K. P. Probabilistic Machine Learning.
  2. sklearn PoissonRegressor
-------------本文结束感谢您的阅读-------------