以下内容由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 | 完全错误 |
关键特性:
- p 接近 1 → 损失接近 0(奖励正确预测)
- p 接近 0 → 损失趋向无穷(严厉惩罚错误)
- 非线性增长:从 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 | 真实标签 y = 1, 模型预测 p = 0.9 |
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 | P(x=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|θ)
三步曲:
- 似然函数:
L(θ) = ∏ᵢ P(xᵢ|θ) - 对数似然:
ℓ(θ) = ∑ᵢ log P(xᵢ|θ) - 最大化:
θ̂ = argmax ∑ᵢ log P(xᵢ|θ)
核心思想:
找一个参数 θ,使得“已发生的数据”在该模型下出现的概率最大。
4.6 从 MLE 到机器学习
监督学习中:
- 数据:(x₁,y₁), (x₂,y₂), …, (xₙ,yₙ)
- 模型:P_θ(y|x)
MLE 目标:
从最大化到最小化:
深度学习框架做最小化(梯度下降):
右边就是负对数似然(NLL)
每个样本的损失:
这正是交叉熵损失!
五、MLE = NLL = 交叉熵
5.1 完整的等价链
1 | 最大似然估计(MLE) |
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 | L(θ) = 0.7 × 0.8 × 0.5 = 0.28 |
方法2:NLL(最小化负对数似然)
1 | NLL = -log L(θ) = 1.273 |
方法3:交叉熵
1 | L₁ = -log(0.7) ≈ 0.357 |
三种方法,完全相同的结果!
六、为什么这样设计?
6.1 理论基础:来自统计学
分类模型在建模条件概率 P(y|x)
统计学告诉我们:
- 最自然的参数估计方法是 MLE
- MLE 具有一致性、渐近正态性等优良性质
- MLE 等价于最小化交叉熵
结论:
交叉熵不是人为设计的,而是从统计学基本原理推导出来的
6.2 工程优势:梯度简洁
Softmax + Cross Entropy 的梯度:
特点:
- 形式极简:就是预测值和真实值的差
- 没有复杂的链式法则
- 数值稳定:不会梯度消失或爆炸
- 计算高效
这就是为什么深度学习框架直接提供 CrossEntropyLoss。
6.3 信息论视角:最小化分布差异
交叉熵可以分解为:
其中:
- H(P):真实分布的熵(常数)
- KL(P‖Q):KL散度(分布差异)
因此:最小化交叉熵 ⟺ 最小化 KL 散度 ⟺ 让模型分布逼近真实分布
七、总结
7.1 核心理解
交叉熵损失 = -log(正确答案的概率)
- = 负对数似然
- = 最大似然估计的优化目标
7.2 从三个角度理解
直觉:
“你给正确答案分配的概率有多低,我就罚你多狠”
统计学:
“让已发生的数据在当前模型下概率最大”
信息论:
“用模型的分布去理解真实分布所付出的代价”
7.3 关键等价关系
7.4 理解路径
1 | 1. 问题:如何评价模型预测? |
7.5 最小记忆单元
如果只记一件事:
交叉熵 = -log(正确类的概率)
它来自最大似然估计:让模型给真实答案的概率最大
八、结语
交叉熵损失看似简单的 **-log(p)**,实际上:
- 来自统计学:最大似然估计的自然结果
- 来自信息论:分布差异的度量
- 工程优良:梯度简洁、数值稳定
理解交叉熵和最大似然的联系,你就真正理解了:
- 为什么这样设计损失函数
- 为什么深度学习能够工作
- 如何从原理出发思考问题