04.3 熵、KL 散度與資訊理論#
本章導讀#
前兩節把「智慧」寫成能量。1948 年,Shannon 換了一個更普適的度量——資訊。 資訊論給了現代 AI 三件武器:量測不確定性的熵、訓練用的交叉熵損失、 以及比較兩個分布的 KL 散度。LLM 的困惑度、RL 的策略約束,全是這一章的應用。
淺顯說明#
- 熵:一枚公正硬幣的結果「最難猜」(熵 = 1 bit);一枚兩面都是正面的硬幣「零資訊」(熵 = 0)。
- 交叉熵:你用錯誤的機率去猜,平均要多花的「驚訝量」。
- KL 散度:兩個機率分布的「距離」——但它是單向的、非負的、可為無窮。
訓練語言模型 = 最小化交叉熵;對齊模型行為 = 限制 KL 散度。三個量,一個家族。
正規理論#
Shannon 熵#
離散分布 \(p(x)\) 的熵:
性質: \(H \ge 0\) ,且均勻分布時最大: \(H = \log n\) ( \(n\) 個等機率結果)。
交叉熵與 KL 散度#
用分布 \(q\) 編碼真實分布 \(p\) 的平均描述長度:
KL 散度定義:
Gibbs 不等式: \(D_{\mathrm{KL}}(p\|q) \ge 0\) ,等號成立 iff \(p = q\) 。
證明:對任意 \(x > 0\) 有 \(\log x \le x - 1\) ( \(\log\) 的凹性、切線在 \(x=1\) )。故
意義:交叉熵損失最小化 \(\Leftrightarrow\) KL 散度最小化 \(\Leftrightarrow\) 讓模型分布貼近資料分布。 因為 \(H(p,q) = D_{\mathrm{KL}}(p\|q) + H(p)\) ,而真實資料的熵 \(H(p)\) 是常數。
連續情形與變分推斷#
連續分布: \(D_{\mathrm{KL}}(p\|q) = \int p(x)\log\frac{p(x)}{q(x)}\,dx\) 。
變分自編碼器(VAE, 2013)的損失正是 KL 散度的應用——用簡單的 \(q\) 近似難算的後驗 \(p\) :
H-JEPA 等自監督世界模型也用 KL/協方差正則化防止隱空間維度崩潰(08.2 節)。
應用一覽#
| 應用 | 公式 | 角色 |
|---|---|---|
| LLM 訓練 | 交叉熵 \(-\log P(w_t \mid w_{<t})\) | 損失 |
| LLM 評測 | 困惑度 \(\mathrm{PPL} = e^{H(p,q)}\) | 生成的不確定性 |
| RL (PPO/TRPO) | \(D_{\mathrm{KL}}(\pi_{\text{new}}\|\pi_{\text{old}}) \le \delta\) | 限制策略更新步長 |
| 蒸餾 | \(D_{\mathrm{KL}}(\text{teacher}\|\text{student})\) | 知識轉移 |
簡易範例:硬幣與困惑度#
公正硬幣 \(p = (0.5, 0.5)\) ,你的模型 \(q = (0.9, 0.1)\) :
你因為過度自信( \(q = 0.9\) ),每次猜硬幣平均多花 0.735 bit 的「驚訝」。
語言模型的困惑度:若交叉熵 \(H(p,q) = 2\) nat,則 \(\mathrm{PPL} = e^2 \approx 7.39\) —— 模型在每一步「等 unsure 到」7.4 個詞選項。
歷史典故#
- 1948 年 Shannon 的資訊論雖不在本卷宗年表中,但其思想貫穿整個 AI 史——從 1957 年感知器的損失到 2017 年 Transformer 的 softmax。
- 2013 年 VAE:見卷宗 ../2013-VAE變分自編碼器.md——KL 散度成為生成模型的核心正則化。
- 2013 年 word2vec:見 ../2013-word2vec詞向量.md——用 softmax 交叉熵學出語義空間(06.1 節)。
- 2022 年 RLHF:見 ../2022-ChatGPT與RLHF.md——KL 散度限制策略漂移,成為對齊技術的支柱。
習題#
- 證明均勻分布的熵最大: \(H(p) \le \log n\) (提示:對 \(p = 1/n\) 用 Gibbs 不等式)。
- 計算 \(D_{\mathrm{KL}}(q\|p)\) (反向),與 \(D_{\mathrm{KL}}(p\|q) = 0.735\) 比較——驗證 KL 散度不對稱。
- 說明為什麼「最小化交叉熵」與「最大化對數概似」在訓練中是同一件事。
補充#
1. 數學推導證明#
證明(習題 1):均勻分布熵最大, \(H(p) \le \log n\) 。
設 \(u = (1/n, \dots, 1/n)\) 為均勻分布。對任意分布 \(p\) ,Gibbs 不等式給出 \(D_{\mathrm{KL}}(p\|u) \ge 0\) ,即
故 \(H(p) \le \log n\) ,等號成立 iff \(p = u\) 。資訊論的說法:最無知(均勻)時最難猜;物理的對應:孤立系統趨向熵最大的均勻態。 \(\blacksquare\)
證明(習題 3):交叉熵 = 負對數概似。
訓練資料的經驗分布 \(p_{\text{data}}\) 是 one-hot(觀測到的詞機率 1、其餘 0)。一批資料的平均負對數概似:
正是交叉熵。故「最大化概似」(讓模型給真實資料高機率)與「最小化交叉熵」是同一目標的兩種說法;又因 \(H(p,q) = H(p) + D_{\mathrm{KL}}(p\|q)\) 且 \(H(p)\) 與模型無關,它又等價於「最小化 KL 散度」。 \(\blacksquare\)
計算(習題 2):反向 KL。 \(p = (0.5,0.5)\) 、 \(q = (0.9,0.1)\) 時正向 \(D_{\mathrm{KL}}(p\|q) \approx 0.737\) bit;反向
不對稱—— \(D(p\|q)\) 罰「 \(p\) 有而 \(q\) 說沒有」( \(q \to 0\) 時爆向無窮), \(D(q\|p)\) 罰相反方向。用錯方向,學出的模型行為完全不同(VAE 與 RLHF 選邊各有講究)。 \(\blacksquare\)
2. 簡易範例#
範例一:硬幣的手算+程式對照。 本章 \(H(p,q) \approx 1.735\) bit、 \(D \approx 0.735\) bit:程式 _code/04.3-entropy-kl.py 輸出 \(H(p,q) = 1.7370\) 、 \(D = 0.7370\) (差 \(0.002\) 是本章手算取小數的捨入)。程式另驗證 \(D = H(p,q) - H(p)\) 到 \(10^{-12}\) 精度,並斷言 \(D \ge 0\) (Gibbs 不等式的數值版)。
範例二:困惑度的直覺。 程式輸出:交叉熵 \(2.0\) nat \(\to\) PPL \(= e^2 \approx 7.3891\) (與本章一致);另做單點分布的例子 \(H = -\log 0.6 \approx 0.5108\) nat,交叉熵與負對數概似兩路算法得同一數字——習題 3 的數值驗證。PPL 越接近 1,模型越確定;PPL \(= 2.25\) (06.1 節程式)表示每步約 \(2.25\) 個選項在競爭。