用一组具体数字,把这三个概念一次讲透

1. 固定场景

有两个分布:

  • Teacher 分布 (P):老师认为的真实概率
  • Student 分布 (Q):学生学出来的概率

假设有 3 个类别:A / B / C

类别Teacher PStudent Q
A0.70.6
B0.20.3
C0.10.1

数组表示:

P = [0.7, 0.2, 0.1]
Q = [0.6, 0.3, 0.1]

2. 熵 (Entropy)

定义

$$H(P) = -\sum_i P_i \log P_i$$

计算

已知:

  • $\log 0.7 \approx -0.357$
  • $\log 0.2 \approx -1.609$
  • $\log 0.1 \approx -2.303$

代入:

$$ \begin{aligned} H(P) &= -(0.7 \times -0.357 + 0.2 \times -1.609 + 0.1 \times -2.303) \ &= 0.250 + 0.322 + 0.230 \ &\approx 0.802 \end{aligned} $$

含义

熵表示分布本身的不确定性——teacher 描述自己需要的最少信息量。


3. 交叉熵 (Cross Entropy)

定义

$$H(P, Q) = -\sum_i P_i log Q_i$$

注意:P 是权重,但 log 的是 Q

计算

已知:

  • $\log 0.6 \approx -0.511$
  • $\log 0.3 \approx -1.204$
  • $\log 0.1 \approx -2.303$

代入:

$$ \begin{aligned} H(P, Q) &= -(0.7 \times -0.511 + 0.2 \times -1.204 + 0.1 \times -2.303) \ &= 0.358 + 0.241 + 0.230 \ &\approx 0.829 \end{aligned} $$

含义

交叉熵衡量:如果真实分布是 P,但你用 Q 去描述它,平均要付出多少代价。

  • 熵 $H(P) = 0.802$:P 描述自己,最节省
  • 交叉熵 $H(P, Q) = 0.829$:Q 描述 P,稍差一点

差出来的那部分,就是 KL 散度。


4. Forward KL ($D_{KL}(P||Q)$)

定义

$$D_{KL}(P||Q) = \sum_i P_i \log \frac{P_i}{Q_i}$$

也等于:

$$D_{KL}(P||Q) = H(P, Q) - H(P)$$

计算

$$ \begin{aligned} D_{KL}(P||Q) &= H(P, Q) - H(P) \ &= 0.829 - 0.802 \ &= 0.027 \end{aligned} $$

含义

Forward KL 的核心是:P 做权重

也就是说:P 觉得重要的地方,你如果 Q 没跟上,会被重点惩罚。

类别P(A)=0.7 (重要)Q(A)=0.6 (偏低)
A权重高贡献损失

如果某个类别 P 很小(如 0.001),那 Q 在这点偏一点影响不大。

特性:Mode-Covering

Forward KL “怕漏模式”——teacher 支持的模式,你必须都覆盖到。

如果 teacher 觉得某类可能,但 student 给了 0 概率,$log(0)$ 会趋向无穷大,直接爆炸。


5. Reverse KL ($D_{KL}(Q||P)$)

定义

$$D_{KL}(Q||P) = \sum_i Q_i \log \frac{Q_i}{P_i}$$

计算

$$ \begin{aligned} D_{KL}(Q||P) &= Q_A \log\frac{Q_A}{P_A} + Q_B log\frac{Q_B}{P_B} + Q_C log\frac{Q_C}{P_C} \ &= 0.6 \times \log(0.6/0.7) + 0.3 \times \log(0.3/0.2) + 0.1 \times \log(0.1/0.1) \end{aligned} $$

分别算:

  • $\log(0.6/0.7) = \log(0.857) \approx -0.154$
  • $\log(0.3/0.2) = \log(1.5) \approx 0.405$
  • $\log(0.1/0.1) = 0$

于是:

$$ \begin{aligned} D_{KL}(Q||P) &\approx 0.6 \times (-0.154) + 0.3 \times 0.405 + 0.1 \times 0 \ &\approx -0.092 + 0.122 \ &\approx 0.030 \end{aligned} $$

含义

Reverse KL 的核心是:Q 做权重

也就是��:student 自己押了很多概率的地方,如果 teacher 不认可,会被惩罚。

特性:Mode-Seeking

Reverse KL “怕押错模式”——student 重注的地方,必须得到 teacher 认可。

如果 student 把概率押到一个 teacher 根本不支持的类别,也会直接炸掉。


6. 核心区别:它们在"怕什么"

散度类型公式关心的问题怕什么
Forward KL$D_{KL}(P||Q)$teacher 支持的模式,你有没有都覆盖到怕漏模式 (mode-covering)
Reverse KL$D_{KL}(Q||P)$student 自己押重注的地方,teacher 是否认可怕押错模式 (mode-seeking)

极端例子说明

设 teacher:

$$P = [0.5, 0.5, 0]$$

(A 和 B 都可以,C 不行)

方案 1:$Q_1 = [1, 0, 0]$

只选 A,不选 B。

  • 对 Forward KL:teacher 觉得 B 也可能,但 Q 给了 0 → 第二项 $\log(0.5/0)$ 趋向无穷大
  • 结论:Forward KL 讨厌"漏模式"

方案 2:$Q_2 = [0.5, 0, 0.5]$

选了 A 和 C,但 C 在 teacher 里是 0。

  • 对 Reverse KL:student 重押的 C,teacher 根本不认可 → 第二项 $\log(0.5/0)$ 趋向无穷大
  • 结论:Reverse KL 讨厌"押错模式"

7. 一句话总结

概念公式一句话解释
交叉熵$H(P, Q) = -\sum P_i log Q_i$真实分布是 P,你用 Q 描述要花多少代价
Forward KL$D_{KL}(P||Q)$teacher 认可的东西,你有没有都覆盖
Reverse KL$D_{KL}(Q||P)$你自己押的地方,teacher 认不认

8. 餐馆类比

假设 teacher 推荐:

  • 餐馆 A:70%
  • 餐馆 B:20%
  • 餐馆 C:10%

student 选:

  • A:60%
  • B:30%
  • C:10%

正常情况:还算接近

极端情况 1:student 只盯着 A,不看 B → Forward KL 说:“你漏掉了 teacher 认可的一个模式”

极端情况 2:student 重押一个老师根本不推荐的 D → Reverse KL 说:“你怎么把概率浪费在这种离谱地方上?”


9. 为什么蒸馏常用交叉熵

因为:

$$D_{KL}(P||Q) = H(P, Q) - H(P)$$

其中 $H(P)$ 对 student 来说是常数

所以:

$$\min D_{KL}(P||Q) \quad \Leftrightarrow \quad \min H(P, Q)$$

最小化 Forward KL,等价于最小化交叉熵。

本质上,你是在说:让 student 在 teacher 认为重要的地方,把概率也提上去。


10. 和高熵 / Forking Token 的联系

把 token 位置上的 teacher 分布想成两种情况:

低熵 token

$$P = [0.98, 0.01, 0.01]$$

teacher 非常确定。

  • 交叉熵 / Forward KL 会强烈要求 student 也跟上来
  • Reverse KL 也不希望 student 乱跑
  • 答案几乎写死,变化不大

高熵 Forking Token

$$P = [0.45, 0.35, 0.20]$$

teacher 认为这里有多个合理分支。

如果 student 学成:

$$Q = [0.95, 0.04, 0.01]$$

虽然很自信,但 teacher 认可的多个可能性被压扁了。Forward KL 会比较讨厌这种塌缩。

这就是 Forward KL 和"在关键位置保留探索空间"天然一致的地方。


11. 压缩记忆版

概念公式记忆口诀
交叉熵$H(P, Q)$用 Q 描述 P 要花多少代价
Forward KL$D_{KL}(P||Q)$覆盖 teacher 的所有模式
Reverse KL$D_{KL}(Q||P)$押 teacher 认可的注

12. 数值汇总

指标数值
$H(P)$0.802
$H(P, Q)$0.829
$D_{KL}(P||Q)$0.027
$D_{KL}(Q||P)$0.030