Information Theory

香农公式在数据压缩中的角色

压缩的理论下界从哪来?为什么熵是模型的属性而不是数据的属性?以及——为什么压缩和预测在数学上是同一件事。

阅读约 10 分钟 含 3 张图 需要一点概率基础

先澄清一件事,因为这里有个很常见的混淆。

中文教材里说「香农公式」,严格来说指的是香农-哈特利定理

C = B · log2(1 + S/N)

那个管的是信道——一条线路每秒最多能可靠传输多少比特。它跟压缩没有直接关系。

真正统治数据压缩的,是香农信息论的另一半:信息熵,以及建立在它之上的香农第一定理(无失真信源编码定理)。两者是同一套理论的两条腿——一条管「能压多小」(信源编码),一条管「能传多快」(信道编码)。

下面讲的是前者。

001把概率翻译成比特

整套理论的起点是一个很朴素的直觉:越不可能发生的事,发生了才越有信息量。

「明天太阳升起」几乎不含信息,因为你早就知道了;「明天下红雨」信息量巨大,因为它推翻了你原本的预期。香农把这个直觉写成了自信息

I(x) = −log2 p(x)
p(x)符号 x 出现的概率
I(x)它一旦出现,携带的信息量,单位是比特
0 bit 2 bit 4 bit 6 bit 0 0.25 0.5 0.75 1 符号出现的概率 p I(x) = −log₂ p(x) 罕见符号 · 4.32 bit 抛硬币 · 1 bit 几乎必然 · 0.15 bit
概率越低,信息量越大,且增长是无界的。一个必然发生的事件(p = 1)信息量恰好为 0——它什么也没告诉你。

为什么偏偏是对数?因为它是唯一能同时满足两个要求的函数:信息量随概率单调递减,且独立事件的信息量可以相加。两个独立事件的联合概率是 p₁p₂,而我们希望信息量是 I₁ + I₂——只有对数能把乘法变成加法。

熵就是自信息的期望值:把每个符号的「意外程度」按它出现的频率加权平均。

H(X) = −Σ p(x) log2 p(x)
H(X)信源 X 平均每个符号的不确定性,单位是比特
Σ对信源里所有可能的符号求和

010香农第一定理:压缩的地板

这才是熵和压缩真正的连接点。定理说:对任意无损编码方案,平均码长 L 满足

L ≥ H(X)

而且存在编码使得 L < H(X) + 1;对符号分块编码之后,可以任意逼近 H(X)。

值得停一下

这条定理的性质很特别——它是个不可能定理。它不告诉你怎么压缩,它告诉你「不管你多聪明,都压不过这条线」。

任何声称能无损压缩任意数据的算法都是错的。鸽巢原理也能给出同样的结论:如果某些输入被压短了,必然有另一些输入被撑长了。

上面那条曲线现在有了第二重含义:−log₂ p(x) 不只是「信息量」,它同时是这个符号的理想码长。概率 1/2 的符号配 1 bit,概率 1/8 的配 3 bit。而熵,就是理想码长的加权平均。

011一个刚好压到极限的例子

设信源有四个符号,概率分别是 A = 0.5,B = 0.25,C = 0.125,D = 0.125。先算熵:

H = 0.5(1) + 0.25(2) + 0.125(3) + 0.125(3) = 1.75 bit

再用霍夫曼编码构造码树——每次把概率最小的两个节点合并,一路合到根:

1.0 0.5 0.25 0 1 0 1 0 1 A · 0.5 0 B · 0.25 10 C · 0.125 110 D · 0.125 111 1 bit ← −log₂ 0.5 2 bit ← −log₂ 0.25 3 bit ← −log₂ 0.125
注意右侧:每个叶子的深度,恰好等于它的自信息。这不是巧合,而是这组概率刚好都是 2 的负整数次幂——霍夫曼因此能精确命中理论极限。
符号概率 p码字码长 Lp × L
A0.500010.500
B0.2501020.500
C0.12511030.375
D0.12511130.375
平均码长1.750

平均码长 1.75 bit,恰好等于熵。定长编码需要 2 bit/符号,所以压到了 87.5%——而且一个比特都省不下来了。这就是「达到香农极限」的字面含义。

100霍夫曼的天花板

如果概率不那么凑巧呢?

比如某个符号 p = 0.9,理想码长是 −log₂ 0.9 ≈ 0.152 bit。但霍夫曼只能给它整整 1 bit,因为一个码字最少占一个比特。这个取整损失最坏可达每符号 1 bit,在概率高度倾斜时非常致命。

突破口是放弃「一符号对应一码字」这个前提:

这两者基本把「已知概率分布时」的问题彻底解决了。剩下的所有空间,都在别处。

101熵不是数据的属性

这是我认为最容易被误解、也最有意思的一点。

H(X) 里的 p(x) 从哪来?从你的概率模型来。同一段数据,换一个模型,算出的熵就完全不同。所以严格讲——

核心

熵是「数据 + 模型」这一对的属性,不是数据本身的属性。

香农 1951 年那篇《Prediction and Entropy of Printed English》做的正是这件事:用越来越强的模型,去估计同一种数据的熵。

无模型 · 等概率 4.75 单字母频率 4.14 相邻两字母 3.56 相邻三字母 3.30 人类预测实验 ≈1.3 现代神经压缩器 ≈0.8 bit / 字符  紫 = 统计模型 青 = 预测模型 (英文,数量级示意)
前四条是香农论文里的经典估计,后两条是数量级示意——具体数字随语料、分词方式和实现差异很大,不宜直接引用。

同一批英文文本,什么都没变,只是换了预测它的模型,可压缩的下界就从 4.75 一路掉到了 0.8。地板本身在下沉。

110压缩即预测

上面那张图其实解释了现代压缩器的全部架构。任何无损压缩器都可以拆成两半:

压缩器 = 概率模型 + 熵编码器
概率模型看着已经出现的内容,预测下一个符号的概率分布
熵编码器把这个分布转换成尽可能短的比特串

熵编码那一半,在 1970 年代就基本做完了——算术编码已经逼近理论极限,后来的改进主要是速度而非压缩率。

所以 gzip、zstd、xz、PNG 之间的差距,几乎全部来自模型那一半:LZ77 的滑动窗口、上下文混合、PPM 的高阶上下文,本质上都是在想办法把 p(x) 估得更准。

顺着这条线,一个乍看很怪的结论就变得自然了:

等价性

压缩和预测在数学上是同一件事。

一个能把英文压到 0.8 bit/字符的东西,等价于一个能很好预测下一个字符的语言模型;反过来,任何语言模型都可以直接当无损压缩器用——把它输出的概率分布喂给算术编码器就行。

这也是「压缩即智能」那类说法背后的技术依据:要把某样东西压得更短,你必须更好地理解它的规律。压缩率成了对建模质量的一种可度量的检验。

111边界:这条定理只管无损

H(X) 是无损压缩的下界。但 JPEG、MP3、H.264 都压到了远低于熵的比特率——它们并没有违反定理,而是换了一条赛道:允许失真

这块归香农的率失真理论管,用 R(D) 函数描述:给定可容忍的失真 D,最少需要多少比特率 R。当 D → 0 时 R(D) → H(X),两条理论在这里干净地接上。

整幅图景

回到开头那个澄清。可以这样收束:香农把通信拆成了几个彼此独立的问题,并给每一个都划了一条不可逾越的线。

问题定理极限回答什么
信源编码第一定理H(X)数据最少能用多少比特表示
信道编码第二定理C = B log₂(1+S/N)一条信道每秒最多能可靠传多少比特
有损压缩率失真R(D)容忍失真 D 时的最低比特率

而这三条线有个共同点:它们都不告诉你怎么做,只告诉你做不到什么。

压缩工程七十年的全部进展,本质上是在把实际码率往 H(X) 这条地板上压。而由于 H 取决于模型,这条地板本身还在随着建模能力的提升不断下沉——今天的神经压缩器已经踩到了香农当年为人类估出的那条线之下。