一步一步建立直观
先预测,再点“演示本步”核对右图。每一步都重设到指定情形,随后可以自由修改参数。
01先固定数据来源,再评价一种模型
真实分布 决定结果出现的频率,模型分布 决定各结果被赋予的理想码长。交叉熵因此是按 求平均、对 取负对数。右图让两者分别可调,避免把“模型认为罕见”和“现实中确实罕见”混为一谈。
02错把常见结果当罕见,会付出更多代价
保持真实概率不变,拖动模型点偏离它。某些常出现的结果被分配到更低概率,负对数损失随之变大。蓝线高出熵基线的部分是 KL 散度;在正概率条件下,它非负,模型等于真实分布时为零。这是平均陈述,不保证每个单独样本损失都最小。
03更低的最优损失不总说明模型更强
把真实分布改为偏斜分布,并让模型准确匹配。最优交叉熵随真实熵一起下降,因为数据更容易预测,而非模型结构发生了进步。比较不同任务的损失时,应考虑数据分布、单位与分词方式。窗口只验证二元分布关系,不直接评价大型语言模型的能力。
6.2.1 真实出现频率与编码假设可以不同¶
假设真实来源是公平二元分布,但编码或预测模型认为第一类占四分之三。模型因此给第一类较短的理想长度,给第二类较长的长度;实际使用频率仍由真实分布决定。平均时用真实概率加权模型码长,得到交叉熵。
这解释了公式里为什么同时出现 和 : 决定现实中哪种事件出现多少次, 决定每次出现时付多大代价。若把两个位置交换,就换了问题,不能期待相同答案。
6.2.2 把总代价分成不可避免与模型失配¶
在每项里加减 ,交叉熵分解为真实熵加 KL 散度。前者是来源自身的不确定性,后者衡量采用模型分布多出的平均对数代价。在两分布归一化且严格为正时,用 可证明额外代价非负。
在交互实验中固定真实概率 ,只移动模型概率 。预测交叉熵在哪里最低,再观察 时曲线达到真实熵。把 推近零或一,会看到模型对实际可能事件过度否定时,代价迅速增加。
分类训练中,单样本真实标签只在正确类别上取一,所以损失变成 。这让“提高正确类概率”与“减少编码代价”连接起来。但训练数据上的低损失不自动保证新数据上的校准或可靠性。数学分解、统计估计与模型泛化仍需分别论证。
定义 6.2.1 有限分布的交叉熵与 KL 散度
对正概率分布 ,定义 ,,。
命题 6.2.1 模型失配增加平均编码代价
有 ,且 ;在此正概率情形,等号当且仅当 。
证明 · 展开纸笔推导
把 拆成两个对数并求和,立即得到分解。为证明非负,用 ,代入 ,得到 。
求和后右侧为零,再除以正数 即得结论。对数不等式仅在 时取等,因此所有正权重项同时取等恰好要求 。含零概率时需另外约定边界与无穷代价。
□
数学表述 6.2.1¶
数据真实分布是 ,编码或预测使用的模型是 。模型给真实常见事件过小的概率,就会在这些事件上支付更长的编码代价。
在 时, 若 均归一化,则 。用 ,对 逐项乘以 并求和,即可证明该不等式。
例 6.2.1 把概念用于具体计算
真实分布为 ,模型为 。以位为单位,真实熵为 ,交叉熵为 ,多付约 位。
练习 6.2.1¶
正确标签是类别 时,单样本交叉熵为何为 ?
展开解答与检查
因为 one-hot 标签使其余求和系数均为零。 时损失为零。
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