损失函数数学基础:MLE、交叉熵、KL 散度与 MSE

分类: 神经网络基础 · 难度: 中级 · 关联讲座: L03

本文系统梳理深度学习分类任务中涉及的核心数学概念。每个概念从定义→直觉→公式→推导→数值示例完整展开,最后阐明它们之间的联系。这些概念在 CS224N L03(神经网络)中首次出现,但贯穿整个课程(L08 DPO 损失、L09 LoRA 目标函数等都建立在此基础之上)。


1. 最大似然估计(MLE)

📐 MLE 的定义与推导

概念:给定一组观测数据 D={(xi,yi)}i=1N\mathcal{D} = \{(x_i, y_i)\}_{i=1}^N,MLE 寻找使数据出现概率最大的参数 θ\theta^*

直觉:想象你在投一枚硬币,投了 100 次,70 次正面。MLE 会告诉你”这枚硬币正面概率最可能是 0.7”——因为在 p=0.7p = 0.7 下,观测到这组数据的概率最大。

形式化

第 1 步:定义似然函数(假设样本独立同分布)

L(θ)=i=1Npθ(yixi)\mathcal{L}(\theta) = \prod_{i=1}^N p_\theta(y_i | x_i)

第 2 步:取对数(连乘→连加,数值稳定且不改变 argmax)

(θ)=logL(θ)=i=1Nlogpθ(yixi)\ell(\theta) = \log \mathcal{L}(\theta) = \sum_{i=1}^N \log p_\theta(y_i | x_i)

第 3 步:MLE = 最大化对数似然

θ=argmaxθi=1Nlogpθ(yixi)\theta^* = \arg\max_\theta \sum_{i=1}^N \log p_\theta(y_i | x_i)

第 4 步:等价于最小化负对数似然(NLL),与梯度下降框架对齐

θ=argminθ[i=1Nlogpθ(yixi)]\theta^* = \arg\min_\theta \left[-\sum_{i=1}^N \log p_\theta(y_i | x_i)\right]

为什么取 log?

  1. 数值稳定:NN 个概率连乘会极速趋近 0(下溢)
  2. 数学方便:log 把乘法变加法,求导更简洁
  3. 不影响结果:log\log 是单调递增函数,argmax 不变

🔢 数值示例:抛硬币的 MLE

设定:投硬币 N=5N = 5 次,结果 D={H,H,T,H,T}\mathcal{D} = \{H, H, T, H, T\}(3 正 2 反)

设正面概率 p=θp = \theta,则:

L(θ)=θ3(1θ)2\mathcal{L}(\theta) = \theta^3 (1-\theta)^2

(θ)=3logθ+2log(1θ)\ell(\theta) = 3\log\theta + 2\log(1-\theta)

求导令其为零:ddθ=3θ21θ=0\frac{d\ell}{d\theta} = \frac{3}{\theta} - \frac{2}{1-\theta} = 0

3(1θ)=2θ    θ=35=0.63(1-\theta) = 2\theta \implies \theta^* = \frac{3}{5} = 0.6

观察:MLE 的结果就是频率 3/53/5——对于离散分布,MLE 总是给出经验频率。


2. 信息熵(Entropy)

📐 信息熵的定义与推导

概念:信息熵衡量一个概率分布的内在不确定性——越均匀(越”不确定”),熵越高;越集中(越”确定”),熵越低。

直觉:天气预报说”明天 50% 下雨 50% 不下”→不确定性最大(1 bit);说”明天 100% 晴天”→不确定性为零(0 bit)。

定义

H(p)=c=1Cp(c)logp(c)H(p) = -\sum_{c=1}^C p(c) \log p(c)

其中 p(c)p(c) 是事件 cc 发生的概率,log\log 取自然对数(单位为 nats)或以 2 为底(单位为 bits)。

关键性质

  1. 非负性H(p)0H(p) \ge 0,当且仅当分布退化为 δ\delta 函数(某事件概率为 1)时取零
  2. 最大值:均匀分布 p(c)=1/Cp(c) = 1/C 时取最大值 H=logCH = \log C
  3. 不依赖模型H(p)H(p) 只取决于真实分布 pp,与模型预测无关

信息量(surprisal):单个事件 cc 的信息量为 logp(c)-\log p(c)。概率越小的事件,信息量越大(“意外”)。熵就是信息量的期望。

🔢 数值示例

分布 ppH(p)H(p) (nats)直觉
[1,0,0][1, 0, 0](one-hot)00完全确定
[0.5,0.5,0][0.5, 0.5, 0](二选一)0.6930.693相当于抛硬币
[1/3,1/3,1/3][1/3, 1/3, 1/3](均匀)1.0991.099最大不确定性
[0.9,0.05,0.05][0.9, 0.05, 0.05]0.3930.393基本确定但有噪声

观察:分类任务的 one-hot 标签熵为 0——这意味着标签本身没有不确定性,所有不确定性来自模型预测。


3. 交叉熵(Cross-Entropy)

📐 交叉熵的定义与推导

概念:交叉熵衡量”用分布 qq 编码分布 pp 事件所需的平均编码长度”。如果 qq 完美匹配 pp,编码长度等于 pp 自身的熵;如果不匹配,会多花额外的编码代价。

直觉:你手里有一本英文密码本(qq),但需要编码的消息是中文(pp)。密码本越不匹配,编码效率越低——交叉熵就度量了这种”不匹配的代价”。

定义

H(p,q)=c=1Cp(c)logq(c)H(p, q) = -\sum_{c=1}^C p(c) \log q(c)

第 1 步:当 pp 为 one-hot(分类任务中标签 yy 对应位为 1,其余为 0),化简为:

H(p,q)=logq(y)H(p, q) = -\log q(y)

即模型给正确类别分配的 log 概率的负值。

第 2 步:在整个数据集上取平均:

J(θ)=1Ni=1NH(p(i),qθ)=1Ni=1Nlogqθ(yixi)J(\theta) = \frac{1}{N}\sum_{i=1}^N H(p^{(i)}, q_\theta) = -\frac{1}{N}\sum_{i=1}^N \log q_\theta(y_i | x_i)

第 3 步:这恰好等于 NLL 的均值。因此:

最小化交叉熵=最小化 NLL=MLE\boxed{\text{最小化交叉熵} = \text{最小化 NLL} = \text{MLE}}

三者在分类任务中完全等价

🔢 数值示例:3 类分类

设定:正确标签 y=1y = 1(类别 1),one-hot p=[0,1,0]p = [0, 1, 0]

模型预测 qq交叉熵 H(p,q)=logq(1)H(p,q) = -\log q(1)评价
[0.1,0.8,0.1][0.1, 0.8, 0.1]0.2230.223预测很准
[0.3,0.5,0.2][0.3, 0.5, 0.2]0.6930.693尚可
[0.8,0.1,0.1][0.8, 0.1, 0.1]2.3032.303预测错误,损失很高
[0.01,0.01,0.98][0.01, 0.01, 0.98]4.6054.605严重错误

观察:当 q(y)0q(y) \to 0 时,HH \to \infty——模型对正确类别给出极低概率会受到极大惩罚。


4. KL 散度(Kullback-Leibler Divergence)

📐 KL 散度的定义与推导

概念:KL 散度衡量两个概率分布之间的”距离”——更准确地说,是用分布 qq 近似分布 pp多付出的额外编码代价(超出 pp 自身熵的部分)。

直觉:KL 散度回答的问题是”如果真实世界是 pp,但我误以为是 qq,我要多浪费多少编码长度?”

定义

DKL(pq)=c=1Cp(c)logp(c)q(c)=c=1Cp(c)logp(c)c=1Cp(c)logq(c)D_{KL}(p \| q) = \sum_{c=1}^C p(c) \log \frac{p(c)}{q(c)} = \sum_{c=1}^C p(c) \log p(c) - \sum_{c=1}^C p(c) \log q(c)

分解

DKL(pq)=H(p)+H(p,q)D_{KL}(p \| q) = -H(p) + H(p, q)

即:

H(p,q)=H(p)+DKL(pq)\boxed{H(p, q) = H(p) + D_{KL}(p \| q)}

关键性质

  1. 非负性(Gibbs 不等式):DKL(pq)0D_{KL}(p \| q) \ge 0,当且仅当 p=qp = q 时取零
  2. 不对称性DKL(pq)DKL(qp)D_{KL}(p \| q) \ne D_{KL}(q \| p)——因此 KL 散度不是度量(metric)
  3. 最小化交叉熵 = 最小化 KL 散度:因为 H(p)H(p) 是常数(标签固定),minθH(p,qθ)    minθDKL(pqθ)\min_\theta H(p, q_\theta) \iff \min_\theta D_{KL}(p \| q_\theta)

前向 KL vs 逆向 KL

  • DKL(pq)D_{KL}(p \| q)(前向):交叉熵训练用这个。qq 必须覆盖 pp 的所有模式,否则 p(c)>0p(c) > 0q(c)0q(c) \approx 0 的地方会产生 \infty。→ mode-covering
  • DKL(qp)D_{KL}(q \| p)(逆向):VAE 用这个。qq 倾向集中在 pp 的某个高概率区域。→ mode-seeking

🔢 数值示例

设定p=[0.5,0.3,0.2]p = [0.5, 0.3, 0.2]q=[0.6,0.3,0.1]q = [0.6, 0.3, 0.1]

DKL(pq)=0.5log0.50.6+0.3log0.30.3+0.2log0.20.1D_{KL}(p \| q) = 0.5\log\frac{0.5}{0.6} + 0.3\log\frac{0.3}{0.3} + 0.2\log\frac{0.2}{0.1}

=0.5×(0.182)+0.3×0+0.2×0.693=0.091+0+0.139=0.048= 0.5 \times (-0.182) + 0.3 \times 0 + 0.2 \times 0.693 = -0.091 + 0 + 0.139 = 0.048

验证分解

  • H(p)=(0.5log0.5+0.3log0.3+0.2log0.2)=1.030H(p) = -(0.5\log 0.5 + 0.3\log 0.3 + 0.2\log 0.2) = 1.030
  • H(p,q)=(0.5log0.6+0.3log0.3+0.2log0.1)=1.078H(p, q) = -(0.5\log 0.6 + 0.3\log 0.3 + 0.2\log 0.1) = 1.078
  • H(p,q)H(p)=1.0781.030=0.048=DKLH(p, q) - H(p) = 1.078 - 1.030 = 0.048 = D_{KL}

one-hot 特殊情况:若 p=[0,1,0]p = [0, 1, 0](one-hot),则 H(p)=0H(p) = 0,此时 H(p,q)=DKL(pq)H(p,q) = D_{KL}(p \| q)——交叉熵就是 KL 散度。


5. 均方误差(MSE)

📐 MSE 的定义与适用场景

概念:MSE 衡量预测值与真实值之间的平均平方距离,是回归任务的标准损失函数。

定义

MSE=1Ni=1N(yiy^i)2\text{MSE} = \frac{1}{N}\sum_{i=1}^N (y_i - \hat{y}_i)^2

MLE 视角:MSE 等价于假设数据服从高斯噪声 y=fθ(x)+ϵy = f_\theta(x) + \epsilonϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2) 时的 MLE。

推导

p(yx,θ)=12πσ2exp((yfθ(x))22σ2)p(y|x, \theta) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y - f_\theta(x))^2}{2\sigma^2}\right)

logp(yx,θ)=(yfθ(x))22σ212log(2πσ2)\log p(y|x,\theta) = -\frac{(y - f_\theta(x))^2}{2\sigma^2} - \frac{1}{2}\log(2\pi\sigma^2)

最大化对数似然     \iff 最小化 (yifθ(xi))2\sum (y_i - f_\theta(x_i))^2,即 MSE。

MSE 的统计假设:使用 MSE 隐含假设了高斯噪声同方差性σ\sigma 对所有样本相同)。

💡 为什么分类不用 MSE?

MSE 在分类任务上失败的两个原因

1. 梯度饱和问题

对 softmax 输出 y^c=softmax(zc)\hat{y}_c = \text{softmax}(z_c) 用 MSE,梯度为:

MSEzc=(y^cyc)y^c(1y^c)\frac{\partial \text{MSE}}{\partial z_c} = (\hat{y}_c - y_c) \cdot \hat{y}_c(1 - \hat{y}_c)

y^c\hat{y}_c 接近 0 或 1 时,y^c(1y^c)0\hat{y}_c(1-\hat{y}_c) \approx 0,梯度消失——即使预测完全错误,也几乎不更新

交叉熵的梯度为 y^cyc\hat{y}_c - y_c,没有饱和项,预测越错,梯度越大

2. 概率语义不匹配:MSE 假设高斯噪声,分类任务的标签是离散的 one-hot 向量,不符合高斯假设。交叉熵假设多项式分布(categorical distribution),与 softmax 自然配对。


6. 二元交叉熵(Binary Cross-Entropy)

📐 BCE 公式与梯度

当只有两个类别(正/负),用一个标量 y^=σ(z)(0,1)\hat{y} = \sigma(z) \in (0,1) 表示正类概率:

BCE(y,y^)=[ylogy^+(1y)log(1y^)]\text{BCE}(y, \hat{y}) = -\left[y\log\hat{y} + (1-y)\log(1-\hat{y})\right]

与多类交叉熵的关系:令 q=[y^,1y^]q = [\hat{y}, 1-\hat{y}]p=[y,1y]p = [y, 1-y],代入 H(p,q)=plogqH(p,q) = -\sum p\log q 即得 BCE。

对 logit zz 求梯度(其中 y^=σ(z)\hat{y} = \sigma(z)):

BCEz=σ(z)y=y^y\frac{\partial\text{BCE}}{\partial z} = \sigma(z) - y = \hat{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)+ϵCp_{smooth}(c) = (1 - \epsilon) \cdot p_{true}(c) + \frac{\epsilon}{C}

ϵ\epsilon 通常取 0.1,CC 是类别数。

效果

  • 正确类别目标:11ϵ+ϵ/C1 \to 1 - \epsilon + \epsilon/C(如 0.9+0.01=0.910.9 + 0.01 = 0.91
  • 错误类别目标:0ϵ/C0 \to \epsilon/C(如 0.010.01

信息论解释H(psmooth)>0H(p_{smooth}) > 0,模型不再被迫将 logit 推向 ±\pm\infty,产生更校准(calibrated)的概率估计。

在 Transformer 中的地位:“Attention Is All You Need” 原文即使用了 ϵ=0.1\epsilon = 0.1 的 label smoothing。


完整关系图

🔗 概念间的数学关系

核心等式

H(p,q)=H(p)+DKL(pq)\boxed{H(p, q) = H(p) + D_{KL}(p \| q)}

概念公式依赖什么用途
信息熵 H(p)H(p)plogp-\sum p\log p只依赖真实分布度量内在不确定性
交叉熵 H(p,q)H(p,q)plogq-\sum p\log q真实 + 模型分类损失函数
KL 散度 DKLD_{KL}plog(p/q)\sum p\log(p/q)真实 + 模型度量分布差异
NLLlogq(y)-\log q(y)one-hot 下交叉熵特例等价于交叉熵
MSE1N(yy^)2\frac{1}{N}\sum(y-\hat{y})^2高斯假设下 MLE回归损失函数
BCE[ylogy^+(1y)log(1y^)]-[y\log\hat{y}+(1-y)\log(1-\hat{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 改变的是参数化方式而非损失函数

⚠️ 常见误区

  1. 误区:交叉熵 = 信息熵 → 正确H(p)H(p) 只依赖 ppH(p,q)H(p,q) 还依赖模型 qq;差值是 KL 散度
  2. 误区:多标签用 softmax + cross-entropy → 正确:多标签应用 sigmoid + BCE;softmax 强制概率归一不适合独立标签
  3. 误区:KL 散度是对称的”距离” → 正确DKL(pq)DKL(qp)D_{KL}(p\|q) \ne D_{KL}(q\|p);交叉熵训练用前向 KL(mode-covering),VAE 用逆向 KL(mode-seeking)
  4. 误区:MSE 也能用于分类 → 正确:理论上能用但梯度有 y^(1y^)\hat{y}(1-\hat{y}) 饱和项,实践中收敛极慢且不稳定
  5. 误区log\log 底数是 10 → 正确:ML 中统一用 ln\ln(自然对数),单位是 nats;信息论教材常用 log2\log_2(bits),只差常数倍