信息论与熵:从概率到编码代价
先分清真实分布 P 与模型分布 Q,再从自信息、熵逐步推出交叉熵、KL 散度和困惑度。
- P 和 Q 是什么——真实分布和模型分布各自承担什么角色。
- 自信息和熵——一次事件的意外程度,和整个分布的平均不确定性。
- 交叉熵和 KL——用错了分布,平均要多付多少代价。
- 困惑度——把抽象的平均损失指数化为观测数据上的等效选择数。
- 这些量的边界——它们衡量概率匹配,不衡量事实性、语义或智能。
1先把 P、Q、对数和期望说清楚起点
后面所有公式究竟在对什么对象做计算?
设一次试验可能产生有限个事件,例如天气集合 Ω={晴, 雨, 雪}。P(x) 表示事件 x 真实出现的概率——长期来看,25% 的天会下雪。Q(x) 则是模型给事件 x 分配的概率——比如模型以为只有 12.5% 的天会下雪。教学例子会直接给出 P,但现实中 P 通常未知,只能用样本频率近似。Q 则由模型给出。
后续所有计算都遵循一个规则:事件仍然按 P 的频率出现,但损失或码长由 Q 决定,最后再用 P 做加权平均。这就是「按 P 取期望」——EP[f(x)] = Σx P(x) f(x)——用真实出现的概率当权重。
2自信息:一次结果有多意外自信息
概率越小的事件一旦发生,为什么带来的信息越多?
如果某事件必然发生(P=1),观察到它没有消除任何不确定性,信息量为 0 bit。概率减半,自信息增加 1 bit:P 从 1/2、1/4 到 1/8,自信息依次是 1、2、3 bit。
以三天气为例:晴的概率是 1/2,所以晴天发生了也不意外——I = −log2(1/2) = 1 bit。雪的概率只有 1/4,下雪时 I = −log2(1/4) = 2 bit——更罕见,所以信息量更大。
这个数值表示什么?它衡量“意外程度”,不是重要性。罕见的传感器噪声可以有很高自信息,却对任务没有价值。自信息只告诉你这个结果在 P 下有多罕见,不告诉你它值不值得关注。
不能推出什么:高自信息不等于事件重要、有用或正确;它只是一个关于概率的纯数学量。
3熵:真实分布自身的平均不确定性熵
单个事件的信息量有高有低,怎样概括一个分布整体上有多难预测?
熵就是把每个事件的自信息按真实频率 P 求平均。对于 P=(1/2, 1/4, 1/4),三个事件的信息量分别是 1、2、2 bit,加权平均:H(P) = 1/2 × 1 + 1/4 × 2 + 1/4 × 2 = 1.5 bit/次。这表示长期来看,每次观察平均需要 1.5 bit 来描述结果。
在 n 个可能结果上,均匀分布的熵最大(log2n bit);确定分布的熵为 0。熵描述的是一个分布在重复试验中的平均不确定性——用来把不同事件的单次意外程度汇总成一个分布级别的量。
边界:这里的 H(P) 衡量真实数据生成分布 P 的不确定性,不评价模型预测是否正确。模型也可以给出高度集中的 Q,甚至令 H(Q)=0,却把全部概率压在错误结果上;这不能说明 H(P)=0,只说明预测分布很确定但可能很错。编码解释还依赖长期、无损和分布稳定等前提。
4交叉熵:用 Q 为按 P 出现的数据付费交叉熵
真实事件按 P 出现,模型却按 Q 分配概率时,平均损失是多少?
模型事先不知道下一次会出现什么,只能提交一整组预测概率 Q。事件 x 真正发生后,我们只检查模型给这个事件的概率 Q(x),并把它转换为对数损失:对事件 x 的损失 = −log2 Q(x)。Q 给真实事件的概率越大,损失越小;如果 Q 很自信地漏掉真实事件,损失会非常大。
由于事件实际仍按 P 出现,长期平均时必须用 P 作权重,这样就得到了交叉熵:
名称里的“交叉”来自两个分布各司其职:P 决定哪些事件多常出现,Q 决定模型为这些事件付出多少损失。用三天气例子继续:Q 给晴的概率和 P 一样是 1/2,所以晴天的损失还是 1 bit;但 Q 给雪只有 1/8 的概率(P 给 1/4),雪一旦发生,损失是 −log2(1/8) = 3 bit,比用 P 自带的 2 bit 多付出了整整 1 bit。
| 步骤 | 谁决定 | 要做的事 |
|---|---|---|
| 1. 事件出现 | 真实分布 P | 决定晴、雨、雪各出现多频繁 |
| 2. 模型报概率 | 模型分布 Q | 给每个可能事件分配预测概率 |
| 3. 计算单次损失 | 实际事件对应的 Q(x) | 计算 −log2Q(x) |
| 4. 求长期平均 | P 作权重 | 得到交叉熵 H(P,Q) |
怎样读结果:数值较低表示 Q 平均给真实事件分配了更高概率。若恰好 Q = P,交叉熵就退化为熵——在当前事件空间、条件信息与对数损失口径下,模型分布匹配了真实分布,损失降到理论最低;这并不等于模型掌握了生成机制、语义或其他能力。不同数据分布、对数底数或预测单位下的数值不能直接横向比较。
5KL 散度:交叉熵比熵多出的代价KL
KL 不需要凭空记忆,它可以从「用了错误的 Q 多花多少」直接推出。
知道真实分布 P 时,平均理想码长是 H(P);改用模型分布 Q 后,平均代价是 H(P,Q)。两者相减,就是模型概率放错位置造成的额外损失:
KL 散度衡量使用 Q 代替 P 后,每次事件平均多付出的 bit 数。用三天气例子来计算:H(P) = 1.5 bit,H(P,Q) ≈ 1.6038 bit,所以 DKL(P∥Q) ≈ 0.1038 bit/次——模型对雪的概率分配过小,导致平均每次多付出约 0.1 bit。
KL 有几个关键性质:它永远不小于 0(吉布斯不等式),只有 Q 和 P 完全一致时才等于 0。方向不能交换:DKL(P∥Q) 用 P 加权,重点惩罚 Q 漏掉真实会发生的事件;如果某个 P(x) > 0 而 Q(x) = 0,正向 KL 为正无穷。
边界:KL 的方向不可交换;P 未知时只能估计;Q 给零概率会让它发散。因此 KL 是对数代价层面的比较,不是几何距离,也不是对“模型好坏”的全面评价。
6KL 与欧氏距离回答不同问题距离比较
既然 P 和 Q 都能写成概率向量,为什么不直接算两点间的直线距离?
欧氏距离把两个分布当成普通向量,计算坐标差平方和的平方根:
它衡量的是坐标差,具有对称性(d2(P,Q) = d2(Q,P))并满足三角不等式。KL 则衡量概率比例造成的平均对数代价——不对称,也不满足三角不等式,因此严格说它是“散度”而不是数学上的距离。
| 问题 | 欧氏距离 | KL(P∥Q) |
|---|---|---|
| 关注什么 | 概率坐标相差多远 | Q 预测 P 时多付多少对数代价 |
| 是否对称 | 是 | 否 |
| Q 漏掉 P 的可能事件 | 仍是有限数 | 若 Q(x)=0,则为正无穷 |
| 单位 | 概率向量的几何尺度 | 本页使用 bit/事件 |
以 P=(0.5, 0.25, 0.25)、Q=(0.5, 0.375, 0.125) 为例,欧氏距离约为 0.177,正向 KL 约为 0.104 bit。两个数不能互换或相加——它们回答的不是同一个问题。
这项比较的价值:防止把 KL 当作普通距离来计算。欧氏距离并非“错误”,只是不表达编码后悔或对数预测损失。数值较小都可表示某种接近,但单位和含义不同,不能据此宣称一种度量永远更好。
7困惑度:把平均对数损失还原到概率尺度困惑度
平均损失是 1.6 bit/token 很抽象,怎样换成较直观的等效选择数?
如果平均交叉熵是 2 bit/token,那么 PPL = 22 = 4。困惑度的含义:它把真实数据上的平均对数损失换算成等效分支数:就这项平均损失而言,与每一步面对 4 个等概率候选的基准情形相当。这里指数化的是按 P 加权的 Q 损失;除非 Q=P,它不等于 Q 自身预测熵的指数。
它不是什么:困惑度不是词表大小,也不表示模型真的每一步只考虑固定数量的词。PPL 越低只说明模型给实际 token 的平均几何平均概率更高。它不自动证明事实性、推理能力或安全性更好。
这里提前用到 token——可以暂时把 token 理解为模型逐步预测的文本单位,正式分词机制将在后续节点学习。不同 tokenizer 会改变预测单位和序列长度,所以 token 级 PPL 通常不能跨 tokenizer 直接比较,跨分词器时可考虑统一语料上的 bits-per-byte 或 bits-per-character。
8三符号例子:从 P、Q 一直算到困惑度完整手算
真实天气 P=(1/2, 1/4, 1/4),模型 Q=(1/2, 3/8, 1/8),每一步怎样对应前面的定义?
| 事件 x | P(x) | −log2P(x) | Q(x) | −log2Q(x) | P(x)[−log2Q(x)] |
|---|---|---|---|---|---|
| 晴 | 0.5 | 1 | 0.5 | 1 | 0.5000 |
| 雨 | 0.25 | 2 | 0.375 | 1.415 | 0.3538 |
| 雪 | 0.25 | 2 | 0.125 | 3 | 0.7500 |
- 先用 P 自己的码长求平均:H(P) = 1.5 bit。
- Q 对雪的预测偏低(1/8 vs P 的 1/4),雪发生时损失跳升到 3 bit。
- 事件仍按 P 出现,把 Q 码长按 P 加权:H(P,Q) ≈ 1.6038 bit。
- KL = H(P,Q) − H(P) ≈ 0.1038 bit/次——雪的概率放错位置是主要额外代价来源。
- 指数化:PPL = 21.6038 ≈ 3.04。
怎样读这个结果:Q 对雨分得过多、对雪分得过少,虽然总概率仍是 1,但概率放错位置就增加了平均损失。若 Q 把雪设为 0,雪一旦发生便产生无穷损失,交叉熵和正向 KL 都变为正无穷。
边界:这个三事件例子只验证算术与解释链。真实语言模型面对的是数以万计 token 类型上的大规模离散条件分布,并依赖有限样本估计;它不是连续分布。相同公式仍适用,但估计误差、上下文条件和分词口径都会影响数值。
9语言模型损失:样本平均不等于真实分布语言模型
现实中不知道 P,训练程序又是怎样得到交叉熵损失的?
语言模型把一句话分成 x1, …, xn,并在每一步给真实下一个 token 概率 Q(xt | x<t)。似然在这里表示模型给整句真实 token 序列分配了多大概率,用来比较模型对已观察文本的解释程度。对数似然把逐步概率的乘法变成对数之和,便于稳定计算;再取负号,就把“概率越大越好”改写成“损失越小越好”:
除以 token 数 n,得到平均 token 损失;再对训练批次求平均,就是常见的经验交叉熵。它用有限样本近似未知的真实分布 P,而不是直接知道 P。
| 量 | 怎样得到 | 能否直接观察 |
|---|---|---|
| 总体交叉熵 H(P,Q) | 对未知真实分布 P 取期望 | 通常不能精确观察 |
| 训练损失 | 训练样本上的平均负对数概率 | 可计算,但可能过拟合 |
| 验证/测试损失 | 未参与参数更新的样本平均 | 用于估计新数据表现,仍有抽样误差 |
“训练损失下降”只说明模型更适合当前训练样本。要判断真实预测是否改善,还需独立验证集、分布切片以及事实性、推理、安全等任务指标。训练损失是经验估计,不是真实交叉熵;验证损失是更好的近似,但同样受样本量、分布偏移和抽样偏差限制。
10把整条因果链连起来综合
不要孤立背公式:每一个新量都在回答上一步尚未回答的问题。
- 事件 x 按真实分布 P 出现,模型用 Q 给出预测。P 决定频率,Q 决定代价。(§1)
- −log2P(x) 衡量事件在真实分布下的意外程度——自信息。(§2)
- 按 P 平均 −log2P(x),得到分布自身的平均不确定性——熵 H(P)。(§3)
- 按 P 平均模型损失 −log2Q(x),得到交叉熵 H(P,Q)。(§4)
- 交叉熵减去熵,得到模型概率放错位置的额外代价——KL(P∥Q)。(§5)
- KL 和欧氏距离衡量的是两种不同问题:对数代价 vs 几何坐标差。(§6)
- 把平均交叉熵指数化,得到观测数据上平均对数损失的等效分支数——困惑度 PPL;它不等同于 Q 自身的预测熵。(§7)
- 三符号例子展示了整套计算链的数值落点。(§8)
- 现实中 P 未知,训练损失是经验估计,不能自动代表真实交叉熵。(§9)
11常见误解直觉
| 误解 | 更准确的理解 |
|---|---|
| P 是训练集里直接可见的真理 | P 是未知的数据生成分布;样本频率只是估计,还可能受采样偏差影响 |
| 交叉熵就是两个分布各算一次熵 | 事件频率来自 P,单次损失来自 Q,公式是 −ΣP log2Q |
| KL 是两个概率向量的普通距离 | KL 是有方向的平均对数代价,不对称且不满足三角不等式 |
| PPL = 20 表示模型只考虑 20 个 token | 它表示真实数据平均对数损失对应于 20 个等概率候选的基准情形,不是实际候选数 |
| PPL 是 Q 自身不确定性的指数 | 通常的测试 PPL 指数化的是按数据分布加权的交叉熵;只有 Q=P 时才与真实熵的指数重合 |
| PPL 下降说明回答更真实、更聪明 | 它只测实际 token 的平均预测概率,其他能力需要独立评测 |
12检查你是否真的理解自测
- 给定 P(雨) = 0.25,计算“今天下雨”的自信息,并说明单位。
- 给定 P = (0.5, 0.5),计算 H(P);如果改成 P = (1, 0),熵怎样变化?
- 在 H(P,Q) = −ΣP(x) log2Q(x) 中,为什么外面的权重是 P(x),对数里面却是 Q(x)?
- 怎样从 H(P,Q) 和 H(P) 推出 KL(P∥Q)?这个差值表示什么?
- 为什么欧氏距离不能替代 KL 来表达编码代价?
- 假设平均损失为 3 bit/token,计算困惑度。它不表示什么?
- 训练交叉熵持续下降但验证交叉熵开始上升,能否断言真实 KL 仍在下降?
- 两个语言模型使用不同 tokenizer,A 的 PPL = 12,B 的 PPL = 15。能否直接断言 A 更好?
参考答案
- I(雨) = −log20.25 = 2 bit。
- H(P) = 1 bit;P = (1,0) 时 H(P) = 0,因为结果已确定。
- P 决定真实事件出现的长期频率,负责加权;−log2Q(x) 是模型的单次损失,所以 Q 在对数里面。
- 相减得 ΣP(x) log2[P(x)/Q(x)],表示数据按 P 产生却使用 Q 编码时,平均多付出的 bit 数。
- 欧氏距离只测概率坐标差且对称;KL 测按 P 加权的概率比例代价。尤其 P(x)>0 而 Q(x)=0 时,欧氏距离有限而正向 KL 为正无穷。
- PPL = 8,表示观测数据上的平均对数损失与每步 8 个等概率候选的基准情形相当,不表示词表大小、实际候选数或事实性、推理、安全表现。
- 不能。训练损失是训练样本的经验平均,可能因过拟合继续下降;验证损失上升反而提示泛化变差。真实 P 未知。
- 不能。不同 tokenizer 会改变 token 单位和序列长度;应统一语料和文本规范,并使用 bits-per-character 或 bits-per-byte 等共同单位,再结合任务指标。
13概念依赖与延伸学习路线
| 学习层级 | 涉及概念 |
|---|---|
| 进入本页前 | 只需会读概率和加权平均;本页已补充对数、期望、P 与 Q |
| 本页核心 | 自信息、熵、交叉熵、KL 散度、困惑度 |
| 下一步 | 损失函数、梯度下降、Token 与分词 |
| 工程延伸 | 预训练、概率校准、采样参数、模型评测与分布漂移 |
- Shannon, A Mathematical Theory of Communication:自信息、熵、对数底数与无损编码的基本解释。
- Deep Learning — Probability and Information Theory:交叉熵、KL、非对称性及机器学习中的概率解释。
- Stanford STATS 311: Information Theory and Statistics:熵、KL 和编码观点的正式定义与性质。