自信息与信息熵:怎样量化「意外」与「不确定」
从单个事件的意外感到整个分布的平均不确定度,手算各类熵并理解最优编码长度
- 会用 −log p 计算自信息,说清为什么事件越罕见信息量越大
- 能手算二元分布、均匀分布的信息熵,分得清 bits 和 nats
- 掌握联合熵、条件熵与熵的链式法则 H(X,Y)=H(X)+H(Y|X)
- 说清熵何时最大,以及熵与最优平均编码长度的关系
信息论给「信息量」一个精确的数学度量,而它正是交叉熵损失与压缩、VAE 的共同地基
你有没有想过——模型说对「太阳从东边升起」,你觉得理所当然;说对一个冷门结论,你反而觉得信息量大?核心原因很简单:信息量本质就是「意外程度」。香农用概率的对数给了它精确的定义:越确定的事,携带的信息越少;越罕见的事真的发生了,携带的信息就越多。这一节是信息论最底层的三块砖:自信息、信息熵、联合/条件熵。后面 l2 的交叉熵、l3 的分类损失、l4 的 VAE 与蒸馏,全都是在这上面搭出来的。顺着这条因果链走就通了:单个事件的意外程度 = 自信息 → 整个随机变量的平均意外程度 = 熵 → 两个变量用联合/条件熵描述 → 熵给出压缩的理论极限。
1.1 自信息:罕见的消息才「值钱」
概率为 p 的事件发生,它的自信息定义是 I(x)=−log₂ p(x),单位是比特(bit)。换自然对数 ln 算的话,单位是奈特(nat),1 bit=ln2≈0.693 nat。负号的作用是保证信息量非负。用对数是因为独立事件的信息量能直接相加:两个独立事件同时发生的概率是 p₁p₂,代入公式就是 −log(p₁p₂)=−log p₁−log p₂,刚好是两个事件各自的信息量加起来。这就是选对数、不用其他函数的根本原因。
手算三个值建立量级感:公平硬币正面 p=0.5,I=−log₂0.5=1 bit,即回答一次是非题需要 1 比特;p=0.25 的事件 I=2 bit;p=0.125 的事件 I=3 bit——概率每减半,自信息加 1 bit。必然事件 p=1 的自信息 −log1=0,因为它毫无意外。概率为 0 的事件若真发生,自信息趋于无穷大。
关于自信息 I(x)=−log p(x),下列说法正确的是?
可加性值得再强调,因为它决定了信息为什么能被「编码成比特数」:两次独立抛硬币,单次自信息各 1 bit,联合结果共 4 种、每种概率 0.25、自信息 2 bit,正好等于 1+1。若不用对数而换别的单调函数,独立事件的信息就无法相加,也对应不上「编码长度相加」这一物理事实。 自信息只与概率有关、与语义或重要性无关:一个低概率噪声和一个低概率的重要新闻,在纯信息论看来意外程度相同,价值判断是另一层的事。
1.2 信息熵:一个分布的平均不确定度
自信息描述单个取值,信息熵 H(X) 描述整个随机变量,定义是自信息按概率的期望:H(X)=−Σₓ p(x)·log₂ p(x)(连续情形把求和换积分,叫微分熵)。 它回答一个问题:平均而言,告诉你 X 的取值,能消除多少不确定。也等于在最优编码下,描述一个取值平均需要多少比特。 熵只依赖概率分布,和具体取值的标签没关系。
手算二元分布。公平硬币 Bern(0.5):H=−2×0.5·log₂0.5=1 bit。偏硬币 Bern(0.9):H=−0.9log₂0.9−0.1log₂0.1≈0.137+0.332=0.469 bit,比公平硬币低——因为结果高度可猜,不确定性小。完全确定 Bern(1):H=0。再看 K 类均匀分布,每类概率 1/K,H=−K·(1/K)log₂(1/K)=log₂K,4 类均匀即 2 bit。
Bernoulli(p) 的熵在 p 取何值时达到最大?最大值是多少 bit?1.3 熵的性质:非负、有上界、均匀时最大
熵有三条必须记住的性质。非负 H(X)≥0,因为每项 −p log p≥0。有上界 H(X)≤log₂|X|(|X| 是取值个数),当且仅当所有取值等概率(均匀分布)时取等号——分布越均匀、越难猜,熵越大;越集中、越好猜,熵越小。确定性变换不增加熵,对 X 做函数映射 Y=f(X) 有 H(Y)≤H(X),因为映射只会合并取值、不会制造新信息。
以2为底算出来的结果,就是「需要多少个是非问题」,通信和编码里常用这个逻辑。公平硬币对应1 bit,均匀K类对应log₂K bit。
1.4 联合熵、条件熵与熵的链式法则
两个变量的联合熵 H(X,Y)=−ΣₓΣy p(x,y)log₂p(x,y),度量把这一对结果一起确定所需的信息。条件熵 H(Y|X)=Σₓp(x)H(Y|X=x)=−ΣΣp(x,y)log₂p(y|x),度量「已经知道 X 后,Y 还剩多少不确定」。它满足 H(Y|X)≤H(Y):知道相关信息只会减少、不会增加不确定度(等号当且仅当 X、Y 独立)。
熵的链式法则把三者连起来:H(X,Y)=H(X)+H(Y|X)=H(Y)+H(X|Y)——先确定 X 用 H(X),再在已知 X 下确定 Y 用 H(Y|X)。当 X、Y 独立时条件熵等于无条件熵 H(Y|X)=H(Y),于是独立变量的联合熵可加 H(X,Y)=H(X)+H(Y),与自信息的可加性一脉相承。
来,咱们手算下两枚独立的公平硬币:每枚熵是 1 bit,四种组合各占 0.25 概率,H(X,Y)=−4×0.25log₂0.25=2 bit,刚好等于 1+1。要是第二枚硬币完全由第一枚决定(Y=X),那 H(Y|X)=0、H(X,Y)=H(X)=1 bit——重复的变量带不来新信息。这正好给 l4 要讲的互信息 I(X;Y)=H(Y)−H(Y|X) 埋了伏笔。
再算一个「部分相关」的小例子,你就能体会条件熵怎么下降的:设 X、Y 各是公平硬币,Y 有 90% 概率等于 X,10% 概率翻转。那已知 X 之后,Y 就只剩一个 Bern(0.9) 的不确定度,H(Y|X)≈0.469 bit。按链式法则算联合熵:H(X,Y)=H(X)+H(Y|X)=1+0.469=1.469 bit,比两者完全独立时的 2 bit 小。相关性让联合结果更可预测,需要的编码更少——这就是数据压缩能利用冗余的原理。翻转概率越接近 0.5,Y 越接近和 X 独立,联合熵就越逼近 2。
为什么熵同时是「不确定度」和「最优码长」
香农源编码定理的结论很明确:对独立同分布信源,任何无损压缩的平均码长都不可能低于熵 H,且存在逼近 H 的编码(如哈夫曼码、算术编码)。 直觉很好懂:概率大的事件用短码、概率小的事件用长码,最优码长恰为 −log₂p(x),平均下来就是熵。 所以熵有两副等价面孔——压缩前它是「平均需要多少比特描述」,概率视角下它是「平均意外程度」,机器学习里它又衡量一个分布「有多分散、多不确定」。决策树用信息增益(熵的下降)选特征、最大熵模型偏好均匀分布,用的都是同一个量。
作为损失:交叉熵/最大熵强化学习的策略熵正则;作为分裂准则:决策树的信息增益=父节点熵−子节点条件熵;作为正则与目标:VAE 让潜变量后验别太偏离先验、信息瓶颈压缩冗余信息。这些场景用的都是同一个 H,把熵的定义搞懂就能一通百通。
离散熵恒非负,但连续变量的微分熵 h(X)=−∫f ln f 可能为负(如方差很小的高斯),因为它是相对密度、不再直接等于编码比特数;两个微分熵之差(如 KL)依然非负。跨连续/离散比较大小时要特别小心。
log₂、ln、lg10 之间只差正的常数倍,所以「均匀分布熵最大」「p=0.5 二元熵最大」这些结论和底数没关系;比两个分布谁熵大的时候,用哪个底都行,但报数值的时候必须标清楚是 bit 还是 nat。
记几个锚点就行:均匀 K 类=log₂K(2→1、4→2、8→3);Bern(0.9)≈0.469、Bern(0.99)≈0.081。碰到偏分布先判断「离均匀多远」,就能估出熵是靠近 log K 还是靠近 0,不用每次都精算。
取值个数固定为 K 的所有分布里,信息熵什么时候最大?
本节小结
一条因果链:自信息 I=−log p 度量单事件意外、对数保证独立事件可加 → 信息熵 H=−Σp log p 是平均自信息/平均不确定度(公平硬币 1 bit、Bern0.9 为 0.469、均匀 K 类为 log₂K)→ 熵非负、有上界 log K、均匀时最大 → 联合熵与条件熵由链式法则 H(X,Y)=H(X)+H(Y|X) 连接,独立时熵可加、完全决定时条件熵为 0 → 熵同时是无损压缩的平均码长下界,为后续 KL、交叉熵、互信息奠基。
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
一条样本是一个特征向量,一批样本堆成矩阵,神经网络一层的变换本质就是矩阵乘法加激活。换基/特征值分解相当于找数据的主要方向(PCA 降维),GPU 之所以适合深度学习,正是因为它能大规模并行做矩阵运算。把「向量=对象、矩阵=变换」建立起直觉,后面公式就不再抽象。