滨海市气象台有个不成文的规矩:新预报员入职,先跟老会计老关学三个月“报天气的成本”。老关满脑子都是“一条天气消息值几个比特”,新来的小陈却偏爱晴天,总觉得明晃晃的大太阳才是常态,他估的天气概率和真实记录差了老远。牛台长想敲打小陈,接连出了三道题:第一题,只按真实规律猜天气,平均最少猜几次?第二题,按小陈的“乐观手册”去描述真实一整年的天气,会多写多少比特?第三题,知道今天的天气,对猜明天到底省了多少力气? 第一题的答案叫熵,第二题多出来的比特叫相对熵(KL 散度),第三题省下的力气叫互信息。这一篇,我们就用这三个问题把信息论的地基走一遍——你会发现,所谓“衡量分布差异”,不过是把“冤枉钱”和“共享情报”两笔账算清楚。
对 AI 从业者来说,KL 散度与互信息是变分推断、特征选择、知识蒸馏等技术的共同数学底座。把它们变成直觉,读论文时每个符号都不再是拦路虎。
可视化演示
动态演示相对熵与互信息的核心机制,通过全局/局部/动态/静态四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
相对熵与互信息:KL散度 KL散度的定义与公式 KL散度的不对称性与性质 核心机制可视化 相对熵与互信息整体架构与关键组件
信息熵基础
牛台长出了第一道题:“今天到底什么天,我不许你偷看窗外,只许问'是或不是',要用最少的平均提问次数确定答案。” 小陈随口说:“晴、云、雨三种,最多两个问题总能问完。” 老关却拨了拨算盘:“按一年的天气记录来算,平均只需要 1.485 个问题——因为一半的日子是晴天,第一个问题问'是不是晴',一半时候一问就中。” 这就是直觉的第一次跳跃:不确定性不是“最多问几次”,而是“平均最少问几次”。
这个“平均最少提问次数”就是信息熵 H(X)。熵度量一个随机变量内在的不确定性:分布越分散越难猜,熵越大;如果一年到头只有晴天,概率为 1,熵就是 0,一个问题都不用问。熵的单位是比特(bit),一个比特就是一次“是/不是”的回答,也等价于一位二进制码。
把猜谜过程翻译成公式:每种天气 x 出现的概率是 P(x),“见到 x 时的惊讶程度”是 $-\log_2 P(x)$——概率越小越惊讶,携带的信息量越大;再用概率加权平均,就得到熵。小陈的乐观分布 Q 因为太集中(晴天 0.7),熵只有 1.157 比特,比真实 P 的 1.485 比特更低——这说明小陈的“世界”太确定了,而这份确定是错的。
1. 随机变量与取值空间:X 表示“今天的天气”,$\mathcal{X}$ 是所有可能天气组成的集合,即晴、云、雨。
2. 概率质量函数:P(x) 是每种天气在长期记录中出现的真实比例,所有概率之和为 1。
3. 单事件的信息量:$\log_2 \frac{1}{P(x)}$ 表示“看到 x 时收到的比特数”:越罕见的事件越惊讶、信息量越大;概率为 1 的事件信息量为 0。
4. 负号与加权求和:对所有可能天气按概率加权求平均,得到“平均惊讶程度”,即熵。
熵就是牛台长第一道题的“标准答案”。老关把这 1.485 比特记进账本,转头对小陈说:“你的乐观手册呢?按它过日子,我来算算一年要冤枉多少比特。”
相对熵KL散度
台长第二道题来了:“小陈,从今天起你负责写《年度天气编码手册》:给晴、云、雨分配最短的二进制码字,码长按你觉得的概率来定。” 小陈按 Q 分配:晴天概率高,就给短码。可真实天气偏偏按 P 发生——老关拿着小陈的手册去编码真实记录,每发生一天,都比理想手册平均多支付 0.133 比特,一年 365 天,多写出去约 48 个比特,这就是“错估”的代价。
这笔多付的钱,就是 KL 散度,也叫相对熵。“相对”二字很传神:它不是绝对量,而是相对于真实分布 P 而言,用 Q 去做近似时平均多出的成本。P 是真账本,Q 是错账本,KL 算的是“拿错账本记真账,平均每笔多付多少”。这个值衡量的正是两个分布的差异大小。
公式写作 $D_{KL}(P \parallel Q) = \sum_x P(x) \log_2 \frac{P(x)}{Q(x)}$。把对数拆开,$-\sum_x P(x)\log_2 Q(x)$ 是交叉熵,再减去 $H(P)$,剩下的就是纯粹的“冤枉钱”。代入数字:$D_{KL}(P \parallel Q)=0.133$ 比特,反过来 $D_{KL}(Q \parallel P)$ 约为 0.123 比特——KL 是不对称的,像“用我的秤称你的苹果”和“用你的秤称我的苹果”,误差通常不同。吉布斯不等式还保证 KL 恒非负,只有 P = Q 时才等于 0。
1. 两个分布同台:P 是真实分布(老关的记录),Q 是错估分布(小陈的直觉),两者必须定义在同一组天气上才有比较意义。
2. 比值与对数:$\log_2 \frac{P(x)}{Q(x)}$ 度量“该天气在真实世界比在小陈世界更常见还是更罕见”,单位是比特。
3. 按真实概率加权:用 P(x) 当权重求和,等价于“在真实数据上逐条累计冤枉钱”。
4. 非负性:吉布斯不等式指出,对任意两个分布,加权和恒不小于 0,这是信息论最核心的不等式之一。
5. 等号条件与不对称:只有两个分布完全相同时 KL 才为 0;交换前后顺序结果通常不同,所以不能说“KL 是距离”。
小陈看着那 48 个多出来的比特,有点不好意思:“原来乐观不是免费的,每一笔'把雨报成晴'的账面,最后都要由真实世界买单。” 老关叮嘱道:“记住这个方向——KL 一开口,先问清楚到底以谁为准。”
交叉熵
台长追问成本明细。老关把两行账并成一页:用正确手册本来就要付 1.485 比特,这是天气本身的熵;用错手册额外多付 0.133 比特,这是 KL;两项相加得 1.618 比特——这就是交叉熵 H(P,Q)。小陈恍然大悟:“所以交叉熵是总账单,KL 是冤枉钱,熵是本来就要付的基础开销。”
交叉熵的定义式为 $H(P,Q) = -\sum_x P(x)\log_2 Q(x)$:以真实分布 P 为权重,对“用 Q 的码本编码每个符号所需的码长”求平均。机器学习分类任务天天和它打交道:模型输出的是预测分布 Q,真实标签的独热分布是 P,损失函数里写的 cross_entropy 就是这一项。
为什么训练时只用交叉熵、不显式算 KL?因为把对数拆开:$H(P,Q) = H(P) + D_{KL}(P \parallel Q)$,其中 $H(P)$ 只由真实标签决定,在当前训练集上是常数。最小化交叉熵和最小化 KL 完全等价。顺着这个式子还能看出:当模型完美预测时 Q = P,交叉熵退化为熵,损失取到最小值;模型越离谱,它在真实标签上给出的概率越低,交叉熵就越大。
1. 以 P 为权重的对数期望:把 $-\log_2 Q(x)$ 看成“按 Q 码本编码 x 的码长”,再用真实频率 P(x) 加权平均。
2. 对数拆项:把 $-\log_2 Q(x)$ 拆成“正确码长 + 额外码长”两部分。
3. 期望的线性性:对拆出的两项分别求加权和,第一项正是熵 H(P),第二项正是 KL。
4. 最小化视角:训练中 H(P) 固定不动,优化器只需不断压低 D_KL。
小陈盯着“总账单 = 基础开销 + 冤枉钱”的等式,终于理解台长为什么让他天天盯交叉熵:那不是惩罚他对晴天的偏爱,而是在提醒他——基础开销改不了,但冤枉钱可以努力降到零。
联合与条件熵
台长把题目升级成双人版:“今天和明天连着报,平均要花多少比特?” 老关搬出两年的连续记录:先算“今天 + 明天”的联合分布,得到联合熵 H(X,Y);又问:“先告诉你今天的天气,再让你猜明天,平均还剩多少不确定?” 答案是条件熵 H(X|Y)。
联合熵描述两个变量放在一起时的整体不确定性,对应“把两天的天气拼成一条短讯一起编码”的平均码长。条件熵则描述“已知其中一个变量后,另一个变量还剩下的平均不确定度”。“已知”相当于免费提供情报,所以剩下的不确定度只会减少或持平,不会增加。
条件熵的公式用联合概率加权:$H(X \mid Y) = -\sum_x \sum_y P(x,y) \log_2 P(x \mid y)$。它和联合熵通过链式法则连在一起:$H(X,Y) = H(X) + H(Y \mid X)$——“两天的总谜题 = 今天的谜题 + 知道今天后明天的剩余谜题”。这也是老关的编码手册先报今天、再报“基于今天的明天”的原因:逐层拆账比把所有二日组合都编成独立码字更省。离散情形下还有不等式 $H(X \mid Y) \le H(X)$:信息只会帮忙,不会添乱。
1. 联合熵:对所有 (x, y) 组合按联合概率加权,衡量两天的组合不确定性。
2. 条件概率:已知今天天气为 y 时,明天为 x 的条件概率由联合概率归一化得到。
3. 条件熵:对条件概率取负对数,再用联合概率对所有组合加权,得到“剩余平均不确定度”。
4. 链式法则:把条件熵公式展开,与联合熵公式逐项对应,得到分解式。
小陈终于明白老关那本手册为什么分上下两册:上册写“今天”,下册写“在今天的条件下明天”。这种“先报一部分、再报余下部分”的思路,就是链式法则在日常编码里的影子。
互信息
台长抛出第三道题:“既然你知道今天的天气,猜明天时,平均省下了多少个问题?” 老关说:“原本猜明天要 H(明天) 个问题;知道今天后只剩 H(明天|今天) 个问题。省下的 H(明天) − H(明天|今天) 就是今天的天气里关于明天的'共享情报'——称为互信息 I(X;Y)。”
互信息衡量两个随机变量之间共享的信息量:一个变量透露了多少关于另一个变量的消息。它可以用 KL 散度一句话定义:$I(X;Y) = D_{KL}(P(x,y) \parallel P(x)P(y))$——把真实的联合分布与“假设两者完全独立”的乘积分布作对比,差距越大,说明两者越不独立、共享信息越多。
互信息有几种等价写法。KL 视角最优雅,减法视角最直观:$I(X;Y) = H(X) - H(X \mid Y)$,即“不确定性减少了多少”;对称式 $I(X;Y) = H(X) + H(Y) - H(X,Y)$ 说明它正是两块拼图重叠的部分。性质上:互信息恒非负;X 与 Y 独立时等于 0;任意函数变换下不增(数据处理不等式)。更重要的是,互信息捕捉任意非线性依赖,而皮尔逊相关系数只能看到线性关系——两个变量可以相关系数为 0,互信息却很大。
1. KL 视角:把联合分布与边缘乘积分布代入 KL 定义式,得到互信息的第一种形式。
2. 条件熵视角:把 log 项里的联合概率换成条件概率与边缘概率之积,化简后得到“不确定性减少量”。
3. 对称式:利用链式法则 $H(X,Y) = H(X) + H(Y \mid X)$ 替换条件熵,得到含两边熵的对称形式。
4. 独立情形:若两天天气独立,$P(x,y)=P(x)P(y)$,log 内为 1,互信息为 0。
小陈感叹:“原来'今天的云'和'明天的雨'之间的默契,能算成比特。” 老关点头:“信息论说穿了就是两件事:算冤枉钱,数共享情报。KL 是前者,互信息是后者。”
实际应用
牛台长终于放两人去 AI 一线实习。小陈盯着变分自编码器的训练曲线发愁,老关走过来说:“别慌,你手里已经有两把尺子——KL 用来对齐分布,互信息用来挑情报。”
现实中很多模型的骨架都建立在“分布对齐”上。变分推断里,真实后验 $p(z \mid x)$ 算不动,就找一个好算的 $q_\phi(z \mid x)$ 去近似;近似得好不好,用 KL 衡量。把对数似然改写成证据下界 ELBO,形式是“重建项 − KL 项”,最大化 ELBO 就是在最小化这个 KL,让近似后验既贴近数据、又不偏离先验太远。
特征选择是互信息最直接的主场:对每个特征 $x_j$ 计算它与标签 y 的互信息,按情报量排序取前 N 个,能在保留关键信息的同时砍掉无关维度,而且不依赖线性假设。知识蒸馏则把 KL 用在模型压缩上:让学生模型的软输出分布对齐老师模型的软输出分布,用 $D_{KL}(p_{\text{teacher}} \parallel p_{\text{student}})$ 当损失;温度越高,分布越“软”,暗知识搬运得越完整。
1. 证据下界:对数似然 $\log p_\theta(x)$ 恒不小于等式右侧,右侧即为 ELBO;最大化 ELBO 就是在近似地最大化似然。
2. 重建项与 KL 项:第一项让模型把 z 还原成 x 的能力更强,第二项把 $q_\phi$ 拉向先验 $p(z)$。
3. 特征选择排序:逐个特征与标签计算互信息,选贡献大的。
4. 蒸馏损失:师生两个分布之间的 KL 作为“对齐学费”,越小说明学生越像老师。
实习结束时,小陈在笔记上写下三行字:“ELBO 用 KL 踩刹车,特征选择用互信息找路标,蒸馏用 KL 交学费。” 老关看了直笑:“信息论不是公式比赛,是教你怎么用最少的比特把真实世界描述清楚——这一点,你出师了。”
AI 应用场景
变分自编码器的损失设计
阶段:模型训练 / 损失函数设计
解决的问题:真实后验分布 $p(z|x)$ 无法直接计算,传统方法只能放弃概率建模。VAE 用可学习的 $q_\phi(z|x)$ 近似后验,并把“近似得不好”的代价写成 ELBO 里的 $-D_{KL}(q_\phi \parallel p(z))$ 正则项,让潜变量既不会坍缩成单点,也不会飘到远离先验的真空区。
具体案例:训练人脸生成 VAE 时,如果去掉 KL 项,编码空间会碎成一个个孤岛,随机采样的 z 生成的人脸模糊失真;加上 KL 项后,z 平滑地落在标准高斯附近,对两个 z 做插值就能得到自然的渐变人脸。
高维特征筛选
阶段:特征工程 / 数据预处理
解决的问题:表格数据动辄上千维,很多特征与标签只有非线性关系,皮尔逊相关系数算出来接近 0,传统过滤法会误删关键特征。用互信息 I(特征;标签) 做单变量筛选,能捕捉任意依赖,且天然非负、量纲统一为比特,排序公平。
具体案例:电商点击率预估中,对“用户最近浏览类目”“距上次点击间隔”等 800 个特征逐一计算与“是否点击”的互信息,按排序保留前 200 个,模型 AUC 提升 1.2 个百分点,训练时间缩短一半。
知识蒸馏的软标签迁移
阶段:模型压缩 / 部署优化
解决的问题:大模型效果好但推理太慢,直接用小模型学硬标签会丢失类别间的相似性信息。蒸馏用 KL 散度让学生的概率输出贴近老师的概率输出,把“猫和狗有点像”这类暗知识搬过去。
具体案例:BERT 蒸馏到 TinyBERT,以 $D_{KL}(p_{\text{teacher}} \parallel p_{\text{student}})$ 在温度 T 下对齐输出分布,在保持 95% 效果的前提下把模型体积压缩 7 倍,单条样本延迟从 12ms 降到 2ms。
Python 演示
import math def entropy(p): """计算离散分布 p 的熵(比特)""" return -sum(pi * math.log2(pi) for pi in p if pi > 0) def kl_divergence(p, q): """计算 KL(P||Q), 单位比特""" return sum(pi * math.log2(pi / qi) for pi, qi in zip(p, q) if pi > 0 and qi > 0) def cross_entropy(p, q): """计算交叉熵 H(P,Q), 单位比特""" return -sum(pi * math.log2(qi) for pi, qi in zip(p, q) if pi > 0 and qi > 0) def mutual_information(joint, px, py): """由联合分布和边缘分布计算互信息 I(X;Y)""" mi = 0.0 for i in range(len(px)): for j in range(len(py)): if joint[i][j] > 0: mi += joint[i][j] * math.log2(joint[i][j] / (px[i] * py[j])) return mi def main(): # 真实天气分布 P 与预报员错估分布 Q P = [0.5, 0.3, 0.2] Q = [0.7, 0.2, 0.1] print("H(P) = %.4f 比特" % entropy(P)) print("H(Q) = %.4f 比特" % entropy(Q)) print("KL(P||Q) = %.4f 比特" % kl_divergence(P, Q)) print("KL(Q||P) = %.4f 比特" % kl_divergence(Q, P)) print("H(P,Q) = %.4f 比特" % cross_entropy(P, Q)) print("校验 H+KL = %.4f 比特" % (entropy(P) + kl_divergence(P, Q))) # 今天(X)与明天(Y)的联合分布, 行和为 P(X), 列和为 P(Y) joint = [[0.40, 0.08, 0.06], [0.10, 0.18, 0.05], [0.04, 0.05, 0.04]] px = [sum(row) for row in joint] py = [sum(joint[i][j] for i in range(3)) for j in range(3)] joint_flat = [joint[i][j] for i in range(3) for j in range(3)] print("P(X) = %s" % px) print("P(Y) = %s" % py) print("I(X;Y) = %.4f 比特" % mutual_information(joint, px, py)) print("校验 H+HY-HXY = %.4f 比特" % (entropy(px) + entropy(py) - entropy(joint_flat))) if __name__ == "__main__": main()
return -sum(pi * math.log2(pi) for pi in p if pi > 0)跳过零概率项,避免log2(0)报错,逐个累加负熵贡献if pi > 0 and qi > 0KL 只在 P、Q 同时为正的取值上累积,分母为 0 的点不贡献print("KL(P||Q) = %.4f 比特" % kl_divergence(P, Q))输出约 0.133 比特的“多付成本”print("校验 H+KL = %.4f 比特" % (entropy(P) + kl_divergence(P, Q)))验证“交叉熵 = 熵 + KL”恒等式joint = [[0.40, 0.08, 0.06], ...]手写一个合法的联合分布矩阵,全部格子求和恰为 1px = [sum(row) for row in joint]对行求和得到边缘分布 P(X)py = [sum(joint[i][j] for i in range(3)) for j in range(3)]对列求和得到边缘分布 P(Y)mi += joint[i][j] * math.log2(joint[i][j] / (px[i] * py[j]))逐格累加“联合 vs 独立乘积”的 KL,即互信息if __name__ == "__main__":保证脚本既能独立运行也能被 import 后复用
常见误区
误区KL 散度既然叫“散度”,应该和欧氏距离一样:D_KL(P||Q) 等于 D_KL(Q||P),两个分布互相量出来的差异一样大。
正解KL 并不对称,方向不同数值差别可能很大,比如文中 D_KL(P||Q)=0.133 比特,而 D_KL(Q||P)≈0.123 比特。原因是它以真实分布 P 为权重计算“用 Q 编码 P 的额外成本”,权重一变,结果就变。它更像寄快递的运费:从 A 城寄到 B 城和从 B 城寄回 A 城,路线相同,但计费规则(谁承担风险)不同,运费自然不同。
为何常见:名称里的“散度”容易让人联想到距离;而且很多资料只展示一个方向的公式,读者从没见过交换顺序后的数值对比。
误区公式里带着 log,当某个 P(x) 小于 Q(x) 时,那一项是负数,所以 KL 散度可以为负。
正解单个加项确实可能是负的,但 KL 是按 P 加权后的整体期望。吉布斯不等式保证总和永远 ≥ 0,且只在 P=Q 时等于 0。负数项会被其他更大的正数项完全抵消——就像某只股票亏了钱,但只要整个组合的仓位是盈利的,总收益依然为正。
为何常见:只盯着“单个符号的差额”看,忽略了加权求和的整体性质,以及 log 函数凹凸性带来的全局约束。
误区互信息大,说明两个变量的皮尔逊相关系数也大,两者是同一回事。
正解互信息衡量任意统计依赖,包括非线性依赖;皮尔逊相关系数只捕捉线性关系。比如 X 在 [−1,1] 上均匀分布,Y = X²,此时相关系数为 0,但 I(X;Y) 很大。做特征筛选时如果只看相关系数,会漏掉这类强非线性信号。
为何常见:日常工作习惯用相关系数衡量“关系”,很难想象“相关系数为 0 却高度相关”这种事。
误区交叉熵损失越小,说明模型学到的分布越接近真实分布,两者在任何场景下都等价。
正解在固定训练集上,交叉熵 = H(P) + KL(P||Q),H(P) 由真实标签决定、是常数,所以最小化交叉熵确实等价于最小化 KL。但交叉熵本身包含常数项 H(P):两个不同数据集的交叉熵数值不能直接比较;如果 P 是模型自定义的目标分布(比如蒸馏里的软标签),H(P) 不再固定,交叉熵与 KL 就不再等价。
为何常见:深度学习框架只暴露 loss 数值,很多人从没拆开看过交叉熵的内部结构,误把常数项也当成模型能力的指标。
误区互信息这么大,X 一定导致了 Y,找到强互信息的特征就能解释因果。
正解互信息只度量统计依赖,不区分因果方向,也不排除共同原因造成的虚假关联。“鸡叫”与“日出”互信息巨大,但鸡叫不导致日出。要做因果推断,需要干预实验、后门调整等更重的工具。
为何常见:人脑天然倾向把强相关脑补成因果,这是认知捷径;统计工具本身不会替你做因果判断。
面试题
Q1. 熵 H(X) 的公式中,对数取以 2 为底时,熵的单位是?
- A.奈特(nat)
- B.比特(bit)← 正确答案
- C.分贝(dB)
- D.赫兹(Hz)
答案:B。对数的底决定单位。以 2 为底时,每个答案对应一次“是否”判断,单位是比特;自然对数对应奈特;分贝是声学单位,赫兹是频率单位。就像“猜天气”游戏里的一次提问就是一个比特。
Q2. 关于 KL 散度 D_KL(P‖Q),下列说法正确的一项是?
- A.等于反向的散度
- B.恒为非负的实数← 正确答案
- C.可以取到负值
- D.与 Q 分布无关
答案:B。吉布斯不等式保证 KL 恒非负,等号仅在 P=Q 时成立。它像“多付的冤枉钱”:方向反了数值会变,但永远不会变负。A 错在对称性,C 错在非负性,D 错在它恰恰依赖 Q。
Q3. 已知 H(P)=2.0 比特且 D_KL(P‖Q)=0.5 比特,则交叉熵 H(P,Q) 等于?
- A.1.5 比特
- B.2.0 比特
- C.2.5 比特← 正确答案
- D.0.5 比特
答案:C。由恒等式 H(P,Q)=H(P)+D_KL(P‖Q),直接相加得 2.0+0.5=2.5 比特。这就像“基础开销 + 冤枉钱 = 总账单”,三者关系是本文的核心纽带。
Q4. 下列表达式中,可以用来表示互信息 I(X;Y) 的有?
- A.H(X)−H(X|Y)← 正确答案
- B.H(X)+H(Y)−H(X,Y)← 正确答案
- C.H(X,Y)−H(X|Y)
- D.H(Y)−H(X|Y)
答案:AB。A 是“知道 Y 后 X 不确定性减少的量”,B 是“总不确定 − 两者各自熵的和”,二者都等于互信息;C 化简为 H(Y),D 没有对应的恒等式。互信息是对称的共享拼图,A 和 B 只是两种不同的切法。
Q5. 当两个分布 P 与 Q 完全相同时,KL 散度 D_KL(P‖Q) 等于?
- A.等于常数 0← 正确答案
- B.等于常数 1
- C.趋于正无穷
- D.趋于负无穷
答案:A。当 P=Q 时,log(P/Q)=log 1=0,每一项都是 0,累加后 KL=0。就像用正确的编码手册记账,一分冤枉钱都不用多付;这也是吉布斯不等式给出的等号条件。
Q6. 分类任务用交叉熵训练时,关于其中熵项 H(P) 的说法正确的是?
- A.该项需要被优化
- B.是常数可以省略← 正确答案
- C.等于 KL 的大小
- D.必须单独计算
答案:B。训练集固定时,真实标签分布 P 是常数,H(P) 不随模型参数变化。最小化交叉熵等价于最小化 KL,所以优化时可以省略 H(P)。但换数据集或换任务时常数项会变,不能跨场景直接比较交叉熵数值。
Q7. 关于联合熵、条件熵与链式法则,下列成立的有?
- A.H(X,Y)=H(X)+H(Y|X)← 正确答案
- B.H(X,Y)=H(Y)+H(X|Y)← 正确答案
- C.H(X|Y)−H(X)≤0← 正确答案
- D.H(X,Y)=H(X)H(Y)
答案:ABC。链式法则给出联合熵的两种等价拆法,A、B 都正确;知道更多信息不会增加不确定性,C 反映条件熵不大于熵;D 是典型的“乘法幻觉”,联合熵只有在独立假设下才退化为加法,而不是乘法。
Q8. 用 KL 散度表达互信息时,正确的是?
- A.联合分布对边缘乘积的KL← 正确答案
- B.边缘分布之间直接算KL
- C.联合分布对条件分布的KL
- D.条件分布之间直接算KL
答案:A。互信息的定义就是联合分布 P(x,y) 与边缘乘积 P(x)P(y) 之间的 KL 散度:若两者差距大,说明变量远非独立、共享信息多。其余选项比较的对象不是“联合 vs 独立乘积”,与互信息定义不符。
Q9. 下列 AI 实践中,直接用到 KL 散度或互信息的有?
- A.VAE 的 ELBO 推导← 正确答案
- B.特征选择用互信息← 正确答案
- C.知识蒸馏的软目标← 正确答案
- D.高斯模糊图像增强
答案:ABC。VAE 的 ELBO 含负 KL 正则项,蒸馏损失是师生分布的 KL,特征选择用互信息排序,三者都是本文讲的工具;高斯模糊是图像处理里的卷积滤波,不涉及信息论度量。
Q10. 若随机变量 X 与 Y 相互独立,则互信息 I(X;Y) 等于?
- A.等于 H(X)
- B.等于 H(Y)
- C.等于常数 0← 正确答案
- D.等于常数 1
答案:C。独立时 P(x,y)=P(x)P(y),KL 里 log 内的比值为 1,取对数后为 0,每一项都是 0,互信息为 0。两个独立变量之间没有任何可共享的情报,就像两天的天气若互不影响,知道今天对猜明天毫无帮助。