跳轉到

04.3 熵、KL 散度與資訊理論#

本章導讀#

前兩節把「智慧」寫成能量。1948 年,Shannon 換了一個更普適的度量——資訊。 資訊論給了現代 AI 三件武器:量測不確定性的熵、訓練用的交叉熵損失、 以及比較兩個分布的 KL 散度。LLM 的困惑度、RL 的策略約束,全是這一章的應用。

淺顯說明#

  • 熵:一枚公正硬幣的結果「最難猜」(熵 = 1 bit);一枚兩面都是正面的硬幣「零資訊」(熵 = 0)。
  • 交叉熵:你用錯誤的機率去猜,平均要多花的「驚訝量」。
  • KL 散度:兩個機率分布的「距離」——但它是單向的、非負的、可為無窮。

訓練語言模型 = 最小化交叉熵;對齊模型行為 = 限制 KL 散度。三個量,一個家族。

正規理論#

Shannon 熵#

離散分布 \(p(x)\) 的熵:

\[ H(p) = -\sum_x p(x)\log p(x) \quad (\text{bit 時取 } \log_2) \]

性質: \(H \ge 0\) ,且均勻分布時最大: \(H = \log n\) ( \(n\) 個等機率結果)。

交叉熵與 KL 散度#

用分布 \(q\) 編碼真實分布 \(p\) 的平均描述長度:

\[ H(p, q) = -\sum_x p(x)\log q(x) \]

KL 散度定義:

\[ \boxed{\; D_{\mathrm{KL}}(p \,\|\, q) = \sum_x p(x)\log\frac{p(x)}{q(x)} = H(p,q) - H(p) \;} \]

Gibbs 不等式: \(D_{\mathrm{KL}}(p\|q) \ge 0\) ,等號成立 iff \(p = q\) 。

證明:對任意 \(x > 0\) 有 \(\log x \le x - 1\) ( \(\log\) 的凹性、切線在 \(x=1\) )。故

\[ -D_{\mathrm{KL}}(p\|q) = \sum_x p(x)\log\frac{q(x)}{p(x)} \le \sum_x p(x)\left(\frac{q(x)}{p(x)} - 1\right) = \sum_x q(x) - \sum_x p(x) = 0 \qquad \blacksquare \]

意義:交叉熵損失最小化 \(\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\) :

\[ \mathcal{L} = \mathbb{E}_{q}[\underbrace{-\log p(x|z)}_{\text{重建}}] + \underbrace{D_{\mathrm{KL}}(q(z|x)\,\|\,p(z))}_{\text{正則化}} \]

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)\) :

\[ H(p,q) = -0.5\log_2 0.9 - 0.5\log_2 0.1 \approx 0.074 + 1.661 = 1.735 \text{ bit} \]
\[ D_{\mathrm{KL}}(p\|q) = 1.735 - H(p) = 1.735 - 1 = 0.735 \text{ bit} \]

你因為過度自信( \(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 散度限制策略漂移,成為對齊技術的支柱。

習題#

  1. 證明均勻分布的熵最大: \(H(p) \le \log n\) (提示:對 \(p = 1/n\) 用 Gibbs 不等式)。
  2. 計算 \(D_{\mathrm{KL}}(q\|p)\) (反向),與 \(D_{\mathrm{KL}}(p\|q) = 0.735\) 比較——驗證 KL 散度不對稱。
  3. 說明為什麼「最小化交叉熵」與「最大化對數概似」在訓練中是同一件事。

補充#

1. 數學推導證明#

證明(習題 1):均勻分布熵最大, \(H(p) \le \log n\) 。

設 \(u = (1/n, \dots, 1/n)\) 為均勻分布。對任意分布 \(p\) ,Gibbs 不等式給出 \(D_{\mathrm{KL}}(p\|u) \ge 0\) ,即

\[ 0 \le \sum_x p(x)\log\frac{p(x)}{1/n} = \sum_x p(x)\log p(x) + \log n = -H(p) + \log n \]

故 \(H(p) \le \log n\) ,等號成立 iff \(p = u\) 。資訊論的說法:最無知(均勻)時最難猜;物理的對應:孤立系統趨向熵最大的均勻態。 \(\blacksquare\)

證明(習題 3):交叉熵 = 負對數概似。

訓練資料的經驗分布 \(p_{\text{data}}\) 是 one-hot(觀測到的詞機率 1、其餘 0)。一批資料的平均負對數概似:

\[ -\frac{1}{T}\sum_t \log q(x_t) = -\sum_x \underbrace{\left(\frac{1}{T}\sum_t \mathbb{1}[x_t = x]\right)}_{=\,p_{\text{data}}(x)} \log q(x) = H(p_{\text{data}}, q) \]

正是交叉熵。故「最大化概似」(讓模型給真實資料高機率)與「最小化交叉熵」是同一目標的兩種說法;又因 \(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_{\mathrm{KL}}(q\|p) = 0.9\log_2\frac{0.9}{0.5} + 0.1\log_2\frac{0.1}{0.5} \approx 0.531 \text{ bit} \ne 0.737 \]

不對稱—— \(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\) 個選項在競爭。