损失函数数学基础:MLE、交叉熵、KL 散度与 MSE
分类: 神经网络基础 · 难度: 中级 · 关联讲座: L03
本文系统梳理深度学习分类任务中涉及的核心数学概念。每个概念从定义→直觉→公式→推导→数值示例完整展开,最后阐明它们之间的联系。这些概念在 CS224N L03(神经网络)中首次出现,但贯穿整个课程(L08 DPO 损失、L09 LoRA 目标函数等都建立在此基础之上)。
1. 最大似然估计(MLE)
📐 MLE 的定义与推导
概念:给定一组观测数据 D={(xi,yi)}i=1N,MLE 寻找使数据出现概率最大的参数 θ∗。
直觉:想象你在投一枚硬币,投了 100 次,70 次正面。MLE 会告诉你”这枚硬币正面概率最可能是 0.7”——因为在 p=0.7 下,观测到这组数据的概率最大。
形式化:
第 1 步:定义似然函数(假设样本独立同分布)
L(θ)=∏i=1Npθ(yi∣xi)
第 2 步:取对数(连乘→连加,数值稳定且不改变 argmax)
ℓ(θ)=logL(θ)=∑i=1Nlogpθ(yi∣xi)
第 3 步:MLE = 最大化对数似然
θ∗=argmaxθ∑i=1Nlogpθ(yi∣xi)
第 4 步:等价于最小化负对数似然(NLL),与梯度下降框架对齐
θ∗=argminθ[−∑i=1Nlogpθ(yi∣xi)]
为什么取 log?
- 数值稳定:N 个概率连乘会极速趋近 0(下溢)
- 数学方便:log 把乘法变加法,求导更简洁
- 不影响结果:log 是单调递增函数,argmax 不变
🔢 数值示例:抛硬币的 MLE
设定:投硬币 N=5 次,结果 D={H,H,T,H,T}(3 正 2 反)
设正面概率 p=θ,则:
L(θ)=θ3(1−θ)2
ℓ(θ)=3logθ+2log(1−θ)
求导令其为零:dθdℓ=θ3−1−θ2=0
3(1−θ)=2θ⟹θ∗=53=0.6
观察:MLE 的结果就是频率 3/5——对于离散分布,MLE 总是给出经验频率。
2. 信息熵(Entropy)
📐 信息熵的定义与推导
概念:信息熵衡量一个概率分布的内在不确定性——越均匀(越”不确定”),熵越高;越集中(越”确定”),熵越低。
直觉:天气预报说”明天 50% 下雨 50% 不下”→不确定性最大(1 bit);说”明天 100% 晴天”→不确定性为零(0 bit)。
定义:
H(p)=−∑c=1Cp(c)logp(c)
其中 p(c) 是事件 c 发生的概率,log 取自然对数(单位为 nats)或以 2 为底(单位为 bits)。
关键性质:
- 非负性:H(p)≥0,当且仅当分布退化为 δ 函数(某事件概率为 1)时取零
- 最大值:均匀分布 p(c)=1/C 时取最大值 H=logC
- 不依赖模型:H(p) 只取决于真实分布 p,与模型预测无关
信息量(surprisal):单个事件 c 的信息量为 −logp(c)。概率越小的事件,信息量越大(“意外”)。熵就是信息量的期望。
🔢 数值示例
| 分布 p | H(p) (nats) | 直觉 |
|---|
| [1,0,0](one-hot) | 0 | 完全确定 |
| [0.5,0.5,0](二选一) | 0.693 | 相当于抛硬币 |
| [1/3,1/3,1/3](均匀) | 1.099 | 最大不确定性 |
| [0.9,0.05,0.05] | 0.393 | 基本确定但有噪声 |
观察:分类任务的 one-hot 标签熵为 0——这意味着标签本身没有不确定性,所有不确定性来自模型预测。
3. 交叉熵(Cross-Entropy)
📐 交叉熵的定义与推导
概念:交叉熵衡量”用分布 q 编码分布 p 事件所需的平均编码长度”。如果 q 完美匹配 p,编码长度等于 p 自身的熵;如果不匹配,会多花额外的编码代价。
直觉:你手里有一本英文密码本(q),但需要编码的消息是中文(p)。密码本越不匹配,编码效率越低——交叉熵就度量了这种”不匹配的代价”。
定义:
H(p,q)=−∑c=1Cp(c)logq(c)
第 1 步:当 p 为 one-hot(分类任务中标签 y 对应位为 1,其余为 0),化简为:
H(p,q)=−logq(y)
即模型给正确类别分配的 log 概率的负值。
第 2 步:在整个数据集上取平均:
J(θ)=N1∑i=1NH(p(i),qθ)=−N1∑i=1Nlogqθ(yi∣xi)
第 3 步:这恰好等于 NLL 的均值。因此:
最小化交叉熵=最小化 NLL=MLE
三者在分类任务中完全等价。
🔢 数值示例:3 类分类
设定:正确标签 y=1(类别 1),one-hot p=[0,1,0]
| 模型预测 q | 交叉熵 H(p,q)=−logq(1) | 评价 |
|---|
| [0.1,0.8,0.1] | 0.223 | 预测很准 |
| [0.3,0.5,0.2] | 0.693 | 尚可 |
| [0.8,0.1,0.1] | 2.303 | 预测错误,损失很高 |
| [0.01,0.01,0.98] | 4.605 | 严重错误 |
观察:当 q(y)→0 时,H→∞——模型对正确类别给出极低概率会受到极大惩罚。
4. KL 散度(Kullback-Leibler Divergence)
📐 KL 散度的定义与推导
概念:KL 散度衡量两个概率分布之间的”距离”——更准确地说,是用分布 q 近似分布 p 时多付出的额外编码代价(超出 p 自身熵的部分)。
直觉:KL 散度回答的问题是”如果真实世界是 p,但我误以为是 q,我要多浪费多少编码长度?”
定义:
DKL(p∥q)=∑c=1Cp(c)logq(c)p(c)=∑c=1Cp(c)logp(c)−∑c=1Cp(c)logq(c)
分解:
DKL(p∥q)=−H(p)+H(p,q)
即:
H(p,q)=H(p)+DKL(p∥q)
关键性质:
- 非负性(Gibbs 不等式):DKL(p∥q)≥0,当且仅当 p=q 时取零
- 不对称性:DKL(p∥q)=DKL(q∥p)——因此 KL 散度不是度量(metric)
- 最小化交叉熵 = 最小化 KL 散度:因为 H(p) 是常数(标签固定),minθH(p,qθ)⟺minθDKL(p∥qθ)
前向 KL vs 逆向 KL:
- DKL(p∥q)(前向):交叉熵训练用这个。q 必须覆盖 p 的所有模式,否则 p(c)>0 但 q(c)≈0 的地方会产生 ∞。→ mode-covering
- DKL(q∥p)(逆向):VAE 用这个。q 倾向集中在 p 的某个高概率区域。→ mode-seeking
🔢 数值示例
设定:p=[0.5,0.3,0.2],q=[0.6,0.3,0.1]
DKL(p∥q)=0.5log0.60.5+0.3log0.30.3+0.2log0.10.2
=0.5×(−0.182)+0.3×0+0.2×0.693=−0.091+0+0.139=0.048
验证分解:
- H(p)=−(0.5log0.5+0.3log0.3+0.2log0.2)=1.030
- H(p,q)=−(0.5log0.6+0.3log0.3+0.2log0.1)=1.078
- H(p,q)−H(p)=1.078−1.030=0.048=DKL ✓
one-hot 特殊情况:若 p=[0,1,0](one-hot),则 H(p)=0,此时 H(p,q)=DKL(p∥q)——交叉熵就是 KL 散度。
5. 均方误差(MSE)
📐 MSE 的定义与适用场景
概念:MSE 衡量预测值与真实值之间的平均平方距离,是回归任务的标准损失函数。
定义:
MSE=N1∑i=1N(yi−y^i)2
MLE 视角:MSE 等价于假设数据服从高斯噪声 y=fθ(x)+ϵ,ϵ∼N(0,σ2) 时的 MLE。
推导:
p(y∣x,θ)=2πσ21exp(−2σ2(y−fθ(x))2)
logp(y∣x,θ)=−2σ2(y−fθ(x))2−21log(2πσ2)
最大化对数似然 ⟺ 最小化 ∑(yi−fθ(xi))2,即 MSE。
MSE 的统计假设:使用 MSE 隐含假设了高斯噪声和同方差性(σ 对所有样本相同)。
💡 为什么分类不用 MSE?
MSE 在分类任务上失败的两个原因:
1. 梯度饱和问题:
对 softmax 输出 y^c=softmax(zc) 用 MSE,梯度为:
∂zc∂MSE=(y^c−yc)⋅y^c(1−y^c)
当 y^c 接近 0 或 1 时,y^c(1−y^c)≈0,梯度消失——即使预测完全错误,也几乎不更新。
交叉熵的梯度为 y^c−yc,没有饱和项,预测越错,梯度越大。
2. 概率语义不匹配:MSE 假设高斯噪声,分类任务的标签是离散的 one-hot 向量,不符合高斯假设。交叉熵假设多项式分布(categorical distribution),与 softmax 自然配对。
6. 二元交叉熵(Binary Cross-Entropy)
📐 BCE 公式与梯度
当只有两个类别(正/负),用一个标量 y^=σ(z)∈(0,1) 表示正类概率:
BCE(y,y^)=−[ylogy^+(1−y)log(1−y^)]
与多类交叉熵的关系:令 q=[y^,1−y^],p=[y,1−y],代入 H(p,q)=−∑plogq 即得 BCE。
对 logit z 求梯度(其中 y^=σ(z)):
∂z∂BCE=σ(z)−y=y^−y
预测值减真实值——形式极其简洁,且无饱和问题。
多标签 vs 多类:
- 多类(互斥,如”猫/狗/鸟”):softmax + 多类交叉熵(
CrossEntropyLoss)
- 多标签(不互斥,如”可爱/毛茸茸/户外”):每个标签独立 sigmoid + BCE(
BCEWithLogitsLoss)
7. Label Smoothing
📐 Label Smoothing 的数学形式
标准 one-hot 标签过于”自信”(概率 0 或 1),可能导致过拟合和过度自信的预测。Label smoothing(Szegedy et al., 2016)用平滑标签替代:
psmooth(c)=(1−ϵ)⋅ptrue(c)+Cϵ
ϵ 通常取 0.1,C 是类别数。
效果:
- 正确类别目标:1→1−ϵ+ϵ/C(如 0.9+0.01=0.91)
- 错误类别目标:0→ϵ/C(如 0.01)
信息论解释:H(psmooth)>0,模型不再被迫将 logit 推向 ±∞,产生更校准(calibrated)的概率估计。
在 Transformer 中的地位:“Attention Is All You Need” 原文即使用了 ϵ=0.1 的 label smoothing。
完整关系图
🔗 概念间的数学关系
核心等式:
H(p,q)=H(p)+DKL(p∥q)
| 概念 | 公式 | 依赖什么 | 用途 |
|---|
| 信息熵 H(p) | −∑plogp | 只依赖真实分布 | 度量内在不确定性 |
| 交叉熵 H(p,q) | −∑plogq | 真实 + 模型 | 分类损失函数 |
| KL 散度 DKL | ∑plog(p/q) | 真实 + 模型 | 度量分布差异 |
| NLL | −logq(y) | one-hot 下交叉熵特例 | 等价于交叉熵 |
| MSE | N1∑(y−y^)2 | 高斯假设下 MLE | 回归损失函数 |
| BCE | −[ylogy^+(1−y)log(1−y^)] | 二分类交叉熵特例 | 二分类/多标签 |
在 CS224N 中的出现:
- L03 神经网络:交叉熵作为分类损失首次出现,与反向传播衔接
- L04 RNN/LM:条件语言模型的训练目标本质上是序列每个位置的交叉熵之和
- L05 Transformer:Attention Is All You Need 使用 label smoothing 交叉熵
- L07 预训练:MLM 和 CLM 目标函数都是交叉熵的变体
- L08 RLHF/DPO:DPO 损失 = Bradley-Terry 模型上的 sigmoid 交叉熵(BCE)
- L09 LoRA:微调目标仍然是交叉熵,LoRA 改变的是参数化方式而非损失函数
⚠️ 常见误区
- 误区:交叉熵 = 信息熵 → 正确:H(p) 只依赖 p;H(p,q) 还依赖模型 q;差值是 KL 散度
- 误区:多标签用 softmax + cross-entropy → 正确:多标签应用 sigmoid + BCE;softmax 强制概率归一不适合独立标签
- 误区:KL 散度是对称的”距离” → 正确:DKL(p∥q)=DKL(q∥p);交叉熵训练用前向 KL(mode-covering),VAE 用逆向 KL(mode-seeking)
- 误区:MSE 也能用于分类 → 正确:理论上能用但梯度有 y^(1−y^) 饱和项,实践中收敛极慢且不稳定
- 误区:log 底数是 10 → 正确:ML 中统一用 ln(自然对数),单位是 nats;信息论教材常用 log2(bits),只差常数倍