从 MLE 到 Cross-Entropy

0. 引语

在机器学习中,交叉熵损失(cross-entropy)几乎是分类任务的默认选择,而均方误差(MSE)则常用于回归。很多人会记住公式,却不清楚这些损失函数为什么合理、从哪里来、彼此之间有什么统一关系

本文给出一条自顶向下、无跳步的推导路径,从最原始的参数估计目标出发,经过:

  • 最大似然估计(MLE)
  • KL 散度(分布匹配)
  • Monte Carlo 近似
  • one-hot 展开(离散情形)
  • 连续变量(密度与回归损失)

最终落到训练中实际使用的公式。读完后,你应该能回答:

  • 为什么用 log 概率?
  • 为什么是 KL(q‖p)?
  • one-hot 展开是怎么来的?
  • 连续变量时为什么是 MSE / L1?

1. 推导

1.1 参数估计的本质:分布逼近

设真实数据来自未知分布 \( q(x,y) \),模型为条件分布 \( p_\theta(y \mid x) \)。

目标不是“拟合标签”,而是:

用 \( p_\theta(y \mid x) \) 去逼近真实分布 \( q(y \mid x) \)


1.2 最大似然估计(MLE)

在真实分布下最大化模型的对数似然:

\[\max_\theta \; \mathbb{E}_{(x,y)\sim q(x,y)}[\log p_\theta(y\mid x)] \]

等价地:

\[\min_\theta \; \mathbb{E}_{(x,y)\sim q(x,y)}[-\log p_\theta(y\mid x)] \]


1.3 与 KL 散度的等价

对每个 \( x \),考虑:

\[D_{\mathrm{KL}}(q(y|x)\|p_\theta(y|x)) = \sum_y q(y|x)\log \frac{q(y|x)}{p_\theta(y|x)} \]

展开并对 \(x\) 取期望:

\[\mathbb{E}_x[D_{\mathrm{KL}}(q\|p_\theta)] = \mathbb{E}_{(x,y)\sim q}[-\log p_\theta(y|x)] + \text{const} \]

因此:

\[\min_\theta \mathbb{E}_q[-\log p_\theta(y|x)] \Longleftrightarrow \min_\theta \mathbb{E}_x[D_{\mathrm{KL}}(q\|p_\theta)] \]

👉 MLE 等价于最小化 forward KL


1.4 用样本近似期望(Monte Carlo)

真实分布不可得,但有数据:

\[(x_i,y_i)\overset{iid}{\sim} q(x,y) \]

用样本平均近似期望:

\[\mathbb{E}_q[f(x,y)] \approx \frac{1}{N}\sum_{i=1}^N f(x_i,y_i) \]

取 \( f = -\log p_\theta \):

\[\mathcal{L}(\theta) = -\frac{1}{N}\sum_{i=1}^N \log p_\theta(y_i \mid x_i) \]

这就是 negative log-likelihood (NLL)


1.5 离散分类:one-hot 展开

设 \( y_i \in {1,\dots,K} \),定义:

\[y_{ik} = \begin{cases} 1 & k = y_i \\ 0 & k \ne y_i \end{cases} \]

有恒等式:

\[\log p_\theta(y_i \mid x_i) = \sum_{k=1}^K y_{ik}\log p_\theta(k \mid x_i) \]

因此:

\[-\log p_\theta(y_i \mid x_i) = -\sum_{k=1}^K y_{ik}\log p_\theta(k \mid x_i) \]

整体损失:

\[\mathcal{L}(\theta) = -\frac{1}{N}\sum_{i=1}^N \sum_{k=1}^K y_{ik}\log p_\theta(k \mid x_i) \]

👉 这就是 cross-entropy loss


1.6 连续变量:从概率到密度

当 \( y \) 是连续变量时:

  • \( p_\theta(y|x) \) 是概率密度
  • 单点概率为 0,但密度定义局部概率

目标仍然是:

\[\mathcal{L}(\theta) = -\frac{1}{N}\sum_{i=1}^N \log p_\theta(y_i \mid x_i) \]

区别:

  • 不再有 one-hot
  • 不再是有限求和
  • 直接使用 log density

1.7 回归损失是如何出现的

高斯假设 → MSE

\[y \mid x \sim \mathcal N(\mu_\theta(x), \sigma^2) \]

则:

\[-\log p_\theta(y|x) = \frac{(y-\mu_\theta(x))^2}{2\sigma^2} + \text{const} \]

👉 等价于最小化:

\[\sum (y_i - \mu_\theta(x_i))^2 \]

MSE


拉普拉斯假设 → L1

\[y \mid x \sim \text{Laplace}(\mu_\theta(x), b) \]

则:

\[-\log p_\theta(y|x) = \frac{|y-\mu_\theta(x)|}{b} + \text{const} \]

👉 等价于 L1 loss


1.8 统一公式

无论离散还是连续:

\[\mathcal{L}(\theta) = -\frac{1}{N}\sum_{i=1}^N \log p_\theta(y_i \mid x_i) \]

情况 \(p_\theta\) 损失
分类 categorical cross-entropy
回归(高斯) Gaussian MSE
回归(Laplace) Laplace L1

2. 常见问题

Q1:为什么要对概率取 log?

因为:

  • 把乘积变加法(MLE)
  • 强烈惩罚低概率(错且自信)
  • 对应信息量:\(-\log p\) = “惊讶度”

Q2:one-hot 展开在做什么?

本质是:

把“取第 \(y_i\) 类”写成“加权求和”

\[\log p(y_i|x_i) = \sum_k y_{ik}\log p(k|x_i) \]

是一个选择器(selector)


Q3:为什么用 KL(q‖p),而不是 KL(p‖q)?

因为:

  • 我们只能从 \(q\) 采样
  • KL(q‖p) 是对 \(q\) 的期望,可用样本估计
  • KL(p‖q) 需要知道 \(q\),不可计算

Q4:训练样本是怎么进入公式的?

通过 Monte Carlo:

\[\mathbb{E}_q[\cdot] \rightarrow \frac{1}{N}\sum_{i=1}^N (\cdot) \]


Q5:连续变量为什么还能用 log?

虽然:

\[P(Y=y)=0 \]

但:

\[P(y \le Y \le y+\Delta y) \approx p(y)\Delta y \]

优化 log 概率等价于优化 log density(差一个常数)。


Q6:cross-entropy、NLL、KL 是什么关系?

\[H(q,p) = D_{\mathrm{KL}}(q\|p) + H(q) \]

因此:

  • NLL = cross-entropy
  • cross-entropy ≈ KL(差常数)

3. 总结

整条链可以浓缩为:

\[\text{参数估计} \rightarrow \text{MLE} \rightarrow \text{KL(q‖p)} \rightarrow \text{交叉熵} \rightarrow \text{Monte Carlo} \rightarrow \text{训练 loss} \]

最终统一形式:

\[\boxed{ \mathcal{L}(\theta) = -\frac{1}{N}\sum_{i=1}^N \log p_\theta(y_i \mid x_i) } \]

  • 分类 → cross-entropy
  • 回归 → MSE / L1(取决于分布假设)

一句话总结:
所有常见监督学习损失,本质上都是“对真实数据分布的负对数似然的 Monte Carlo 估计”。

posted @ 2026-04-19 23:49  张天明  阅读(81)  评论(0)    收藏  举报