楼层: 小学/ 初中/ 高中/ 大学/信息论:熵、交叉熵与 KL 散度/ 研究生/ 算法/ 奥数
20

信息论:熵、交叉熵与 KL 散度

Entropy · Cross-Entropy · KL Divergence
上一章说:掷的次数够多,频率就贴到概率。这一章紧接着问:如果一个事件按概率 $p$ 反复发生,我平均要用多少个 bit 把它记下来?答案就是熵。顺着这条线往下走三步,你会撞见整个深度学习最重要的一件事——交叉熵就是分类任务的损失函数本身,而 KL 散度是 VAE、RLHF、知识蒸馏共同的损失函数。弄懂这一章,你就知道训练目标不是拍脑袋定的,是从概率里推出来的;下一章的极大似然估计,正是这条推理的终点。
①
自信息

越意外的事越"值钱"

②
熵

平均要花几个 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$。

② 怎么想到的

思解题心法:先认出"谁是真相,谁是模型"

1

$H(p,q)$ 和 $D_{\mathrm{KL}}(p\|q)$ 里,第一个参数是真相 $p$,第二个是模型 $q$。顺序写反了,含义完全变了——它们不对称。

2

训练数据给出经验分布 $\hat{p}$,模型输出 $q_\theta$,最小化 $H(\hat{p},q_\theta)$。因为 $\hat{p}$ 是固定的,$H(\hat{p})$ 是常数,所以"最小化交叉熵"等价于"最小化 KL"——这就是分类损失的由来。

3

警惕零概率。$q(x)=0$ 而 $p(x)>0$ 时,$\log 0$ 会炸。工程上要 clamp、加 eps、或用框架提供的数值稳定实现(比如把 softmax 与交叉熵合并成一个算子)。

4

底数只是单位换算。$\log_2$ 得 bit,$\ln$ 得 nat,$1\ \text{nat}\approx1.443\ \text{bit}$。PyTorch 的 CrossEntropyLoss 用的是自然对数。

证信息论的核心定理与公式

核心定理:①熵的定义 $H(p)=-\sum_{x}p(x)\log p(x)$,均匀分布时最大,为 $\log_2 n$($n$ 个等概率取值)。②分解式:$H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)$。③Gibbs 不等式:$D_{\mathrm{KL}}(p\|q)\geq 0$,等号成立当且仅当 $p=q$,故 $H(p,q)\geq H(p)$。④二分类交叉熵损失:$L=-\left[y\log\hat{y}+(1-y)\log(1-\hat{y})\right]$。⑤互信息的链式表达:$I(X;Y)=H(X)-H(X\,|\,Y)=H(Y)-H(Y\,|\,X)=H(X)+H(Y)-H(X,Y)$。

推导思路(用 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$ 多远,损失就有多大;训练的全部目的,就是把这个"多付的冤枉钱"压到最小。

③ 完整解法:三个例题

例题1:8 匹马实力相当,熵是多少?
【审题】均匀分布,$p(x)=\frac{1}{8}$。
思路:直接代定义,或直接用均匀分布的最大熵公式。
逐步解法:$H(p)=-\sum_{i=1}^{8}\frac{1}{8}\log_2\frac{1}{8}=-8\times\frac{1}{8}\times(-3)=3$ bit。结论:均匀分布时熵等于 $\log_2 n$,也就是"用二进制给 $n$ 个等可能结果编号"所需的位数。
例题2:二分类里,模型对自己的错误预测有多"疼"
【审题】真实标签 $y=1$,模型分别输出 $\hat{y}=0.9$ 和 $\hat{y}=0.1$。
思路:代入二分类交叉熵,one-hot 标签下只剩一项。
逐步解法:$L=-\left[y\log\hat{y}+(1-y)\log(1-\hat{y})\right]$,因 $y=1$ 只剩 $-\log\hat{y}$。①$\hat{y}=0.9$:$L=-\ln 0.9\approx0.105$。②$\hat{y}=0.1$:$L=-\ln 0.1\approx2.303$。错得离谱时损失是猜对时的 $22$ 倍——这正是交叉熵 punishment 错误的力度,也是它比 MSE 更适合分类的原因之一。
例题3:亲手感受 KL 的不对称
【审题】$p=(0.5,0.5)$,$q=(0.9,0.1)$,分别算 $D_{\mathrm{KL}}(p\|q)$ 与 $D_{\mathrm{KL}}(q\|p)$。
思路:逐项代定义,注意 $\log$ 里分子是第一个分布。
逐步解法:①$D_{\mathrm{KL}}(p\|q)=0.5\log_2\frac{0.5}{0.9}+0.5\log_2\frac{0.5}{0.1}=0.5(-0.848)+0.5(2.322)\approx0.737$ bit。②$D_{\mathrm{KL}}(q\|p)=0.9\log_2\frac{0.9}{0.5}+0.1\log_2\frac{0.1}{0.5}=0.9(0.848)+0.1(-2.322)\approx0.531$ bit。③两者不等,KL 不是距离。这个不对称在生成模型里后果很实在:拟合前向 KL 会"覆盖所有峰"(mode-covering),拟合反向 KL 会"死盯一个峰"(mode-seeking)。
信息论速查 熵:$H(p)=-\sum_{x}p(x)\log p(x)$ | 交叉熵:$H(p,q)=-\sum_{x}p(x)\log q(x)$ | KL:$D_{\mathrm{KL}}(p\|q)=\sum_{x}p(x)\log\frac{p(x)}{q(x)}$
分解式:$H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)$ | Gibbs:$D_{\mathrm{KL}}\geq 0$ | 互信息:$I(X;Y)=H(X)-H(X\,|\,Y)$
二分类损失:$L=-\left[y\log\hat{y}+(1-y)\log(1-\hat{y})\right]$ | 均匀分布最大熵:$\log_2 n$

④ 用途与案例

交叉熵 = 分类任务的损失函数本身

训练数据给出经验分布 $\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、极大似然——在这里汇成同一条。
做对了?很棒,这三条路打通了,你就明白损失函数不是玄学。
卡住了?关键在第②步"加一项减一项",这是所有信息论恒等式的通用手法。
费曼学习法:讲给别人听
合上书,给一个完全不懂的人讲清楚「熵、交叉熵与 KL 散度」
  1. 用自己的话讲:熵是"平均要花几个 bit",交叉熵是"拿错密码本要多付多少",KL 就是那笔多付的钱。
  2. 举个反例(什么条件下不成立):KL 不是距离——它不对称,也不满足三角不等式;$q(x)=0$ 而 $p(x)>0$ 时它直接发散。
  3. 哪里还说不清:为什么最小化交叉熵等价于最大化似然?把这两件事用一句话串起来试试。
记
小结卡

① 熵 $H(p)$ = 最优编码的平均码长;均匀分布时最大,为 $\log_2 n$。

② 交叉熵 $H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)$;数据固定时最小化交叉熵 = 最小化 KL = 极大似然。

③ 交叉熵就是分类任务的损失函数本身;二分类是 logistic loss,多分类配 softmax。

④ KL 是 VAE、RLHF、知识蒸馏共同的损失函数;它不对称,别写反,小心 $\log 0$。