用一组具体数字,把这三个概念一次讲透
1. 固定场景
有两个分布:
- Teacher 分布 (P):老师认为的真实概率
- Student 分布 (Q):学生学出来的概率
假设有 3 个类别:A / B / C
| 类别 | Teacher P | Student Q |
|---|---|---|
| A | 0.7 | 0.6 |
| B | 0.2 | 0.3 |
| C | 0.1 | 0.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 |