跳到正文
AI 知识地图 0.18 · 2026-07-30
关于与纠错文字目录 / Search
理解原理

信息论与熵:从概率到编码代价

先分清真实分布 P 与模型分布 Q,再从自信息、熵逐步推出交叉熵、KL 散度和困惑度。

建议 30–40 分钟 · 中级 · 需要:概率、加权平均、对数的基本概念

核心命题 信息论把「模型给真实事件多大概率」转换成可累加的编码代价:熵是知道真实分布时的最低平均代价,交叉熵是改用模型分布后的平均代价,KL 是两者之差。这些量只衡量概率匹配,不直接代表事实性、语义价值或通用智能
读完这一页,你应该能自己回答:
  • P 和 Q 是什么——真实分布和模型分布各自承担什么角色。
  • 自信息和熵——一次事件的意外程度,和整个分布的平均不确定性。
  • 交叉熵和 KL——用错了分布,平均要多付多少代价。
  • 困惑度——把抽象的平均损失指数化为观测数据上的等效选择数。
  • 这些量的边界——它们衡量概率匹配,不衡量事实性、语义或智能。
贯穿全页的最小例子 预测天气:真实天气按 P=(晴 1/2, 雨 1/4, 雪 1/4) 出现,模型却给出了不同的预测 Q=(晴 1/2, 雨 3/8, 雪 1/8)。如果根据 Q 来做预测或编码,平均多付出了多少?全页围绕这个三天气例子展开。

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)——用真实出现的概率当权重。

为什么用对数? 我们希望越罕见的事件带来的信息越多;同时,两个独立事件一起发生时,概率相乘,信息量应当相加。对数正好把乘法变成加法:log2(ab) = log2a + log2b。概率不超过 1,对数不大于 0,再加负号得到非负的信息量。本页用 log2 作为底数,单位是 bit。1 bit 表示一次理想且均衡的二元区分所提供的信息。若改用 ln,单位变成 nat,数值只按固定比例缩放。
容易忽视的前提:P 在现实中通常未知,我们只能用样本频率近似。样本可能有偏差,频率不等于真实概率。看到 P,先问「事件实际按谁出现」;看到 Q,先问「模型给这个真实事件多少概率」。

2自信息:一次结果有多意外自信息

概率越小的事件一旦发生,为什么带来的信息越多?

IP(x) = −log2 P(x)

如果某事件必然发生(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熵:真实分布自身的平均不确定性

单个事件的信息量有高有低,怎样概括一个分布整体上有多难预测?

H(P) = Ex∼P[−log2P(x)] = −Σx P(x) log2 P(x)

熵就是把每个事件的自信息按真实频率 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) 越高,表示长期平均更难预测。但熵高不表示每个事件都罕见,也不评价某条回答是否正确。“最低平均编码代价”是理想化、长期平均的无损编码结论,单个符号的实际码字还受整数长度、编码器和头部开销影响。

边界:这里的 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 作权重,这样就得到了交叉熵

H(P,Q) = Ex∼P[−log2Q(x)] = −Σx P(x) log2 Q(x)

名称里的“交叉”来自两个分布各司其职: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)。两者相减,就是模型概率放错位置造成的额外损失:

H(P,Q) − H(P) = Σx P(x) log2[P(x)/Q(x)] = DKL(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——因为 H(P) 是常数。但训练集上的平均损失只是总体交叉熵的经验估计,训练损失下降不保证未知数据上的真实 KL 一定下降。

边界:KL 的方向不可交换;P 未知时只能估计;Q 给零概率会让它发散。因此 KL 是对数代价层面的比较,不是几何距离,也不是对“模型好坏”的全面评价。

6KL 与欧氏距离回答不同问题距离比较

既然 P 和 Q 都能写成概率向量,为什么不直接算两点间的直线距离?

欧氏距离把两个分布当成普通向量,计算坐标差平方和的平方根:

d2(P,Q)=x(P(x)Q(x))2

它衡量的是坐标差,具有对称性(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 很抽象,怎样换成较直观的等效选择数?

PPL = 2H(P,Q) (损失单位为 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。

底数必须匹配:若训练损失使用自然对数(单位是 nat/token),应使用 PPL = exp(loss);若使用 log2,才使用 2loss

8三符号例子:从 P、Q 一直算到困惑度完整手算

真实天气 P=(1/2, 1/4, 1/4),模型 Q=(1/2, 3/8, 1/8),每一步怎样对应前面的定义?

真实分布 P晴:p=1/2 → 1 bit雨:p=1/4 → 2 bit雪:p=1/4 → 2 bitH(P)=1.5 bit模型编码 Q晴:q=1/2 → 1 bit雨:q=3/8 → 1.415 bit雪:q=1/8 → 3 bitH(P,Q)≈1.6038 bit额外代价DKL(P||Q)≈0.1038 bitP 决定事件频率,Q 决定编码代价,相减得额外损失
图 1 同一组 P、Q 依次产生熵、交叉熵、KL 和 PPL。P 负责加权,Q 负责代价。
事件 xP(x)−log2P(x)Q(x)−log2Q(x)P(x)[−log2Q(x)]
0.510.510.5000
0.2520.3751.4150.3538
0.2520.12530.7500
  1. 先用 P 自己的码长求平均:H(P) = 1.5 bit。
  2. Q 对雪的预测偏低(1/8 vs P 的 1/4),雪发生时损失跳升到 3 bit。
  3. 事件仍按 P 出现,把 Q 码长按 P 加权:H(P,Q) ≈ 1.6038 bit。
  4. KL = H(P,Q) − H(P) ≈ 0.1038 bit/次——雪的概率放错位置是主要额外代价来源。
  5. 指数化:PPL = 21.6038 ≈ 3.04。

怎样读这个结果:Q 对雨分得过多、对雪分得过少,虽然总概率仍是 1,但概率放错位置就增加了平均损失。若 Q 把雪设为 0,雪一旦发生便产生无穷损失,交叉熵和正向 KL 都变为正无穷。

边界:这个三事件例子只验证算术与解释链。真实语言模型面对的是数以万计 token 类型上的大规模离散条件分布,并依赖有限样本估计;它不是连续分布。相同公式仍适用,但估计误差、上下文条件和分词口径都会影响数值。

9语言模型损失:样本平均不等于真实分布语言模型

现实中不知道 P,训练程序又是怎样得到交叉熵损失的?

语言模型把一句话分成 x1, …, xn,并在每一步给真实下一个 token 概率 Q(xt | x<t)。似然在这里表示模型给整句真实 token 序列分配了多大概率,用来比较模型对已观察文本的解释程度。对数似然把逐步概率的乘法变成对数之和,便于稳定计算;再取负号,就把“概率越大越好”改写成“损失越小越好”:

NLL = −Σt log Q(xt | x<t)

除以 token 数 n,得到平均 token 损失;再对训练批次求平均,就是常见的经验交叉熵。它用有限样本近似未知的真实分布 P,而不是直接知道 P。

怎样得到能否直接观察
总体交叉熵 H(P,Q)对未知真实分布 P 取期望通常不能精确观察
训练损失训练样本上的平均负对数概率可计算,但可能过拟合
验证/测试损失未参与参数更新的样本平均用于估计新数据表现,仍有抽样误差

“训练损失下降”只说明模型更适合当前训练样本。要判断真实预测是否改善,还需独立验证集、分布切片以及事实性、推理、安全等任务指标。训练损失是经验估计,不是真实交叉熵;验证损失是更好的近似,但同样受样本量、分布偏移和抽样偏差限制。

10把整条因果链连起来综合

不要孤立背公式:每一个新量都在回答上一步尚未回答的问题。

  1. 事件 x 按真实分布 P 出现,模型用 Q 给出预测。P 决定频率,Q 决定代价。(§1)
  2. −log2P(x) 衡量事件在真实分布下的意外程度——自信息。(§2)
  3. 按 P 平均 −log2P(x),得到分布自身的平均不确定性——熵 H(P)。(§3)
  4. 按 P 平均模型损失 −log2Q(x),得到交叉熵 H(P,Q)。(§4)
  5. 交叉熵减去熵,得到模型概率放错位置的额外代价——KL(P∥Q)。(§5)
  6. KL 和欧氏距离衡量的是两种不同问题:对数代价 vs 几何坐标差。(§6)
  7. 把平均交叉熵指数化,得到观测数据上平均对数损失的等效分支数——困惑度 PPL;它不等同于 Q 自身的预测熵。(§7)
  8. 三符号例子展示了整套计算链的数值落点。(§8)
  9. 现实中 P 未知,训练损失是经验估计,不能自动代表真实交叉熵。(§9)
过关标准 如果你能讲清「交叉熵为什么 P 在外面加权、Q 在对数里面」,并能用三天气例子独立算出从熵到 PPL 的完整链条,你就抓住了它的内核。

11常见误解直觉

误解更准确的理解
P 是训练集里直接可见的真理P 是未知的数据生成分布;样本频率只是估计,还可能受采样偏差影响
交叉熵就是两个分布各算一次熵事件频率来自 P,单次损失来自 Q,公式是 −ΣP log2Q
KL 是两个概率向量的普通距离KL 是有方向的平均对数代价,不对称且不满足三角不等式
PPL = 20 表示模型只考虑 20 个 token它表示真实数据平均对数损失对应于 20 个等概率候选的基准情形,不是实际候选数
PPL 是 Q 自身不确定性的指数通常的测试 PPL 指数化的是按数据分布加权的交叉熵;只有 Q=P 时才与真实熵的指数重合
PPL 下降说明回答更真实、更聪明它只测实际 token 的平均预测概率,其他能力需要独立评测

12检查你是否真的理解自测

  1. 给定 P(雨) = 0.25,计算“今天下雨”的自信息,并说明单位。
  2. 给定 P = (0.5, 0.5),计算 H(P);如果改成 P = (1, 0),熵怎样变化?
  3. 在 H(P,Q) = −ΣP(x) log2Q(x) 中,为什么外面的权重是 P(x),对数里面却是 Q(x)?
  4. 怎样从 H(P,Q) 和 H(P) 推出 KL(P∥Q)?这个差值表示什么?
  5. 为什么欧氏距离不能替代 KL 来表达编码代价?
  6. 假设平均损失为 3 bit/token,计算困惑度。它不表示什么?
  7. 训练交叉熵持续下降但验证交叉熵开始上升,能否断言真实 KL 仍在下降?
  8. 两个语言模型使用不同 tokenizer,A 的 PPL = 12,B 的 PPL = 15。能否直接断言 A 更好?
参考答案
  1. I(雨) = −log20.25 = 2 bit。
  2. H(P) = 1 bit;P = (1,0) 时 H(P) = 0,因为结果已确定。
  3. P 决定真实事件出现的长期频率,负责加权;−log2Q(x) 是模型的单次损失,所以 Q 在对数里面。
  4. 相减得 ΣP(x) log2[P(x)/Q(x)],表示数据按 P 产生却使用 Q 编码时,平均多付出的 bit 数。
  5. 欧氏距离只测概率坐标差且对称;KL 测按 P 加权的概率比例代价。尤其 P(x)>0 而 Q(x)=0 时,欧氏距离有限而正向 KL 为正无穷。
  6. PPL = 8,表示观测数据上的平均对数损失与每步 8 个等概率候选的基准情形相当,不表示词表大小、实际候选数或事实性、推理、安全表现。
  7. 不能。训练损失是训练样本的经验平均,可能因过拟合继续下降;验证损失上升反而提示泛化变差。真实 P 未知。
  8. 不能。不同 tokenizer 会改变 token 单位和序列长度;应统一语料和文本规范,并使用 bits-per-character 或 bits-per-byte 等共同单位,再结合任务指标。

13概念依赖与延伸学习路线

学习层级涉及概念
进入本页前只需会读概率和加权平均;本页已补充对数、期望、P 与 Q
本页核心自信息、熵、交叉熵、KL 散度、困惑度
下一步损失函数、梯度下降、Token 与分词
工程延伸预训练、概率校准、采样参数、模型评测与分布漂移
资料来源与改编说明
访问日期:2026-07-28