交叉熵损失与最大似然估计:完全理解指南

以下内容由AI辅助生成

一、从最基本的问题开始

1.1 模型如何表达预测?

假设你在训练一个图像分类模型:

任务:判断这张图是「猫」还是「狗」?

模型不会直接给出“猫”或“狗”这样的硬答案,而是输出概率分布

  • “我认为是猫的概率是 0.8,是狗的概率是 0.2”

👉 核心理解:模型输出的是“置信度(概率)”,而不是确定的答案。

1.2 如何评价模型预测的好坏?

假设真实答案是「猫」,我们看不同预测的质量:

模型给猫的概率 p 评价 期望的损失
0.99 非常准确 应该很小
0.8 比较好 适中
0.51 勉强对 较大
0.1 完全错误 应该很大

我们需要设计一个损失函数,满足:

  • 正确答案的概率越大 → 损失越小
  • 正确答案的概率越小 → 损失越大

1.3 为什么选择对数函数?

观察函数 loss = -log(p) 的行为:

正确类概率 p -log(p) 含义
0.99 0.01 几乎完美
0.9 0.10 很好
0.5 0.69 随机猜测水平
0.1 2.30 很差
0.01 4.60 完全错误

关键特性

  1. p 接近 1 → 损失接近 0(奖励正确预测)
  2. p 接近 0 → 损失趋向无穷(严厉惩罚错误)
  3. 非线性增长:从 p=0.9 到 p=0.1,损失增加了 20 倍以上

为什么对数函数如此合适?这来自最大似然估计的数学原理(第四章详解)。

1.4 交叉熵的最简形式

对于单次预测:

  • 真实答案是类别 A
  • 模型给 A 的概率是 p

损失函数

这就是交叉熵的核心。


二、为什么叫“交叉熵”?

2.1 先理解“熵”

熵(Entropy)是信息论中的核心概念,衡量不确定性

两个例子

例子 1:完全确定

  • 明天 100% 会下雨
  • 熵 = 0(无不确定性)

例子 2:完全随机

  • 抛硬币,正反各 50%
  • 熵最大(最大不确定性)

数学定义

对于概率分布 P:

含义:平均每次需要多少信息量(比特)来描述发生的事情。

2.2 什么是“交叉”?

现实中经常出现这种情况:

  • 真实世界:按分布 P 在运行
  • 你的认知:却认为它是分布 Q

当你用错误的分布 Q 去理解真实分布 P 时,会产生额外的“信息代价”。

交叉熵的定义

2.3 为什么叫“交叉”?

看公式的结构:

公式部分 来源 含义
P(x) 真实分布 P 事件实际发生的频率(权重)
log Q(x) 模型分布 Q 用模型的方式编码

“交叉”的含义:两个不同分布的交叉使用

  • 权重来自 P
  • 编码来自 Q

对比

  • **熵 H(P)**:用自己编码自己
  • **交叉熵 H(P,Q)**:用别人编码自己

2.4 在机器学习中的应用

真实标签(one-hot):P = [0, 0, 1, 0] — 第3类是正确答案

模型输出(Softmax):Q = [0.1, 0.2, 0.6, 0.1]

计算交叉熵

2.5 为什么简化成了 -log(p)?

在分类任务中,真实标签是 one-hot:只有正确类是1,其他是0

代入交叉熵公式,求和后只剩下正确类别那一项

这就是为什么实际代码中

1
loss = -log(Q[y_true])

三、二分类和多分类的具体形式

3.1 二分类交叉熵(Binary Cross Entropy)

设定

  • 模型输出:p = P(y=1|x),通过 Sigmoid 得到
  • 真实标签:y ∈ {0, 1}

损失函数

理解:这是分段函数的简洁写法

真实标签 y 实际计算
y = 1 -log(p)
y = 0 -log(1-p)

具体例子

1
2
3
4
5
真实标签 y = 1, 模型预测 p = 0.9
损失 = -log(0.9) ≈ 0.105

真实标签 y = 1, 模型预测 p = 0.1
损失 = -log(0.1) ≈ 2.303

3.2 多分类交叉熵(Categorical Cross Entropy)

完整流程

步骤1:模型输出 logits

1
z = [2.0, 1.0, 0.1]

步骤2:Softmax 归一化

计算结果:p₁ ≈ 0.659, p₂ ≈ 0.242, p₃ ≈ 0.099

步骤3:计算交叉熵

真实标签 y = [0, 1, 0](第2类是正确答案)

简化形式(利用 one-hot):


四、从最大似然估计理解交叉熵

4.1 一个侦探问题

你发现了一枚硬币和抛掷记录:

1
结果:正、正、反、正、正

任务:判断硬币正面的概率是多少?

思考过程

假设的概率 θ 出现这串结果的概率
θ = 0.5 0.5⁴ × 0.5¹ = 0.03125
θ = 0.8 0.8⁴ × 0.2¹ ≈ 0.0819
θ = 0.9 0.9⁴ × 0.1¹ ≈ 0.0656

结论:θ = 0.8 最能解释观测数据!

这就是最大似然估计(MLE)的核心思想。

4.2 概率 vs 似然:关键区别

概率(Probability)

  • 已知:参数 θ
  • :数据出现的概率
  • 方向:从原因推结果
1
P(data|θ) = “给定硬币特性,某个结果出现的概率”

似然(Likelihood)

  • 已知:数据(已经发生了)
  • :哪个参数最可能
  • 方向:从结果推原因
1
L(θ|data) = “给定观测结果,哪个参数最合理”

数学关系L(θ|data) = P(data|θ)

数值相同,但含义完全相反。

4.3 硬币问题的形式化

Step 1: 建立概率模型

1
2
P(x=1|θ) = θ      # 正面
P(x=0|θ) = 1-θ # 反面

Step 2: 计算联合概率

观测:正、正、反、正、正

假设独立:

Step 3: 似然函数

问题:θ 取什么值时,L(θ) 最大?

4.4 为什么要取对数?

这是连接 MLE 和交叉熵的关键步骤

原因1:连乘变连加

对于 N 个样本:L(θ) = ∏ P(xᵢ|θ)

当 N 很大时:

  • 数值下溢:太多小于1的数相乘,结果趋近0
  • 计算困难:浮点数精度问题

取对数后:

连乘变连加,数值稳定!

原因2:不改变最优解

log 是严格单调递增函数:

原因3:求导更简单

  • 原函数:L(θ) = θ⁴(1-θ)
  • 对数函数:ℓ(θ) = 4log θ + log(1-θ)

求导:dℓ/dθ = 4/θ - 1/(1-θ) = 0

解得:θ = 0.8

4.5 MLE 的通用形式

给定

  • 数据:x₁, x₂, …, xₙ
  • 参数:θ
  • 模型:P(x|θ)

三步曲

  1. 似然函数L(θ) = ∏ᵢ P(xᵢ|θ)
  2. 对数似然ℓ(θ) = ∑ᵢ log P(xᵢ|θ)
  3. 最大化θ̂ = argmax ∑ᵢ log P(xᵢ|θ)

核心思想

找一个参数 θ,使得“已发生的数据”在该模型下出现的概率最大。

4.6 从 MLE 到机器学习

监督学习中

  • 数据:(x₁,y₁), (x₂,y₂), …, (xₙ,yₙ)
  • 模型:P_θ(y|x)

MLE 目标

从最大化到最小化

深度学习框架做最小化(梯度下降):

右边就是负对数似然(NLL)

每个样本的损失:

这正是交叉熵损失!


五、MLE = NLL = 交叉熵

5.1 完整的等价链

1
2
3
4
5
6
7
最大似然估计(MLE)
↓ 取对数
对数似然(Log-Likelihood)
↓ 变号(max → min)
负对数似然(NLL)
↓ 用分布语言重写
交叉熵(Cross Entropy)

5.2 逐步推导

Step 1: MLE 原始形式

Step 2: 取对数

这是对数似然(Log-Likelihood)

Step 3: 变号

这是负对数似然(NLL)

Step 4: 用分布语言重写

真实分布 P(one-hot):P(y|x) = 1 当 y=y_true,否则 = 0

模型分布:Q_θ(y|x) = P_θ(y|x)

交叉熵定义:

代入 one-hot:

与 NLL 完全一致!

5.3 核心等价关系

因此:

5.4 为什么有不同的名字?

视角 术语 来源 强调什么
统计学 最大似然/对数似然 统计学 参数估计
信息论 交叉熵 信息论 分布差异
工程 NLL/CrossEntropyLoss 深度学习 损失函数

本质相同,只是不同学科的不同表述。

5.5 数值例子:三者的一致性

3分类问题,3个样本

数据

  • 样本1: y₁=0, 预测 P_θ(0|x₁) = 0.7
  • 样本2: y₂=1, 预测 P_θ(1|x₂) = 0.8
  • 样本3: y₃=2, 预测 P_θ(2|x₃) = 0.5

方法1:MLE(最大化似然)

1
2
L(θ) = 0.7 × 0.8 × 0.5 = 0.28
log L(θ) = log(0.7) + log(0.8) + log(0.5) = -1.273

方法2:NLL(最小化负对数似然)

1
NLL = -log L(θ) = 1.273

方法3:交叉熵

1
2
3
4
L₁ = -log(0.7) ≈ 0.357
L₂ = -log(0.8) ≈ 0.223
L₃ = -log(0.5) ≈ 0.693
总和 = 1.273

三种方法,完全相同的结果!


六、为什么这样设计?

6.1 理论基础:来自统计学

分类模型在建模条件概率 P(y|x)

统计学告诉我们

  • 最自然的参数估计方法是 MLE
  • MLE 具有一致性、渐近正态性等优良性质
  • MLE 等价于最小化交叉熵

结论

交叉熵不是人为设计的,而是从统计学基本原理推导出来的

6.2 工程优势:梯度简洁

Softmax + Cross Entropy 的梯度:

特点

  1. 形式极简:就是预测值和真实值的差
  2. 没有复杂的链式法则
  3. 数值稳定:不会梯度消失或爆炸
  4. 计算高效

这就是为什么深度学习框架直接提供 CrossEntropyLoss

6.3 信息论视角:最小化分布差异

交叉熵可以分解为:

其中:

  • H(P):真实分布的熵(常数)
  • KL(P‖Q):KL散度(分布差异)

因此:最小化交叉熵 ⟺ 最小化 KL 散度 ⟺ 让模型分布逼近真实分布


七、总结

7.1 核心理解

交叉熵损失 = -log(正确答案的概率)

  • = 负对数似然
  • = 最大似然估计的优化目标

7.2 从三个角度理解

直觉

“你给正确答案分配的概率有多低,我就罚你多狠”

统计学

“让已发生的数据在当前模型下概率最大”

信息论

“用模型的分布去理解真实分布所付出的代价”

7.3 关键等价关系

7.4 理解路径

1
2
3
4
5
6
7
8
9
10
11
1. 问题:如何评价模型预测?

2. 直觉:正确答案概率越高越好

3. 函数:-log(p) 提供合适的惩罚

4. 统计学:这是最大似然估计

5. 信息论:这也是交叉熵

6. 等价:MLE = Log-Likelihood = NLL = Cross Entropy

7.5 最小记忆单元

如果只记一件事:

交叉熵 = -log(正确类的概率)

它来自最大似然估计:让模型给真实答案的概率最大


八、结语

交叉熵损失看似简单的 **-log(p)**,实际上:

  • 来自统计学:最大似然估计的自然结果
  • 来自信息论:分布差异的度量
  • 工程优良:梯度简洁、数值稳定

理解交叉熵和最大似然的联系,你就真正理解了:

  • 为什么这样设计损失函数
  • 为什么深度学习能够工作
  • 如何从原理出发思考问题