信息论:熵、交叉熵与 KL 散度
自信息
越意外的事越"值钱"
熵
平均要花几个 bit
交叉熵
用错密码本要多付多少
KL 与互信息
两个分布差多远
【开场场景】8 匹马赛跑,实力完全相当。要告诉朋友谁赢了,你需要几个二进制位?答案是 $3$ 个($2^{3}=8$)。可如果 1 号马赢的概率是 $0.9$,你几乎每次都发同一条消息,平均只要不到半个 bit。这就是信息论的全部出发点:越确定的事,携带的信息越少;越意外的事,越"值钱"。把这个想法量化成公式,你就得到了熵;再把它变成"模型与真相的差距",你就得到了交叉熵和 KL——也就是今天每一个 AI 模型在优化的那个数。
① 是什么:从自信息到互信息
啥五个概念,一条链
① 自信息:$I(x)=-\log_2 p(x)$。概率越小,这个值越大——"太阳从西边升起"比"今天天晴"信息量大得多。
② 熵(entropy):$H(p)=-\sum_{x}p(x)\log p(x)$,也就是自信息的期望 $E_{x\sim p}\left[-\log p(x)\right]$。大白话:用最好的编码方案,平均要花几个 bit。
③ 交叉熵(cross-entropy):$H(p,q)=-\sum_{x}p(x)\log q(x)$。真相是 $p$,可你拿着密码本 $q$ 去编码,平均要花的 bit 数。
④ KL 散度:$D_{\mathrm{KL}}(p\|q)=\sum_{x}p(x)\log\frac{p(x)}{q(x)}$,它衡量"用 $q$ 代替 $p$ 多付的那部分",因为恒有 $H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)$。
⑤ 互信息:$I(X;Y)=H(X)-H(X\,|\,Y)=D_{\mathrm{KL}}\big(p_{XY}\,\|\,p_Xp_Y\big)$,衡量"知道 $Y$ 之后,$X$ 的不确定性降了多少"——也就是两个变量共享多少信息。$X$ 与 $Y$ 独立时它等于 $0$。
② 怎么想到的
思解题心法:先认出"谁是真相,谁是模型"
$H(p,q)$ 和 $D_{\mathrm{KL}}(p\|q)$ 里,第一个参数是真相 $p$,第二个是模型 $q$。顺序写反了,含义完全变了——它们不对称。
训练数据给出经验分布 $\hat{p}$,模型输出 $q_\theta$,最小化 $H(\hat{p},q_\theta)$。因为 $\hat{p}$ 是固定的,$H(\hat{p})$ 是常数,所以"最小化交叉熵"等价于"最小化 KL"——这就是分类损失的由来。
警惕零概率。$q(x)=0$ 而 $p(x)>0$ 时,$\log 0$ 会炸。工程上要 clamp、加 eps、或用框架提供的数值稳定实现(比如把 softmax 与交叉熵合并成一个算子)。
底数只是单位换算。$\log_2$ 得 bit,$\ln$ 得 nat,$1\ \text{nat}\approx1.443\ \text{bit}$。PyTorch 的 CrossEntropyLoss 用的是自然对数。
证信息论的核心定理与公式
推导思路(用 Jensen 不等式证 $D_{\mathrm{KL}}\geq 0$):①把 KL 改写成期望形式:$D_{\mathrm{KL}}(p\|q)=\sum_x p(x)\log\frac{p(x)}{q(x)}=-E_{x\sim p}\left[\log\frac{q(x)}{p(x)}\right]$。②对数函数 $\log$ 是凹函数,由 Jensen 不等式(凹函数情形)$E[\log Z]\leq\log E[Z]$。③取随机变量 $Z=\frac{q(x)}{p(x)}$,则 $E_{p}[Z]=\sum_x p(x)\frac{q(x)}{p(x)}=\sum_x q(x)=1$。④代入得 $E[\log Z]\leq\log 1=0$,于是 $D_{\mathrm{KL}}(p\|q)=-E[\log Z]\geq 0$;等号要求 $Z$ 为常数,即 $q(x)=p(x)$ 对所有 $x$ 成立。
直觉把握:熵是"这件事平均有多出乎意料",也可以说成"最聪明的编码方案下,平均要花几位"。交叉熵是"你拿错了密码本,多付的冤枉钱";KL 就是那笔冤枉钱本身。Gibbs 不等式说:拿错密码本永远不可能比拿对更省。放到 AI 里,这句话就是——模型的预测分布 $q$ 偏离真实分布 $p$ 多远,损失就有多大;训练的全部目的,就是把这个"多付的冤枉钱"压到最小。
③ 完整解法:三个例题
④ 用途与案例
交叉熵 = 分类任务的损失函数本身
训练数据给出经验分布 $\hat{p}$(one-hot 标签),模型输出 $q_\theta$,要优化的目标就是 $H(\hat{p},q_\theta)$。分类损失不是谁拍脑袋定的,它就是交叉熵。二分类写成 $-\left[y\log\hat{y}+(1-y)\log(1-\hat{y})\right]$(logistic loss),多分类配 softmax 就是 CrossEntropyLoss。
VAE:KL 把潜变量按回先验
变分自编码器的目标是最大化 ELBO,其中第二项正是 $-\mathrm{KL}\big(q(z\,|\,x)\,\|\,p(z)\big)$。它做两件事:让编码器输出的分布贴近标准正态先验,同时给"每个样本只占潜空间一小块"的约束。没有这个 KL 项,VAE 就退化成普通自编码器,潜空间乱成一团。
RLHF:KL 约束策略别跑太远
大模型对齐的目标写成 $\mathbb{E}[r(x,y)]-\beta\,\mathrm{KL}\big(\pi(\cdot\,|\,x)\,\|\,\pi_{\mathrm{ref}}(\cdot\,|\,x)\big)$。奖励项鼓励模型往上冲,KL 项像根绳,拽住它别为了刷分而跑出胡说八道的区域。$\beta$ 调小,模型更放飞;调大,模型更保守。
知识蒸馏:让学生学老师的"软标签"
蒸馏损失是温度 $T$ 下的 $\mathrm{KL}\big(p_{\text{teacher}}\,\|\,p_{\text{student}}\big)$。老师输出的软分布里带着"猫和狗有点像"这类暗知识,比硬标签信息量大得多。温度 $T$ 越大,分布越平滑,暗知识越容易被蒸馏出来。
⑤ 延展
展知识衔接地图
往研究生走:把 KL 换成任意凸函数 $f$ 就得到$f$-散度族(含 JS 散度、$\chi^{2}$ 散度、Hellinger 距离),GAN 的一大类变体(f-GAN)就是在不同的 $f$ 之间挑。
往 AI 走:三条最活跃的线路都长在这一章上——表示学习里的互信息最大化(InfoNCE 损失,CLIP / SimCLR 的骨架)、信息瓶颈原理(压缩与预测之间的权衡)、以及大模型时代的 RLHF / DPO / 蒸馏。此外 label smoothing、温度缩放、熵正则化,全都是本章公式的小改动版本。
把熵背成"混乱程度"。这个比喻会误导。熵的准确含义是"最优编码下的平均码长",单位是 bit。均匀分布的熵最大,不是因为它"最乱",而是因为你完全无法预测。
KL 写反了。$D_{\mathrm{KL}}(p\|q)\neq D_{\mathrm{KL}}(q\|p)$。写反不只是数值不同,优化行为也完全不同(一个 mode-covering,一个 mode-seeking)。
以为交叉熵和 KL 是两件事,要分开优化。训练数据固定时 $H(p)$ 是常数,所以 $H(p,q)$ 与 $D_{\mathrm{KL}}(p\|q)$ 只差一个常数,最小化它们是同一个优化问题。
忽略 $\log 0$。$q(x)=0$ 而 $p(x)>0$ 时损失趋于无穷。工程上必须 clamp、加 $\varepsilon$,或直接调用框架内置稳定实现。
练习
【基础】一枚均匀硬币的熵是多少 bit?如果这枚硬币正面概率是 $0.9$,熵又是多少?
查看思路与解答
①均匀时 $H=-\frac{1}{2}\log_2\frac{1}{2}-\frac{1}{2}\log_2\frac{1}{2}=1$ bit,即"一次掷币恰好传 $1$ 位信息"。②$p=(0.9,0.1)$ 时 $H=-0.9\log_2 0.9-0.1\log_2 0.1\approx0.469$ bit。结论:越确定的事件源,熵越低,可压缩空间越大——这就是所有压缩算法的立身之本。卡住了?回到本章「① 是什么」里熵的定义与例题1。
【进阶】设 $p=(0.5,0.5)$、$q=(0.9,0.1)$,算出 $H(p)$、$H(p,q)$ 与 $D_{\mathrm{KL}}(p\|q)$,并验证分解式 $H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)$ 成立。
查看思路与解答
①$H(p)=1$ bit。②$H(p,q)=-0.5\log_2 0.9-0.5\log_2 0.1=0.5(0.152)+0.5(3.322)\approx1.737$ bit。③$D_{\mathrm{KL}}(p\|q)\approx0.737$ bit(见例题3)。④$1+0.737=1.737$,分解式成立。体会一下:$H(p,q)$ 比 $H(p)$ 多出来的 $0.737$ bit,就是你拿错密码本多付的冤枉钱。卡住了?注意 $\log_2 0.1=-3.322$ 是负的,前面还有个负号。
【挑战】证明分解式 $H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)$,并据此说明:为什么在监督学习里"最小化交叉熵"与"最小化 KL"、以及"最大化对数似然"是同一件事?
查看思路与解答
①从交叉熵出发:$H(p,q)=-\sum_x p(x)\log q(x)$。②加一项减一项:$-\sum_x p(x)\log q(x)=-\sum_x p(x)\log p(x)+\sum_x p(x)\log p(x)-\sum_x p(x)\log q(x)$。③第一项就是 $H(p)$;后两项合并为 $\sum_x p(x)\log\frac{p(x)}{q(x)}=D_{\mathrm{KL}}(p\|q)$。④故分解式成立。⑤训练时 $\hat{p}$(数据经验分布)固定,$H(\hat{p})$ 是常数,所以 $\arg\min_q H(\hat{p},q)=\arg\min_q D_{\mathrm{KL}}(\hat{p}\|q)$。⑥而 $H(\hat{p},q)=-\frac{1}{N}\sum_i\log q(y_i\,|\,x_i)$,取负号后正是负对数似然。三条路线——交叉熵、KL、极大似然——在这里汇成同一条。卡住了?关键在第②步"加一项减一项",这是所有信息论恒等式的通用手法。
- 用自己的话讲:熵是"平均要花几个 bit",交叉熵是"拿错密码本要多付多少",KL 就是那笔多付的钱。
- 举个反例(什么条件下不成立):KL 不是距离——它不对称,也不满足三角不等式;$q(x)=0$ 而 $p(x)>0$ 时它直接发散。
- 哪里还说不清:为什么最小化交叉熵等价于最大化似然?把这两件事用一句话串起来试试。
① 熵 $H(p)$ = 最优编码的平均码长;均匀分布时最大,为 $\log_2 n$。
② 交叉熵 $H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)$;数据固定时最小化交叉熵 = 最小化 KL = 极大似然。
③ 交叉熵就是分类任务的损失函数本身;二分类是 logistic loss,多分类配 softmax。
④ KL 是 VAE、RLHF、知识蒸馏共同的损失函数;它不对称,别写反,小心 $\log 0$。