Ran Wei/数学系列
English
计算机科学与人工智能的数学基础 — Ran Wei

信息论、熵与概率目标函数

证明有限信息恒等式及 KL 非负,连接预测、似然与解码,并明确支撑和计分单位后报告序列困惑度。

10 小时4 个时段3 个实验12 道练习与 2 道拓展10 道自测题

完成后你能够

  • 按声明 log 单位与解码条件算自信息。
  • 推有限熵、条件熵与链式。
  • 连接交叉熵、log 损失、似然与带条件码长。
  • 含零支撑证明 KL 非负及等号。
  • 推互信息和有限数据处理,不过度声称因果。
  • 按匹配词元单位报困惑度并区分微分熵。

开始之前

需模块 16、23、25;选学连续密度预览需模块 17。各实验均为独立标准库脚本。

目录

学习计划

10 小时

时间包含练习,是估计值;可按需要拆分时段。可选拓展练习额外需要 35 分钟。进度保存在当前浏览器,中英文版本共享。

1

信息量连接预测与编码

概率拟合为什么采用对数损失,困惑度究竟测什么?本课从明确模型建立有限离散熵、条件熵、交叉熵、KL 散度和互信息,证明相关不等式,连接期望损失、可解码编码与似然,最后讨论序列分解和限定的连续预览。每个信息量都说明对数底、字母表及平均单位。

检索准备:模块 16的对数不等式、模块 23的期望联合律、模块 25的似然。密度预览需模块 17。实验都是独立可运行标准库 CPU 脚本,不需外部语料或模型下载。

2

自信息、对数底与可解码编码

p(x)>0 的结果自信息(surprisal)是 −log_b p(x),声明 b>1。概率越低越意外,必然结果自信息零。底二为比特(bits),底 e 为纳特(nats)。独立结果概率相乘,自信息相加;一般联合概率分成条件概率,也可相加条件自信息,无需独立。对数把概率乘积转成可用的加性信息与损失。

模型不可能结果有无限自信息。按 p 取期望时,p(x)=0 的项权重零,以 t log t→0 的极限约定 0log0=0。但 p>0、另一个预测 q=0 的项不是零,而是无限期望损失。数学定义与实现都必须处理支撑。

换底只改变尺度:nats 除以 log2 得 bits。数值为一在两种单位含义不同,概率、长度和损失不能放入无单位列。后续将损失取指数时,底必须匹配;实验 3 展示 exp(bits) 的错误。

例题详解
三符号二进概率源有精确前缀码

概率 (1/2,1/4,1/4) 的自信息为 (1,2,2) bits。码字 0、10、11 具有这些长度,任何码字都不是另一个的前缀。期望长度 .5·1+.25·2+.25·2=1.5 bits/符号,等于期望自信息;固定两比特码则为 2。变量长码在可解码条件下可减平均长度。

前缀码没有一个码字作为另一字的开头。沿二叉树到叶得到一个符号,再从根开始,便可逐符号唯一解码。随意给极短码不是压缩成果,例如 0、1、01 的字符串 01 可代表第三符号,或前两符号连续。平均长度需要解码约定,不只是加权数值好看。

有限二进前缀码长度 ℓ_i 满足 Kraft 不等式 Σ2^(−ℓ_i)≤1。证明:长度 ℓ 的二进词对应 [0,1) 中长度 2^(−ℓ) 的二进子区间;无前缀意味着区间不相交,所以总长度≤1。第三节由此推熵下界。合格整数长度反过来存在前缀码是命名编码定理,阅读链接给进一步构造。

−log₂(.3) 通常不是整数,它是理想信息长度,不是已经存在的码字。取整和编码构造是另一步。分块或算术编码可在声明模型和解码条件下接近理想平均率,但分数对数不自动定义精确码。文件存储还有模型描述、头信息、有限块和实现成本。

至少两个正概率符号的非退化有限源,可取正整数 ℓ_i=ceil(−log₂p_i),满足 Kraft 和≤Σp_i=1;所述逆定理给这样的前缀码。各长度小于理想值加一,故期望长度<H₂(p)+1,后面下界则给≥H₂(p)。这界定平均编码,不分配分数码字。零概率符号可从声明源支撑排除,但要应对未见符号的预测系统需要独立支撑约定。若解码器不知道长度,终止或长度描述也有成本。这里命名存在定理,完整证明必要性与平均下界;树构造可另作编码拓展。

三符号前缀码树根的零分支直接到 a,右一分支再分零到 b、一到 c,码字零一零一一无前缀冲突,平均一点五比特。前缀叶码 0、10、110101a: 0; p=1/2b: 10; p=1/4c: 11; p=1/4E[length] = .5×1 + .25×2 + .25×2 = 1.5 bits
图 27.1

0、10、11 的叶结构保留解码。概率决定一比特或两比特长度,理想对数长度不能随意视为真实码字。

检验理解

哪个底给 bits?哪些零项可跳过?为什么平均长度需要解码条件?

查看答案

底二。只跳过源 p=0 的项,正 p 遇零 q 是无限损失。不唯一解码时同一比特串可表示不同源序列,不能恢复原数据。

3

熵、条件熵与链式法则

有限字母表 p 的 H_b(p)=−Σp_i log_b p_i,是同一规律下的期望自信息,不是一次实现的惊讶。概率≤1 使各项非负,熵零当且仅当变量确定。m 符号最大 log_bm、仅均匀取等号,第四节用 KL 证明。边界按声明字母表计,支撑较小不能取全均匀最大。

联合熵平均 −log p(x,y)。H(X|Y) 按 p(y) 加权 H(X|Y=y),只考虑正 p(y)。它不是某一个条件组,也不是对标签不加权平均。正联合格满足 p(x,y)=p(y)p(x|y),取负对数加权得到 H(X,Y)=H(Y)+H(X|Y),反顺序同理。

H(X,Y)=H(Y)+H(X∣Y)=H(X)+H(Y∣X).H(X,Y)=H(Y)+H(X\mid Y)=H(X)+H(Y\mid X).

独立时条件律等于边缘,所以联合熵是边缘之和。依赖时差额为第五节互信息。离散条件熵非负,故联合熵至少为任一边缘。Y=f(X) 的 H(Y|X)=0,链式给 H(Y)≤H(X),确定处理不能增加输出离散不确定性。

例题详解
带噪复制的条件不确定性小于独立比特

X 公平比特,Y=X XOR E,E 独立且翻转率 .1。联合四格 (.45,.05,.05,.45),两边缘都公平,熵各 1。给定 X 的不确定性 h₂(.1)≈.468996,故联合熵约 1.468996,小于独立和 2;差 .531004 即互信息。

有限离散条件熵平均降低,H(X|Y)≤H(X),独立时且仅此取等号,下面由 KL 身份证明。它不说每个条件组都更低。例如 Y 以 .9 选择确定零 X 组,以 .1 选择公平 X 组。边缘 P(X=1)=.05、熵约 .286397,而公平组熵 1 更高;加权条件熵 .1 仍更低。平均与所选组的量词不同。

反复链式得 H(X₁,…,X_T)=ΣH(X_t|X_<t),无需词元独立。上下文模型可表示依赖,unigram 模型则仅用边缘。预测的因果顺序是概率分解,不自动声称干预因果;所有条件项应在相关正概率前缀计算。

有限字母表确保熵有限、求和重排安全。可数无限字母表可有无限熵,∞−∞ 不能随便减,即使相对信息可直接定义。此课证明实验都有限;搬到无限词表或密度前要说明额外存在条件。

检验理解

由因子分解证链式。每个条件组都必须更低吗?序列条件和需要独立吗?

查看答案

正格对 log p(x,y)=log p(y)+log p(x|y) 加权。只有条件熵平均保证降低,个别组可升。条件链式适用依赖,边缘熵和则需独立。

4

交叉熵、期望损失、似然与码长

同一有序有限字母表的源 p 和预测 q,H_b(p,q)=−Σp_i log_bq_i。正 p 配零 q 为无穷,p=0 则零贡献。标签语义要匹配,一向量交换标签会改变结果,即使都归一化。非负、有限输入与和一是模型条件。

H(p,q) 不等于 H(q):前者 p 加权预测,后者 q 自己加权。模型自熵可因过度自信很低,真实源下损失却巨大;自信不等于正确。m 类均匀预测的交叉熵总 log_bm,而源熵随 p 变化,所以是明确字母表的固定参照。

例题详解
错误分类频率增加对数损失

p=(.5,.3,.2)、q=(.25,.5,.25),H₂(p)≈1.485475,交叉熵 .5·2+.3·1+.2·2=1.7,超额约 .214525。q 自加权给 H₂(q)=1.5,是另一量。实验也算反向,并不相等。

IID 分类观察的负 logL 为 −Σlog q(x_i)。经验频率 p_hat_i=c_i/n,按类别合并并除以 n 就是 H(p_hat,q)。固定 q、支撑兼容的 IID p 下,其期望为 H(p,q)。若 q 用同一数据拟合,训练损失并不自动无偏估计未来损失。

无约束分类 MLE 为经验频率,零计数为合法边界,却可对未见类别给零,导致未来无限损失。加性平滑 q_i=(c_i+a)/(n+ma)、a>0 在固定字母表上保留正支撑。可通过合适 Dirichlet 模型解释,是 beta 的多类扩展,也可直接声明为平滑规则。它改变估计器,不能用保留标签暗调。

码长连接要准确。完整二进概率模型 q_i=2^(−ℓ_i) 对应整数前缀长度时,源期望长度恰为 H₂(p,q)。一般 q 需要取整和构造。反之,任意有限二进前缀码取 Z=Σ2^(−ℓ_i)≤1,r_i=2^(−ℓ_i)/Z,则 ℓ_i=−log₂r_i−log₂Z。平均长度 H₂(p,r)−log₂Z,由下一节 KL 非负至少为 H₂(p),从而证明带解码条件的下界。

这只是源下平均下界,不说每条消息长度至少其自信息,也不禁止个别消息极好压缩。模型开销和有限块成本另计。有限保留词元仅估其经验损失,不证明总体熵或所有质量。实验刻意报告平滑频率模型在固定测试上差于均匀,避免暗示训练频率自动有泛化优势。

交叉熵与方向错配三类源点五点三点二加权预测点二五点五点二五的自信息二一二,交叉熵一点七比特,分成源熵与正向散度。源权重乘预测自信息类别pq−log₂qp(−log₂q)a.5.2521b.3.51.3c.2.252.4H₂(p,q) = 1.7 = H₂(p) + D₂(p||q)1.7 = 1.485475 + .214525 bits
图 27.2

交叉熵用源 p 加权 −log q,等于源熵加方向性错配成本,不是模型自熵。

检验理解

交叉熵用谁加权?如何由似然推出?分数自信息是否自动是真实整数码长?

查看答案

用 p。按分类合并负 logL 再除 n。真实码需构造、取整或分块开销;只有特定编码模型条件下精确等式成立。

5

KL 散度、非负、等号与支撑方向

有限 p,q 的 D_b(p||q)=Σ_{p_i>0}p_i log_b(p_i/q_i),需要的 q_i 为零则无穷,源零项为零。支撑兼容时重排得到 H_b(p,q)=H_b(p)+D_b(p||q)。方向明确:p 是给予结果权重的源,不是对称距离。

D(p∥q)=∑i:pi>0pilog⁡piqi,H(p,q)=H(p)+D(p∥q).D(p\Vert q)=\sum_{i:p_i>0}p_i\log\frac{p_i}{q_i},\qquad H(p,q)=H(p)+D(p\Vert q).

用自然 log 的 −log u≥1−u、u>0 证明。差函数 g=−logu−1+u,导数 1−1/u,在一以下递减、以上递增,仅一时零。对 p 正支撑 S 应用 u=q_i/p_i、乘 p_i 并加总,D≥Σ_S(p_i−q_i)=1−Σ_Sq_i≥0。其他底除以正 logb。需要的 q 为零时无穷仍非负。

等号要求每个正源处 q_i=p_i,且没有支撑外质量。源和一使匹配已用完全部 q,因此完整 p=q。不能在证明中默设所有概率正而丢零处理。取均匀 q 得 D=log_bm−H_b(p),证最大熵界及均匀等号;也说明所有有限预测中真实源最小化交叉熵。

例题详解
支撑错配可一方向有限,反向无穷

p=(1,0)、q=(.5,.5),D₂(p||q)=1 bit;反向 q 有第二结果正质量,p 却预测零,所以无穷。正向量也一般不对称:实验的三类例子约 .214525 与 .198965 bits。

KL 也一般不满足三角不等式。例如 Bernoulli .1、.5、.9 的 D₂(.1||.9)≈2.53594,而经过 .5 的两散度和≈1.26797,违反三角。平方根或对称替代要有自己的定义与证明,随便对称化不能自动叫度量。

拟合时最小 D(p||q_θ) 等价于最小源交叉熵,因为 H(p) 固定;反向改变权重与目标,未知真实 p 时还可能不可计算。受限族最小可正,KL 非负不保证族含真源或优化器找到最佳。模型、数值优化和数学下界是不同声明。

近似相等分布的浮点计算可给很小负 KL。先检验概率与支撑,稳定计算并谨慎加总,再按尺度解释舍入;不能大负值也静默裁零。实验归一化检查披露容差,全零权重则根本不能归一化。

交互演示

探索器明确将非负类别权重归一化成 p,q,按选择单位报告熵、双向交叉熵与 KL。正源配零预测显示无穷,匹配 q=p 给零散度,共同零类无害。柱图是概率,理想码长仍只是信息量,除非另有解码方案。

将零预测换成 epsilon 会改变模型与损失,可作为声明后重新归一化的平滑,但不是原分布精确散度。数学无穷与对数域数值稳定要分开。

检验理解

哪个不等式证明非负?零概率下等号需要什么?反方向为何改变拟合?

查看答案

用 −logu≥1−u 并计支撑外 q。等号要完整规律相同。反向改变对数权重,并可能要求模型生成结果处未知真实概率。

6

互信息、依赖与处理

有限联合律的 I(X;Y)=D(p_XY||p_Xp_Y)。正联合格的边缘正,因此分母有效。展开得到 I=H(X)+H(Y)−H(X,Y)=H(X)−H(X|Y)=H(Y)−H(Y|X)。KL 非负及等号给 I≥0,零恰是联合乘积分解独立。虽然一般 KL 有方向,这个联合对边缘乘积表达对 X,Y 对称。

离散条件熵非负给 I≤min(HX,HY),并证明条件平均降低。确定 Y=f(X) 给 I=H(Y),不必等于 H(X),多对一可丢信息,可逆重标签则保留。信息量描述规律下依赖,不识别因果方向,共同源也可令互信息大。

例题详解
独立噪声通道丢失输入信息

公平比特的 .1 翻转复制 I=1−h₂(.1)≈.531004。再将 Y 替换为完全独立公平 Z,X,Z 独立,I=0。翻转零保留一 bit,翻转 .5 无信息。随机噪声在别的模型可增输出熵却减输入信息,所以输出熵不是保留信息的指标。

条件互信息是在正 z 上按 p(z) 加权的条件联合对条件边缘乘积 KL,所以非负。熵展开给 I(X;Y,Z)=I(X;Y)+I(X;Z|Y)。有限 Markov 关系 X→Y→Z 表示给定 Y 后 X,Z 条件独立,故后项零。另一顺序展开为 I(X;Z)+I(X;Y|Z)≥I(X;Z),由此完整证明有限数据处理不等式 I(X;Z)≤I(X;Y)。

确定 Z=f(Y) 是特殊情况,也可用只依赖 Y 而不额外访问 X 的随机通道。增加独立观察 X 的新传感器可能帮忙,但不满足处理链;随机处理可增加输出熵,定理约束的是关于原输入的信息。应说明比较的是哪个输入。

互信息不同于线性协方差。有限例子 X 在 −1,0,1 等概率,Y=X²,Cov 由对称为零,却是非恒定确定函数,所以 I=H(Y)>0。稀疏数据估信息还有偏差和支撑问题,经验表不自动为准确总体律。连续数据离散化改变变量和测量的信息。

有限数据处理关系输入 X 到中间 Y 再到 Z,给 Y 后 X Z 条件独立,X Z 信息不高于 X Y;不能将它误读成输出熵必降。处理链的条件必须成立XYZ给定 Y 后,X 与 Z 条件独立。I(X;Z) ≤ I(X;Y)新随机噪声可增 H(Z),却不增关于 X 的信息。
图 27.3

处理链要求给定中间变量后,输入与最后输出条件独立。关于输入的互信息不会沿链增加,即使新噪声增加输出熵。

检验理解

为何互信息零恰是独立?数据处理说输出熵总减吗?Cov 零能推出信息零吗?

查看答案

KL 等号表示联合等于边缘乘积。定理约束原输入信息,噪声可增输出随机性。非线性依赖可以 Cov 零但信息正。

7

序列似然、困惑度与密度预览

有限序列 q(x₁:T)=∏q(x_t|x_<t),说明起始上下文与正前缀约定。总负 logL 是条件词元损失和,不需独立;unigram 是受限特殊模型。变长字符串的完整生成律还需终止概率;不计结束词元时可为条件或部分评估分数,应如实命名。

每计分词元平均 nats L=−Σlogq/T,困惑度(perplexity)为 expL;bits 则 2^L_bits。它是所赋词元概率几何平均的倒数,不需整数,也不字面等于模型考虑候选数。m 词元均匀模型给困惑度 m,只是特殊直觉。

例题详解
改变词元单位可改变困惑度而保持字符串概率

两个人工联合模型都给同一原字符串概率 1/16。两词元计分给 mean nats=log4、困惑度 4,四词元给 log2、困惑度 2。这里只是分母改变,并非字符串概率改善。比较需相同分词、计分数据、上下文与概率语义。

不同长度序列的语料词元平均,应总计损失/总计词元;每句均值再等权平均是另一问题。说明 padding、提示、开始结束和掩码位置是否计分,不能暗用不同分母。依赖序列词元也不自动是独立标准误样本,统计不确定性需合适独立序列或主体。

困惑度测指定评估分布的预测 log 损失,不单独衡量真实、有用、公平、推理或全部压缩成本。低均损失可同时有罕见严重失败,换分布即换目标,模块 26 的选择规则仍适用。需要词元无支撑的无穷是模型问题;巨大有限损失的指数溢出是表示问题,后者报告 log 损失仍有意义。

连续选学:密度微分熵 h=−∫f logf,在积分定义良好时成立,不是精确实数点离散熵,因为点概率零。Uniform(0,a) 密度 1/a,h=log a;a=.25 时密度 4、nats 熵负。Y=cX、c≠0,在正确变换可积条件下 hY=hX+log|c|,离散非负与单位不变不能照搬。

充分正则的等宽细分,H(离散化 X)≈h(X)−logΔ,记录分辨率成本;不是任意混合分布或无限熵密度的恒等式。连续 KL 要共同参考测度及支撑可积条件,两个规律正确坐标变换时 Jacobian 在比中消去。完整连续信息论属后续,不能隐藏在本课有限证明内。

困惑度分母与单位同一原字符串概率十六分之一,两词元平均 log 四困惑度四,四词元平均 log 二困惑度二;概率没有改善。同一字符串概率,不同平均单位q(raw string)=1/16; total NLL=log162 个计分词元mean=log4; perplexity=44 个计分词元mean=log2; perplexity=2匹配分词、底、位置与上下文后再比较。
图 27.4

困惑度需匹配底与计分词元分母。连续密度的熵另依赖坐标尺度,允许为负。

检验理解

序列分解需独立吗?语料词元困惑度用哪个分母?微分熵为何可负?

查看答案

条件链式适用依赖。使用总计分词元数。密度可大于一且坐标缩放改变微分熵,不是点概率熵。

8

常见误解

错误说法 修正
一 bit 与一 nat 相同。 按 log2 换算并匹配指数底。
所有零概率贡献都零。 正源遇零预测为无穷。
交叉熵用 q 加权。 H(p,q) 按 p 平均。
KL 是对称度量。 方向、支撑、三角失败重要。
所选条件组熵总减。 不等式针对加权平均。
互信息给因果方向。 它描述联合依赖。
随机处理总降输出熵。 Markov 条件下降原输入信息。
任意分词的困惑度可比。 单位和概率约定需一致。
微分熵总非负。 密度单位和宽度改变它。
9

三个可复现实验

实验 1 · 熵、方向 KL 与信息

下载 lab1_entropy_kl_and_information.py

"""Finite information measures in bits, with explicit support conventions."""
import math


def validate(p):
    if not p or any(not math.isfinite(x) or x < 0 for x in p) or not math.isclose(math.fsum(p), 1., abs_tol=1e-12, rel_tol=0.):
        raise ValueError("probabilities must be finite, nonnegative, and sum to one")


def entropy(p):
    validate(p)
    return -math.fsum(x*math.log2(x) for x in p if x > 0)


def cross_entropy(p, q):
    validate(p)
    validate(q)
    if len(p) != len(q):
        raise ValueError("same ordered alphabet required")
    if any(x > 0 and y == 0 for x, y in zip(p, q)):
        return math.inf
    return -math.fsum(x*math.log2(y) for x, y in zip(p, q) if x > 0)


def kl(p, q):
    return cross_entropy(p, q)-entropy(p)


if __name__ == "__main__":
    p, q = [.5, .3, .2], [.25, .5, .25]
    print(f"p={p}; q={q}; same ordered alphabet; units=bits")
    print(f"H(p)={entropy(p):.6f}; H(p,q)={cross_entropy(p,q):.6f}; KL(p||q)={kl(p,q):.6f}; KL(q||p)={kl(q,p):.6f}")
    assert abs(cross_entropy(p,q)-entropy(p)-kl(p,q)) < 1e-12
    print(f"KL([1,0]||[.5,.5])={kl([1.,0.],[.5,.5]):.6f}; reverse={kl([.5,.5],[1.,0.])}")
    joint = [.45, .05, .05, .45]
    independent = [.25]*4
    mi = kl(joint, independent)
    print(f"Fair binary input, independent flip probability.1: MI={mi:.6f}; H(Y|X)={entropy([.1,.9]):.6f}")
    print(f"H(X,Y)={entropy(joint):.6f}; H(X)+H(Y)-H(X,Y)={2-entropy(joint):.6f}")
    assert abs(mi-(1-entropy([.1,.9]))) < 1e-12
    code_p, lengths = [.5,.25,.25], [1,2,2]
    expected = math.fsum(x*l for x,l in zip(code_p,lengths))
    print(f"Prefix code0/10/11: expected length={expected:.6f}; entropy={entropy(code_p):.6f}")
输出
p=[0.5, 0.3, 0.2]; q=[0.25, 0.5, 0.25]; same ordered alphabet; units=bits
H(p)=1.485475; H(p,q)=1.700000; KL(p||q)=0.214525; KL(q||p)=0.198965
KL([1,0]||[.5,.5])=1.000000; reverse=inf
Fair binary input, independent flip probability.1: MI=0.531004; H(Y|X)=0.468996
H(X,Y)=1.468996; H(X)+H(Y)-H(X,Y)=0.531004
Prefix code0/10/11: expected length=1.500000; entropy=1.500000

预测无穷方向,证明恒等式,解释前缀码等号与噪声比特条件熵。

实验 2 · 小型保留频率模型

下载 lab2_frequency_language_model.py

"""A tiny categorical unigram model evaluated on a fixed held-out token list."""
import collections
import math


if __name__ == "__main__":
    alphabet = ("a", "b", "c")
    training = list("aaaaaabbbc")
    test = list("abcac")
    counts = collections.Counter(training)
    # Alphabet and additive smoothing are specified before examining test tokens.
    alpha = 1.
    models = {"uniform": {t:1/3 for t in alphabet},
              "training-only smoothed unigram": {t:(counts[t]+alpha)/(len(training)+alpha*len(alphabet)) for t in alphabet}}
    print(f"Fixed alphabet={alphabet}; training counts={dict(counts)}; test tokens={test}; smoothing alpha=1")
    for name, model in models.items():
        losses = [-math.log(model[t]) for t in test]
        nll = math.fsum(losses)
        average = nll/len(test)
        bits = average/math.log(2)
        print(f"{name}: probabilities={[round(model[t],6) for t in alphabet]}")
        print(f"  held-out total NLL={nll:.6f}, mean nats/token={average:.6f}, bits/token={bits:.6f}, perplexity={math.exp(average):.6f}")
    print("This fixed unigram approximation ignores order and context. Its poor held-out result cannot be repaired by fitting test counts.")
    sequence_probability = .5*.8*.6
    print(f"Conditional sequence example: .5*.8*.6={sequence_probability:.6f}; chain NLL={-math.log(sequence_probability):.6f}")
    print("The chain factorisation uses conditional probabilities; it does not require independent tokens.")
输出
Fixed alphabet=('a', 'b', 'c'); training counts={'a': 6, 'b': 3, 'c': 1}; test tokens=['a', 'b', 'c', 'a', 'c']; smoothing alpha=1
uniform: probabilities=[0.333333, 0.333333, 0.333333]
  held-out total NLL=5.493061, mean nats/token=1.098612, bits/token=1.584963, perplexity=3.000000
training-only smoothed unigram: probabilities=[0.538462, 0.307692, 0.153846]
  held-out total NLL=6.160338, mean nats/token=1.232068, bits/token=1.777498, perplexity=3.428310
This fixed unigram approximation ignores order and context. Its poor held-out result cannot be repaired by fitting test counts.
Conditional sequence example: .5*.8*.6=0.240000; chain NLL=1.427116
The chain factorisation uses conditional probabilities; it does not require independent tokens.

测试以前固定字母表和平滑,推 unigram 概率,解释为何此次训练频率未胜均匀。

实验 3 · 单位、支撑与计分修复

下载 lab3_units_support_and_tokenisation.py

"""Challenge units, invalid PMFs, zero support, and per-token comparisons."""
import math
def validate(p):
    if not p or any(not math.isfinite(x) or x < 0 for x in p) or not math.isclose(math.fsum(p), 1., abs_tol=1e-12, rel_tol=0.):
        raise ValueError("probabilities must be finite, nonnegative, and sum to one")


def cross_entropy(p, q):
    validate(p)
    validate(q)
    if len(p) != len(q):
        raise ValueError("same ordered alphabet required")
    if any(x > 0 and y == 0 for x, y in zip(p, q)):
        return math.inf
    return -math.fsum(x*math.log2(y) for x, y in zip(p, q) if x > 0)


if __name__ == "__main__":
    for bad in ([.8,.4], [-.1,1.1], [math.nan,1.], [0.,0.]):
        try:
            validate(bad)
        except ValueError:
            print(f"Rejected invalid probability list: {bad}")
    bits = 1.
    print(f"One bit loss: wrong exp(bits)={math.exp(bits):.6f}; correct 2**bits={2**bits:.6f}")
    print(f"Nats conversion={bits*math.log(2):.6f}; exp(nats)={math.exp(bits*math.log(2)):.6f}")
    print(f"Required support missing: cross-entropy([.5,.5],[1,0])={cross_entropy([.5,.5],[1.,0.])}")
    # Artificial joint models assign the same probability to the same raw string.
    probability = 1/16
    nll = -math.log(probability)
    for tokens in (2,4):
        ppl = math.exp(nll/tokens)
        print(f"Same raw-string probability1/16, {tokens} scored tokens: mean nats={nll/tokens:.6f}, perplexity={ppl:.6f}")
    print("A smaller token perplexity here reflects a different unit count, not a better raw-string probability.")
    p = .25
    print(f"Density preview: Uniform(0,.25) density=4, differential entropy nats={math.log(p):.6f}; exact-point probability=0")
    print("Differential entropy can be negative and changes with coordinate units; discrete entropy's nonnegativity does not transfer.")
输出
Rejected invalid probability list: [0.8, 0.4]
Rejected invalid probability list: [-0.1, 1.1]
Rejected invalid probability list: [nan, 1.0]
Rejected invalid probability list: [0.0, 0.0]
One bit loss: wrong exp(bits)=2.718282; correct 2**bits=2.000000
Nats conversion=0.693147; exp(nats)=2.000000
Required support missing: cross-entropy([.5,.5],[1,0])=inf
Same raw-string probability1/16, 2 scored tokens: mean nats=1.386294, perplexity=4.000000
Same raw-string probability1/16, 4 scored tokens: mean nats=0.693147, perplexity=2.000000
A smaller token perplexity here reflects a different unit count, not a better raw-string probability.
Density preview: Uniform(0,.25) density=4, differential entropy nats=-1.386294; exact-point probability=0
Differential entropy can be negative and changes with coordinate units; discrete entropy's nonnegativity does not transfer.

拒无效概率,修 bit/nat 指数,说明同字符串概率不同困惑度。密度预览需模块 17。

10

十四题与完整解答

练习 1–12 必做,选学 13–14 在十小时以外加 35 分钟,连续替代需模块 17。

练习 1★★★计算6 分钟

算公平及 Bernoulli(.1) 的 bits 熵,将后者换 nats。

查看解答

公平为 1,.1 的 h₂≈.468996,乘 log2 得 .325083 nats。换底只改单位。

练习 2★★★计算6 分钟

p=(.5,.3,.2)、q=(.25,.5,.25),求交叉熵及正向 KL。

查看解答

交叉熵 1.7,源熵约 1.485475,散度约 .214525 bits。模型自熵是另一加权。

练习 3★★★计算6 分钟

p=(1,0)、q=(.5,.5) 两方向 KL 如何?

查看解答

正向 1 bit,反向无穷,因为正 q 源质量遇零预测。只跳零源项,不能跳需要的零预测。

练习 4★★★计算6 分钟

一 bit 损失的困惑度多少?1/16 字符串的两/四词元值呢?

查看解答

一 bit 给 2,也等于 exp(log2)。两分母给 4 和 2,原字符串概率相同。exp1 对一 bit 错误。

练习 5★★★proof14 分钟

含零概率证有限 KL 非负等号,再推最大熵界。

查看解答

需要的 q 零则无穷,否则在正源支撑用 −log(q_i/p_i)≥1−q_i/p_i,加总得 D≥1−Σ_Sq_i≥0。等号完整匹配 p=q。均匀 q 给 D=log_bm−H_b(p),所以 H≤log_bm,仅均匀相等。

练习 6★★★proof14 分钟

推链式及联合/边缘乘积 KL 的互信息。

查看解答

正格 log联合=log边缘+log条件,加权得 HXY=HY+H(X|Y)。展开 log[pXY/(pXpY)] 得 I=HX+HY−HXY,KL 证明非负,等号恰独立。

练习 7★★★proof14 分钟

由 IID 似然推经验交叉熵,并证有限二进前缀码平均下界。

查看解答

负 logL 按类别合并除 n 得 H(p_hat,q)。Kraft 给 Z≤1,r_i=2^(−ℓ_i)/Z,平均长 H₂(p,r)−log₂Z≥H₂(p)。解码与正码质量条件不可省。

练习 8★★★application10 分钟

公平输入独立 .1 翻转,算边缘、联合、条件熵与互信息。

查看解答

四格 .45,.05,.05,.45,两边缘公平;条件 .468996,联合 1.468996,信息 .531004 bits。独立翻转是模型条件,不由少量观察推出。

练习 9★★★application10 分钟

训练计数 6,3,1、固定三类、平滑一,推 q 并说明保留计分。

查看解答

q=(7,4,2)/13,正且归一。测试不改计数或按标签调平滑。abcac 均损失约 1.232068 nats、困惑度 3.428310,差于均匀 3;有限结果不定总体排序。

练习 10★★★application10 分钟

X 在 −1,0,1 均匀,Y=X²,求 Cov 与信息。

查看解答

EX=0、EXY=EX³=0,所以 Cov0。Y 在 0,1 质量 1/3,2/3,由 X 确定,I=H₂Y≈.918296 bits。线性不相关不表示独立。

练习 11★★★diagnosis10 分钟

H(p,q) 用 q 加权,需要的零预测写零损失,KL 称对称。修复。

查看解答

按源 p 平均 −logq;正 p 配零 q 无穷,只有 p 零可跳。方向改变权重支撑,有限/无穷例即反驳对称。先检验标签与归一化。

练习 12★★★diagnosis10 分钟

语料等权平均句均值、未写词元约定,又比较不同分词器困惑度。修复。

查看解答

词元指标用总损失/总计分词元,列提示、padding、开始结束、上下文及底。相同概率词元约定比较,或以有依据共同原数据单位;分母不同可改困惑度却不改字符串概率。

练习 13★★★extension15 分钟

用条件信息链式证 X→Y→Z 有限数据处理。

查看解答

条件独立给 I(X;Z|Y)=0,故 I(X;YZ)=I(X;Y)。反顺序为 I(X;Z)+I(X;Y|Z)≥I(X;Z),后项为加权 KL 非负。额外访问 X 的处理器不在条件内。

练习 14★★★extension20 分钟

CS:给个别条件组熵增但平均减的例子。AI 替代:推均匀微分熵与缩放。

查看解答

CS 的 .9 确定零组与 .1 公平组给边缘 .05、熵 .286397,公平组 1 较大,加权 .1 较小。AI 均匀宽 a 的 h=log a,Y=cX 的密度除 |c|,代入积分得 hY=hX+log|c|;a<1 的负值有效。

11

十题自测

1
哪个 log 给 bits?
2
交叉熵中正 p_i 但 q_i=0 如何?
3
谁加权 H(p,q)?
4
什么建立 H(p,q)≥H(p)?
5
KL 是对称度量吗?
6
有限互信息何时零?
7
数据处理约束什么?
8
mean nats/token 如何转困惑度?
9
微分熵可以负吗?
查看答案

IID logL 按类别计数合并为经验 H。H(p,q)=H(p)+D,用 −logu≥1−u 在正源支撑证明非负,需要 q 零则无穷。噪声公平比特携带 1−h₂(.1) bits。条件序列无需词元独立。困惑度用匹配底指数化均损失,比较前需相同分词、位置、上下文与权重。

12

带问题阅读

读 Stanford 信息量讲义、变长编码及连续信息预览。本课有限证明和原创例子明确处理零支撑,连续为后续选学。

时间 阅读问题
第一阶段 · 15 分钟 哪个律加权每个 log,条件分解在何处进入?
第四阶段 · 15 分钟 哪些解码、支撑和单位条件支持各界?
13

检索结业与下一步

计算有限信息,证明 KL 与链式,推似然损失及码长下界,给正确困惑度报告,解释依赖而不混淆因果。

结业任务:算三类错配,找无穷方向,修底或词元分母比较,将依赖序列概率追踪到加性条件损失。

进入下一课的标准:能把概率模型连接 log 损失。下一课研究抽样梯度与正则化训练。返回总览。

14

符号与双语术语

术语或符号 含义 English
自信息 / bit / nat 负 log 概率 / 二 / e 底单位 Surprisal / bit / nat
H(p) / H(p,q) 源熵 / 期望预测自信息 Entropy / cross-entropy
D(p q) / 支撑
I(X;Y) 联合对边缘乘积信息 Mutual information
前缀码 / Kraft 可解码叶码 / 长度约束 Prefix code / Kraft
困惑度 / 计分词元 均损失指数 / 平均单位 Perplexity / scored token
h(X) / 密度 微分熵 / 连续参考密度 Differential entropy / density