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 估计”。