一步一步建立直观
先预测,再点“演示本步”核对右图。每一步都重设到指定情形,随后可以自由修改参数。
01把信息量看成排除可能性的成本
若两种结果等可能,一个二选一问题就能区分它们。若其中一种很罕见,常见结果可以在平均意义上花更少的描述成本,罕见结果则需要更长描述。右图从公平二元分布出发,基准熵为一比特;对数中的底二对应二进制问题的单位。
02平均代价要用真实发生概率加权
把真实分布改为不均匀。罕见结果的单次信息量变大,但它出现得少,所以熵要把每种信息量乘以真实概率再相加。不能只看最大码长就判断平均压缩难度。这里显示的是理想平均编码代价,有限样本的整数码长还受具体编码方案影响。
03分布的不确定性与模型失配不同
保持真实分布固定,改用偏斜的模型。蓝色曲线升高,橙色熵基线不变,说明额外成本来自模型失配,而不是数据本身突然更随机。熵与交叉熵应分开理解;前者由真实分布决定,后者还依赖你拿来编码或预测的模型。
6.1.1 怎样把常见消息写短一点¶
假设要传递三个符号,出现概率为一半、四分之一、四分之一。统一用两位能表达,但较常出现的符号值得更短的编码。选择 ,读取时不会把某个完整码当成另一码的开头,因而可无歧义地逐个解码。
平均长度是每个码长乘出现概率再求和,本例为一点五位。这里没有任何一个符号使用“一点五位”;分数来自长期平均。这一区别对理解熵与实际整数码长非常重要。
6.1.2 稀有程度为什么变成负对数¶
一个公平二选一结果带来一位信息,两个独立结果有四种可能,信息量应相加。概率相乘而信息量相加,提示使用对数;概率越小信息越多,因此取负号。理想长度 与这种组合规律一致。
熵把各事件的信息量按真实频率平均。二元实验里,接近确定的结果几乎没有意外,公平的一半一半则平均最难预测,所以曲线在中间最高。改变概率前先预测熵的方向,再看动画与数值。
熵给出概率模型下的平均信息尺度,不是某段文字对人的意义,也不是单个字符串必然能压到的长度。单符号前缀码受整数码长约束,长块编码才可逼近更细的平均值;若序列有相关性,还要利用条件分布。下一节问:若编码使用了错误概率,平均要多付多少代价?
与本图相连的定义与证明:6.2 · 模型失配增加平均编码代价。本节的具体条件与形式化范围见下文。
数学表述 6.1.1¶
常见事件可以分配短码,罕见事件用长码。编码的平均长度取决于整个概率分布,而不只是符号总数。
对有限分布 ,Shannon 熵为 理想信息长度为 。独立同分布源的长块编码能让平均每符号长度逼近熵;单符号前缀码的整数长度通常有额外开销。
例 6.1.1 把概念用于具体计算
分布 可用前缀码 ,平均长度为 位,恰好等于熵。
练习 6.1.1¶
四个等概率符号的熵是多少?
展开解答与检查
位;一个概率为 的确定符号的熵为零。
Lean 对照 6.1.1 命题、证明与适用边界
验证正概率 的单项 非负。代码还定义了有限分布的熵;编码下界、可达性和熵率并未形式化。
Information.entropy_term_nonnegative
theorem entropy_term_nonnegative (p : ℝ) (hp : 0<p) (hp₁ : p≤1) :
0 ≤ entropyTerm p := by
unfold entropyTerm
have hl : Real.log p ≤ 0 := Real.log_nonpos hp.le hp₁
exact mul_nonneg_of_nonpos_of_nonpos (neg_nonpos.mpr hp.le) hl
def entropy {n : ℕ} (p : Fin n → ℝ) : ℝ := ∑ i, -p i*Real.log (p i)
def crossEntropy {n : ℕ} (p q : Fin n → ℝ) : ℝ := ∑ i, -p i*Real.log (q i)
def klDivergence {n : ℕ} (p q : Fin n → ℝ) : ℝ :=
∑ i, p i*Real.log (p i/q i)