从直觉到证明3Blue1Brown 中文导学教材
6.2 交叉熵:错误概率模型的编码代价

6.2 交叉熵:错误概率模型的编码代价

固定真实分布,只改变模型分布,观察多出的平均编码代价。

例题练习Lean 对照原课

一步一步建立直观

先预测,再点“演示本步”核对右图。每一步都重设到指定情形,随后可以自由修改参数。

01先固定数据来源,再评价一种模型

真实分布 pp 决定结果出现的频率,模型分布 qq 决定各结果被赋予的理想码长。交叉熵因此是按 pp 求平均、对 qq 取负对数。右图让两者分别可调,避免把“模型认为罕见”和“现实中确实罕见”混为一谈。

02错把常见结果当罕见,会付出更多代价

保持真实概率不变,拖动模型点偏离它。某些常出现的结果被分配到更低概率,负对数损失随之变大。蓝线高出熵基线的部分是 KL 散度;在正概率条件下,它非负,模型等于真实分布时为零。这是平均陈述,不保证每个单独样本损失都最小。

03更低的最优损失不总说明模型更强

把真实分布改为偏斜分布,并让模型准确匹配。最优交叉熵随真实熵一起下降,因为数据更容易预测,而非模型结构发生了进步。比较不同任务的损失时,应考虑数据分布、单位与分词方式。窗口只验证二元分布关系,不直接评价大型语言模型的能力。

6.2.1 真实出现频率与编码假设可以不同

假设真实来源是公平二元分布,但编码或预测模型认为第一类占四分之三。模型因此给第一类较短的理想长度,给第二类较长的长度;实际使用频率仍由真实分布决定。平均时用真实概率加权模型码长,得到交叉熵。

这解释了公式里为什么同时出现 pp 和 qq:pp 决定现实中哪种事件出现多少次,qq 决定每次出现时付多大代价。若把两个位置交换,就换了问题,不能期待相同答案。

6.2.2 把总代价分成不可避免与模型失配

在每项里加减 lnpi\ln p_i,交叉熵分解为真实熵加 KL 散度。前者是来源自身的不确定性,后者衡量采用模型分布多出的平均对数代价。在两分布归一化且严格为正时,用 lnu≤u−1\ln u\le u-1 可证明额外代价非负。

在交互实验中固定真实概率 pp,只移动模型概率 qq。预测交叉熵在哪里最低,再观察 q=pq=p 时曲线达到真实熵。把 qq 推近零或一,会看到模型对实际可能事件过度否定时,代价迅速增加。

分类训练中,单样本真实标签只在正确类别上取一,所以损失变成 −lnqj-\ln q_j。这让“提高正确类概率”与“减少编码代价”连接起来。但训练数据上的低损失不自动保证新数据上的校准或可靠性。数学分解、统计估计与模型泛化仍需分别论证。

定义 6.2.1 有限分布的交叉熵与 KL 散度

对正概率分布 p,qp,q,定义 H(p,q)=−∑ipilog2qiH(p,q)=-\sum_i p_i\log_2q_i,H(p)=−∑ipilog2piH(p)=-\sum_i p_i\log_2p_i,D(p‖q)=∑ipilog2(pi/qi)D(p\Vert q)=\sum_i p_i\log_2(p_i/q_i)。

命题 6.2.1 模型失配增加平均编码代价

有 H(p,q)=H(p)+D(p‖q)H(p,q)=H(p)+D(p\Vert q),且 D(p‖q)≥0D(p\Vert q)\ge0;在此正概率情形,等号当且仅当 p=qp=q。

证明 · 展开纸笔推导

把 log2(pi/qi)\log_2(p_i/q_i) 拆成两个对数并求和,立即得到分解。为证明非负,用 lnu≤u−1\ln u\le u-1,代入 u=qi/piu=q_i/p_i,得到 piln(pi/qi)≥pi−qip_i\ln(p_i/q_i)\ge p_i-q_i。

求和后右侧为零,再除以正数 ln2\ln2 即得结论。对数不等式仅在 u=1u=1 时取等,因此所有正权重项同时取等恰好要求 pi=qip_i=q_i。含零概率时需另外约定边界与无穷代价。

□

数学表述 6.2.1

数据真实分布是 pp,编码或预测使用的模型是 qq。模型给真实常见事件过小的概率,就会在这些事件上支付更长的编码代价。

在 pi,qi>0p_i,q_i>0 时, H(p,q)=−∑ipilnqi,DKL(p∥q)=∑ipilnpiqi,H(p,q)=H(p)+DKL(p∥q).\begin{aligned} H(p,q)&=-\sum_i p_i\ln q_i,\\ D_{\mathrm{KL}}(p\|q)&=\sum_i p_i\ln\frac{p_i}{q_i},\\ H(p,q)&=H(p)+D_{\mathrm{KL}}(p\|q). \end{aligned} 若 p,qp,q 均归一化,则 DKL≥0D_{\mathrm{KL}}\ge0。用 lnu≤u−1\ln u\le u-1,对 u=qi/piu=q_i/p_i 逐项乘以 pip_i 并求和,即可证明该不等式。

例 6.2.1 把概念用于具体计算

真实分布为 (1/2,1/2)(1/2,1/2),模型为 (3/4,1/4)(3/4,1/4)。以位为单位,真实熵为 11,交叉熵为 −12log2(3/4)−12log2(1/4)≈1.20752-\tfrac12\log_2(3/4)-\tfrac12\log_2(1/4)\approx1.20752,多付约 0.207520.20752 位。

练习 6.2.1

正确标签是类别 jj 时,单样本交叉熵为何为 −lnqj-\ln q_j?

展开解答与检查

因为 one-hot 标签使其余求和系数均为零。qj=1q_j=1 时损失为零。

Lean 对照 6.2.1 命题、证明与适用边界

完整验证严格正有限向量的熵、交叉熵与 KL 代数分解;此分解本身不要求归一化。同文件的 kl_nonnegative 进一步在两分布归一化时证明 KL 非负;零概率与无穷代价情形不在这两个定理的覆盖范围内。

Information.cross_entropy_decomposition

theorem cross_entropy_decomposition {n : ℕ} (p q : Fin n → ℝ)
    (hp : ∀ i, 0 < p i) (hq : ∀ i, 0 < q i) :
    crossEntropy p q = entropy p + klDivergence p q := by
  unfold crossEntropy entropy klDivergence
  rw [← Finset.sum_add_distrib]
  apply Finset.sum_congr rfl
  intro i _
  rw [Real.log_div (ne_of_gt (hp i)) (ne_of_gt (hq i))]
  ring

查看完整定义与上下文 ↗ · 全书证明范围

原课对照 观课问题、视频与图示

固定真实分布,只改变模型分布,观察多出的平均编码代价。

官方课程与图示 ↗ · 原视频 ↗

点击后连接 YouTube;播放器不可用时可通过上方原链接观看。