all_lessons/数学的逻辑/33第 34 课 / 共 44 课

第九部分 · 概率、统计与信息

信息论:熵、交叉熵与 KL 散度

上一课,贝叶斯告诉我们怎么用证据更新信念;可当我们真去训练一个分类器时,一个最朴素的问题冒了出来:到底该最小化什么?这一课,我们要从"度量惊讶"这件事出发,看着分类用的「交叉熵损失」从最大似然里自己长出来——它不是谁拍脑袋发明的,而是被逼出来的。

线性回顾
上一课:贝叶斯推断让我们用先验加数据,得到一个完整的后验分布,把"我对参数有多确定"也表达了出来;模型的输出,往往就是一个概率分布——"这张图是猫的概率 0.7、是狗的概率 0.3"。
留下的问题:模型吐出的是一个预测分布 q,真实答案是另一个分布 p(标准答案"是猫"就是 p = (猫 1, 狗 0))。要训练它,我们得先有一把尺,量出 qp 有多远——可"两个分布的距离"该怎么定义?为什么偏偏用对数?
本课新增:信息论——(一个分布"有多不确定/多让人惊讶")、交叉熵(用错误的分布去编码真分布要付出的代价)、KL 散度(两个分布的差距,永远 ≥ 0)。我们会证明:在最大似然下,交叉熵损失是被自然逼出来的
本课路线
(1) 从"一条消息值多少"出发:香农如何用对数定义信息量。(2) H(p):一个分布的平均惊讶,即它内在的不确定度。(3) 交叉熵 H(p,q):拿错分布 q 去描述真分布 p 的代价。(4) KL 散度 KL(p‖q) = H(p,q) − H(p):纯粹的"多付出的代价",且 ≥ 0,等于 0 当且仅当 p = q。(5) 关键合体:最小化交叉熵 = 最大似然 = 最小化 KL——分类损失的来历。(6) 它在语言模型与扩散里无处不在。

一条消息值多少:信息 = 惊讶

1948 年,香农(Claude Shannon)问了一个看似哲学、实则可量化的问题:"信息"能不能用一个数来衡量?他的切入点出奇地朴素——一条消息带来的信息量,取决于它有多出乎意料

"明天太阳照常升起"几乎必然发生,听了等于没听,信息量近乎零;"明天日全食"很罕见,一旦发生信息量巨大。越不可能的事,发生时越令人惊讶,带来的信息越多。于是信息量应该是概率的某种递减函数:P 越小,信息越大。

那为什么是对数?香农要求信息量满足一条铁律:两件独立的事一起发生,信息量应当相加。"今天下雨"和"明天下雨"如果独立,告诉我这两件事的总信息,该等于分别告诉我的信息之和。可两件独立事件同时发生的概率是相乘的(P(A 且 B) = P(A)·P(B))。要让"概率相乘"变成"信息相加",唯一的桥就是对数——因为 log(a·b) = log a + log b。于是一条概率为 p 的消息,它的信息量(也叫"惊讶度")被定义为:

信息量 = −log p (读作"负 log p")

负号是因为 p ≤ 1log p ≤ 0,取负后变正;p 越小,−log p 越大,惊讶越多——和直觉完全吻合。底数取 2 时单位叫"比特"(bit),取自然底 e 时叫"奈特"(nat);机器学习里几乎都用自然对数,本课也用 e。一件必然发生(p = 1)的事,信息量 −log 1 = 0,毫不惊讶——一切都对上了。

熵:一个分布平均有多让人惊讶

单条消息的惊讶有了,那整个分布呢?一枚均匀硬币、一颗骰子、一个"99% 是猫"的预测——它们各自的"不确定程度"如何比较?答案是把每个结果的惊讶度 −log p(x),按它发生的概率 p(x) 加权平均。这个平均惊讶,就是分布的,记作 H(p)(H 取自 entropy):

H(p) = −∑ p(x)·log p(x) (读作"对所有结果 x,把 p(x) 乘以 −log p(x) 全加起来")

这里 (西格玛,求和号)对所有可能结果 x 求和,p(x) 是结果 x 的概率。注意熵正是第 10 课"期望"的应用——它就是惊讶度这个随机量的期望值 𝔼[−log p(x)](读作"−log p 的期望")。两个直觉要抓住:

所以熵就是一把刻在分布自己身上的尺:它的内在不确定度、它"最少需要多少信息才能说清楚一个结果"。它只跟 p 有关,是分布的固有属性。

交叉熵:用错的分布去描述真分布

现在回到训练分类器的现场。真相由 p 描述(标准答案),而我们的模型给出预测 q。一个绝妙的视角是把信息论翻译成编码:如果你知道真分布 p,就能设计一套最省的编码(常见的结果用短码、罕见的用长码),平均码长正好是熵 H(p)。可如果你误以为分布是 q,按 q 去设计编码,再拿去编真正服从 p 的数据——平均码长会变成交叉熵 H(p,q)

H(p,q) = −∑ p(x)·log q(x) (读作"按真概率 p(x) 加权,但惊讶度用预测的 −log q(x)")

看清这个式子和熵的区别:求和的权重还是真分布 p(x)(事情按真概率发生),可惊讶度用的是预测 q(x)(你是按 q 来"吃惊"的)。如果你的预测 q 恰好等于真相 p,交叉熵就退回成熵 H(p,p) = H(p),代价最低;q 错得越离谱,H(p,q) 越大——尤其当 q 给真正会发生的结果分配了极小的概率时,−log q(x) 会爆炸式增大。这就是分类训练里的"交叉熵损失"。但它为什么是的损失?且看下一步。

KL 散度:纯粹"多付出的代价",而且永远 ≥ 0

交叉熵 H(p,q) 里其实混了两样东西:一部分是真相本身就有的、不可避免的不确定度 H(p);另一部分才是因为你猜错、用了 q 而额外多付的代价。把后者单独拎出来,就是 KL 散度(Kullback–Leibler divergence,又叫相对熵):

KL(p‖q) = H(p,q) − H(p) = ∑ p(x)·log( p(x) / q(x) ) (读作"p 相对 q 的散度,等于交叉熵减去熵")

它度量的是"你用 q 而非真分布 p 时,多浪费了多少信息"。KL 散度有两条性质,是它能当"差距尺"的命根子:

吉布斯不等式:KL ≥ 0,且 = 0 当且仅当 p = q
KL(p‖q) ≥ 0(读作"KL 散度永远非负"),并且取到 0 当且仅当两个分布完全相同p = q)。直觉证明:用真分布 p 设计的编码是所有编码里平均最短的,任何别的编码(按 q 设计)只会更长或一样长,绝不可能更短——所以"多付的代价" KL ≥ 0,而"一样长"只在 q 就是 p 时发生。换句话说:没有谁能比真相更懂真相。

这正是我们苦苦寻找的那把尺:KL(p‖q) 越小,q 越贴近 p;唯有 q = p 时它才归零。要提醒一点:KL 不对称KL(p‖q) ≠ KL(q‖p),所以它不是严格意义上的"距离"(距离要对称),人们称它"散度"。但用作"把预测拉向真相"的目标,它再合适不过。

合体:交叉熵损失就是最大似然

现在揭开本课最关键的一层——为什么分类一定要用交叉熵,而不是随便挑一个误差。我们从第 31 课的最大似然出发。训练时真分布 p 是固定的标准答案,所以它的熵 H(p) 是个常数,跟模型参数无关。于是:

H(p,q) = H(p) + KL(p‖q) = 常数 + "差距"

调参数只能改 q,因此最小化交叉熵 H(p,q),就等价于最小化 KL(p‖q)——也就是把预测分布尽量拉到和真相重合。而前面已证 KL ≥ 0,最好的情况是 q = p。这把损失安在了坚实的地基上:它有明确的最优解,而且最优解就是"说对真相"。

更漂亮的是它和似然的关系。对一批独立样本求最大似然,是让模型给真实标签分配的概率连乘 ∏ q(真实标签) 最大;取对数(连乘变连加)再取负,就是 −∑ log q(真实标签)——这恰好是交叉熵在数据上的形式(每个样本的真分布 p 是 one-hot,只在真实标签处为 1)。三句话连成一串:

一条等式串起三门课
最大化对数似然 ⇔ 最小化交叉熵 H(p,q) ⇔ 最小化 KL 散度 KL(p‖q)第 31 课的 MLE、本课的信息论、未来的分类训练,说的是同一件事。交叉熵损失不是发明出来的,是从"让模型说对真相"这个要求里被逼出来的唯一自然答案。

它无处不在:语言模型与扩散

这不是纸上谈兵。今天最强的模型,训练目标几乎都是某种交叉熵或 KL:

下面的小实验,让你亲手把熵、交叉熵、KL 三者的关系看个透:固定真分布 p,自己挪动预测 q,盯着 KLq = p 那一刻精确地归零。

熵、交叉熵与 KL:把预测 q 挪向真相 p
真分布 p(三种结果,固定)画成灰条;你的预测 q 画成蓝条,拖两个滑块调它(第三个概率自动补齐,保证 q 加起来为 1)。盯住右下角的 KL(p‖q):当蓝条和灰条完全重合(q = p)时,它精确变成 0——这正是"没有谁比真相更懂真相"。
熵 H(p)(真相固有)
交叉熵 H(p,q)(你的代价)
KL(p‖q) = H(p,q) − H(p)

常见误解

一句话带走
信息 = 惊讶 = −log pH(p) 是一个分布的平均惊讶(固有不确定度),交叉熵 H(p,q) 是拿错分布 q 描述真相 p 的代价,KL 散度 KL(p‖q) = H(p,q) − H(p) ≥ 0 是其中"多付的"那部分、只在 q = p 时归零。因为 H(p) 是常数,最小化交叉熵 = 最小化 KL = 最大似然——分类用的交叉熵损失,就是这么被逼出来的。
下一步
我们一路把损失、期望、后验都写成了漂亮的式子:熵是 𝔼[−log p],损失是某个分布上的期望,贝叶斯后验里也全是积分。可现实里有个尴尬:这些期望和积分,绝大多数时候根本算不出来——分布太复杂、维度太高,没有解析解,连数值积分都因维度爆炸而失效。那怎么办?答案出人意料地简单粗暴:不去算,去"掷骰子"——用随机采样来估它。这就把第 08 课的积分和第 10 课的大数定律重新请上场。→ 第 34 课《采样与蒙特卡洛:当积分算不出来》。