【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
标题
21、【数学】【信息论】熵为什么是 − ∑ p log p -\sum p\log p −∑plogp:信息量的期望
背景
上篇 blog
【数学】【信息论】信息量为什么是 − log p -\log p −logp:可加性如何锁死对数
把单点信息量的来历补完了:三条天然要求------连续、单调递减且 I ( 1 ) = 0 I(1)=0 I(1)=0、独立可加 I ( p 1 p 2 ) = I ( p 1 ) + I ( p 2 ) I(p_1p_2)=I(p_1)+I(p_2) I(p1p2)=I(p1)+I(p2)------共同把它唯一地逼成负对数。可加性一步化归成柯西函数方程,其连续解只有对数一族,于是 I ( p ) = − c ln p I(p)=-c\ln p I(p)=−clnp;换底只差一个常数因子,对应 bit 与 nat 两种单位。
不过上篇讲的始终是单个结果 的信息量:只描述"某一件事发生"有多意外。本篇要回答的是更高一层的问题:一个完整的概率分布,平均有多不确定? 这个量就是熵。第 13 篇
【数学】【信息论】信息量、熵与交叉熵:从 − log p -\log p −logp 到 KL 散度
已经直接写出 H ( P ) = − ∑ x P ( x ) log P ( x ) H(P)=-\sum_x P(x)\log P(x) H(P)=−∑xP(x)logP(x),本篇把它的构造逻辑讲清楚------它其实就是"信息量取期望"。
从"一件事"到"一整个分布"
单个结果的信息量 I ( x ) = − log P ( x ) I(x)=-\log P(x) I(x)=−logP(x) 依附于具体结果 x x x:给正确 token 的信息量、给某个字符的信息量。但很多时候关心的是分布本身的脾气------它到底是"胸有成竹"还是"心里没底",而这与具体哪一个结果实现无关。
一个自然的想法:既然每个结果都有一份"惊讶",那就把整份分布的惊讶汇总 成一个数。汇总方式不该是简单相加(类别越多、和越大,不合理),而应当是平均------按每个结果出现的可能性来平均。这正是"期望"。
换个类比:单点信息量像"某一张彩票的奖金",熵则像"整期彩票的平均奖金"。一个必然发生的结果没有任何可揭晓的内容,熵为零;一个均匀分布的结果揭晓时平均能带来最多信息,熵最大。熵度量的就是"揭晓这份分布里的结果,平均能拿到多少信息"。
一把尺子量四种分布
把几种常见分布排在一张表里,熵的大小关系立刻清楚:
| 分 布 | 形 式 | 熵(nat) |
|---|---|---|
| 退化(确定) | 1 , 0 , 0 1,0,0 1,0,0 | 0 0 0 |
| 二分类均匀 | 1 2 , 1 2 \\frac12,\\frac12 21,21 | ln 2 ≈ 0.69 \ln2\approx0.69 ln2≈0.69 |
| 三分类尖锐 | 0.9 , 0.05 , 0.05 0.9,0.05,0.05 0.9,0.05,0.05 | ≈ 0.39 \approx0.39 ≈0.39 |
| 三分类均匀 | 1 3 , 1 3 , 1 3 \\frac13,\\frac13,\\frac13 31,31,31 | ln 3 ≈ 1.10 \ln3\approx1.10 ln3≈1.10 |
从"完全确定"的 0 0 0,到"三类均分"的 ln 3 \ln3 ln3,熵随分布变平而单调上升。类别越多、越均匀,上限越高 ------这也预示了后面"用熵做损失时,均匀乱猜的基线是 ln V \ln V lnV"( V V V 是类别数)。
加权平均:为什么权重是概率
把"平均惊讶"写成加权平均:结果 x x x 的惊讶是 − log P ( x ) -\log P(x) −logP(x),它的权重是它出现的概率 P ( x ) P(x) P(x)。于是
H ( P ) = − ∑ x P ( x ) log P ( x ) = E x ∼ P − log P ( x ) H(P)=-\sum_x P(x)\log P(x)=\mathbb E_{x\sim P}\big-\\log P(x)\\big H(P)=−x∑P(x)logP(x)=Ex∼P−logP(x)
这个式子就是熵(entropy) 。逐项读: − log P ( x ) -\log P(x) −logP(x) 是结果 x x x 的信息量; P ( x ) P(x) P(x) 是权重; ∑ x \sum_x ∑x 是对所有结果求平均。写成 E x ∼ P ⋅ \mathbb E_{x\sim P}\\cdot Ex∼P⋅ 更点题------它就是在分布 P P P 自己的身上,对惊讶取期望。
为什么权重必须是 P P P? 因为"这个分布平均有多不确定"这句话,说的就是"从它里面抽一个结果 ,平均会得到多少惊讶"。抽取动作遵从 P P P,所以平均的权重自然是 P P P。若把权重换成别的分布,算出来的就不再是" P P P 自己的不确定性",而变成了另一套东西(这一点到第 23 篇讲交叉熵时会再遇到)。
熵越大,分布越"平"、越难猜;熵越小,分布越"尖"、越好押注。
一个例子:尖锐与均匀
用两个三分类分布对照:
- 尖锐分布 P = 0.9 , 0.05 , 0.05 P=0.9,0.05,0.05 P=0.9,0.05,0.05:几乎总能押中 A,不确定性低;
- 均匀分布 U = 1 3 , 1 3 , 1 3 U=\\frac13,\\frac13,\\frac13 U=31,31,31:三个结果完全对称,最难猜。
代入定义(用自然对数):
H ( P ) = − ( 0.9 ln 0.9 + 0.05 ln 0.05 + 0.05 ln 0.05 ) ≈ 0.39 H(P)=-(0.9\ln0.9+0.05\ln0.05+0.05\ln0.05)\approx0.39 H(P)=−(0.9ln0.9+0.05ln0.05+0.05ln0.05)≈0.39
H ( U ) = − ( 1 3 ln 1 3 × 3 ) = ln 3 ≈ 1.10 H(U)=-\Big(\tfrac13\ln\tfrac13\times3\Big)=\ln3\approx1.10 H(U)=−(31ln31×3)=ln3≈1.10

图 1 左边是尖锐分布、右边是均匀分布:同样三个类别,均匀分布的熵几乎是尖锐分布的三倍。"平" = 熵大,"尖" = 熵小,这就是熵作为"不确定性度量"最直观的样子。
伯努利熵:最简单的情形
类别数取 2 2 2 时,熵有个极简形式。设取正面的概率为 p p p、取反面为 1 − p 1-p 1−p,则
H ( p ) = − p log p − ( 1 − p ) log ( 1 − p ) H(p)=-p\log p-(1-p)\log(1-p) H(p)=−plogp−(1−p)log(1−p)
它两端归零、中间隆起:

图 2 里, p = 0 p=0 p=0 或 p = 1 p=1 p=1 是必然事件、 H = 0 H=0 H=0(毫无悬念); p = 0.5 p=0.5 p=0.5 时 H = ln 2 ≈ 0.69 H=\ln2\approx0.69 H=ln2≈0.69,达到最大------五五开时最不确定。这条"倒 U 形"曲线是熵的入门标配,也是第 13 篇"均匀分布熵最大"在两类时的具体样子。
均匀分布为什么熵最大
上面两个例子都指向同一件事:类别数固定时,均匀分布让熵最大。 这不是巧合,可以严格证明。
设类别数为 n n n、均匀分布记为 U ( x ) = 1 n U(x)=\frac1n U(x)=n1。计算均匀分布与 P P P 之间的 KL 散度(第 13 篇定义过):
K L ( P ∥ U ) = ∑ x P ( x ) log P ( x ) 1 / n = ∑ x P ( x ) log ( n P ( x ) ) \mathrm{KL}(P\|U)=\sum_x P(x)\log\frac{P(x)}{1/n}=\sum_x P(x)\log\big(nP(x)\big) KL(P∥U)=x∑P(x)log1/nP(x)=x∑P(x)log(nP(x))
把 log n \log n logn 拆出来:
K L ( P ∥ U ) = ∑ x P ( x ) log n + ∑ x P ( x ) log P ( x ) = log n − H ( P ) \mathrm{KL}(P\|U)=\sum_x P(x)\log n+\sum_x P(x)\log P(x)=\log n-H(P) KL(P∥U)=x∑P(x)logn+x∑P(x)logP(x)=logn−H(P)
移项即得一个非常漂亮的恒等式:
H ( P ) = log n − K L ( P ∥ U ) H(P)=\log n-\mathrm{KL}(P\|U) H(P)=logn−KL(P∥U)

因为 KL 恒非负、且只在 P = U P=U P=U 时为零(第 13 篇证明过),立刻得到 H ( P ) ≤ log n H(P)\le\log n H(P)≤logn,等号当且仅当 P P P 是均匀分布。图 3 把它画成堆叠条: log n \log n logn 是固定的"天花板", P P P 越偏离均匀、KL 越大、熵就被削得越低;均匀分布时 KL 归零、熵顶到天花板 ln 3 \ln3 ln3。
拿尖锐分布验算一遍: K L ( P ∥ U ) = 0.9 ln ( 3 × 0.9 ) + 0.1 ln ( 3 × 0.05 ) ≈ 0.704 \mathrm{KL}(P\|U)=0.9\ln(3\times0.9)+0.1\ln(3\times0.05)\approx0.704 KL(P∥U)=0.9ln(3×0.9)+0.1ln(3×0.05)≈0.704,于是 log 3 − K L = 1.099 − 0.704 ≈ 0.39 \log3-\mathrm{KL}=1.099-0.704\approx0.39 log3−KL=1.099−0.704≈0.39,正好等于前面直接算出的 H ( P ) H(P) H(P)。
这也顺带解释了第 13 篇那句话的来历: n n n 类均匀分布、每类 1 n \frac1n n1,代定义直接得 H = ln n H=\ln n H=lnn------正是这里的等号情形。
熵的基本性质
把熵当函数用之前,先记几条性质,后面会反复用到:
| 性 质 | 表达式 | 含 义 |
|---|---|---|
| 非负 | H ( P ) ≥ 0 H(P)\ge0 H(P)≥0 | 惊讶不为负,加权平均后仍非负 |
| 确定性 | H ( P ) = 0 ⟺ H(P)=0\iff H(P)=0⟺ 某个 P ( x ) = 1 P(x)=1 P(x)=1 | 结果板上钉钉时毫无悬念 |
| 上界 | H ( P ) ≤ log n H(P)\le\log n H(P)≤logn | 至多等于均匀分布的 log n \log n logn |
| 对称 | 交换任意两个结果, H H H 不变 | 熵与类别的名字、次序无关 |
| 凹性 | H ( t P + ( 1 − t ) Q ) ≥ t H ( P ) + ( 1 − t ) H ( Q ) H(tP+(1-t)Q)\ge tH(P)+(1-t)H(Q) H(tP+(1−t)Q)≥tH(P)+(1−t)H(Q) | 混合只会让分布更平、熵更大 |
前四条都能从定义直接读出来:非负来自 − log P ( x ) ≥ 0 -\log P(x)\ge0 −logP(x)≥0;确定性命中 P = 1 P=1 P=1 那一项为零、其余项权重为零;上界刚用 KL 证过;对称来自求和与次序无关。凹性是"混合两个分布会让它更均匀"的数学表述------把两堆概率按比例掺在一起,得到的分布比原来的两个都更接近均匀,靠熵的上界方向不难接受。
熵的两种读法
同一个 H ( P ) H(P) H(P),有两条互相印证的解释:
- 不确定性:熵越大越难猜,均匀分布最难猜;
- 平均编码长度 :如果把分布里的结果编码成二进制串,最优前缀码的平均码长就是 H ( P ) H(P) H(P)(单位为 bit 时)。这层"信息 = 编码"的含义在第 13 篇提过,深入展开留到后面的编码篇。
两条读法指向同一个数,只是视角不同:一个从"猜测"看,一个从"压缩"看。
两个常见疑问
- "为什么是加权平均,而不是简单平均或求和?" :简单求和会把类别数也算进去------三类的分布永远比两类"大",这不符合"不确定性"的直觉。简单平均则无视了各类别的可能性差异: 0.9 , 0.05 , 0.05 0.9,0.05,0.05 0.9,0.05,0.05 和 1 3 , 1 3 , 1 3 \\frac13,\\frac13,\\frac13 31,31,31 的简单平均一样,但它俩的不确定性天差地别。只有按 P ( x ) P(x) P(x) 加权,才能忠实反映"实际会以多大概率遇到这份惊讶"。
- "换底会不会改变结论?" :熵的具体数值 会随底数差一个常数(第 20 篇的换底公式),但比较大小、判断"谁更均匀"这些结论不变 。以 e e e 为底是 nat、以 2 2 2 为底是 bit,描述的是同一件事、不同刻度。
小结
熵不是凭空定义的平均值,而是"信息量取期望":把每个结果的惊讶 − log P ( x ) -\log P(x) −logP(x) 按它出现的概率 P ( x ) P(x) P(x) 加权平均,得到 H ( P ) = − ∑ x P ( x ) log P ( x ) H(P)=-\sum_x P(x)\log P(x) H(P)=−∑xP(x)logP(x)。权重之所以是 P P P,是因为要度量的正是这个分布自身的不确定性;类别固定时,均匀分布熵最大,其证明浓缩成一句 H ( P ) = log n − K L ( P ∥ U ) H(P)=\log n-\mathrm{KL}(P\|U) H(P)=logn−KL(P∥U)。尖的分布熵小、平的分布熵大,二分类下就是那条倒 U 形的伯努利熵曲线。到这里,熵的"怎么算"清楚了;但它为什么偏偏长成这个形式、有没有别的可能,下一篇用 Shannon 的公理把它彻底钉死。
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!