交叉熵:对账日志

本节要解决什么问题

对账是后端工程师几乎每天都会打交道的事:支付系统需要核对渠道返回的金额和本地记录是否一致,库存系统需要比对销售记录和实际出库量。如果一切匹配,账平了,损失为零;如果不匹配,差异越大,账目问题越严重。

交叉熵(Cross Entropy)损失做的事情本质上是一样的:对账。它把模型的"预测分布"和真实世界的"标准答案"放在一起比较,衡量两者之间的差距有多大。差距越大,损失越高,模型被"罚"得越狠。

但交叉熵不只是一种"随便设计的对账方法"——它背后有严格的统计学支撑:最大似然估计(Maximum Likelihood Estimation)。这个联系让它成为分类任务中几乎唯一的主流选择。

这个工具/机制是怎么工作的

从对账出发:-log(p) 的直觉

假设模型预测"这张图是猫"的概率是 0.8,真实答案是"确实是猫"。这个预测好不好?

损失函数需要满足:正确答案的概率越高,损失越低。用对数函数正好满足这个特性:

正确类概率 p -log(p) 含义
0.99 0.01 几乎完美
0.8 0.22 比较好
0.5 0.69 随机猜测
0.1 2.30 完全错误

-log(p) 的关键特性:

  • p = 1 时,损失为 0(完全正确,不罚)
  • p → 0 时,损失 → 无穷大(错得离谱,严厉惩罚)
  • 增长是非线性的:从 p=0.9 到 p=0.1,损失增加了 20 多倍

最大似然估计:为什么 -log(p) 是"对"的

你有一枚硬币,抛了 5 次得到:正、正、正、正、反。你估计正面朝上的概率是多少?

直觉告诉你:4/5 = 0.8。最大似然估计(MLE)就是把这个直觉形式化的方法。

似然(Likelihood):在某个参数假设下,观察到当前数据的概率。

硬币正面概率 = θ 时,5 次实验得到 4 正 1 反的概率:
L(θ) = θ⁴ × (1-θ)

MLE 的目标:找到让 L(θ) 最大的 θ 值

对 L(θ) = θ^4(1-θ) 求导并令为零,解得 θ = 0.8。

这和你凭直觉得到的结果完全一致。

从硬币推广到神经网络

在神经网络分类中:

  • 硬币的 θ:模型的参数 θ
  • 抛硬币的结果:训练样本的真实标签
  • 似然函数:模型参数产生这批训练数据的概率

MLE 要求:选一组参数,使得"真实标签在当前模型下出现的联合概率"最大

神经网络通过梯度下降做最小化,所以把最大化似然取个负对数:

Li = −log Pθ(y_i | x_i) 这就是交叉熵的核心:对每个样本,损失 = -log(模型给正确答案分配的概率)。

完整流程(以三分类为例)

1. 模型输出 logits: [2.0, 1.0, 0.1]
2. Softmax 归一化:    [0.66, 0.24, 0.10]  ← 模型认为第1类概率最高
3. 真实标签:          [0, 1, 0]           ← 实际第2类才是正确答案
4. 交叉熵损失:         -log(0.24) ≈ 1.43   ← 预测错误,损失较高

真实标签是 one-hot(只有正确类是 1,其他都是 0),所以交叉熵公式 L = -Σ y_i log(p_i) 中,只剩下正确类那一项。

形式化

交叉熵损失函数:

L = −Σ(i=1, K) y_i · log(p_i)

其中 y_i 是 one-hot 真实标签,p_i 是 Softmax 输出的概率分布。

对于 one-hot 标签,简化为:

L = −log(p_true) 与最大似然估计的关系:最小化交叉熵等价于最大化对数似然,等价于最大似然估计。

本节小结

交叉熵损失的本质是"对账":衡量模型给正确答案分配的概率有多低。在统计上,它等价于最大似然估计——让模型参数在训练数据上的似然最大。这不是人为设计,而是一个统计学原理的自然推论。

延伸阅读

  • Softmax — Softmax 将 logits 转换成概率分布,交叉熵对这个分布进行评估,两者组合是分类任务的标配
  • 反向传播 — 交叉熵 + Softmax 的组合有一个极为优雅的特性:梯度恰好是 p_i - y_i(预测概率减去真实概率),是反向传播中梯度计算简洁的根本原因

results matching ""

    No results matching ""