M5.1 用錯的機率表下注一年會多輸多少:KL Divergence 與 Cross-Entropy
一張錯的天氣表
一家賭場每天對明天的天氣開盤:晴、雨、陰三種結果,你可以把手上的錢按任意比例押在三個結果上,押中的部分按賠率放大。假設賠率是公平的:押中「晴」的錢乘上 , 是賭場公告的機率表。
這是簡化的數學模型,不是下注建議。若你相信自己的機率表 ,在這個全額分配模型中,照 的比例下注會最大化你所相信的期望 log 財富(Kelly [3])。但真實的天氣照另一張表 出現,用錯表的影響會如何累積?
兩個人看到同一串天氣,一個用 、另一個用 。每次結果出現後,兩人財富都乘上一個數;所以要比較長期累積的影響,最自然的做法就是先取 log,把相乘換成相加。
課堂提問Q1
翻成數學。每天的隨機變數是什麼?「財富」怎麼隨天數變化?「比知道 的人差多少」要比的是哪個量?
先想一想,再展開看整理後的答案
課堂上會先把每天的天氣寫成隨機變數 ,獨立、分佈 。照 下注,若第 天出現 ,你押在 上的比例是 ,賠率是 ,所以財富乘上 。一年後:
複利讓「相乘」變成 的「相加」,長期平均後每天的成長率是一個期望值——對真實分佈 取期望,因為天氣照 出現。
知道 的人用同一個式子,把 換成 。兩人每天成長率的差:
賭場的 消掉了,差距只跟 有關。一年後的期望 log 財富差是它的 365 倍;某一個實際年份仍會在這個期望附近波動。
每天多輸一點點
想像兩個人並排坐在賭場,一年裡看到同一串天氣。知道 的人每天的財富曲線( 座標)是一條有斜率的直線加上抖動;你的曲線也是一條直線加抖動,但斜率低了一個固定的量。兩條線之間的縫隙以固定速度張開。
這個量就是每次事件發生時,平均多付的 log 代價。畫出來的實際曲線會抖動,線性張開的是期望差距,不是每一天都損失完全相同的數。
圖:同一串結果下,log 財富差會波動;它的期望以 KL(p‖q) 的速率累積。
KL、非負、與 cross-entropy
定義。 兩個分佈 (同一個樣本空間)之間的 Kullback–Leibler divergence:
連續分佈把和換成積分。約定 的項為零;若 但 ,KL 是無限大。讀法是:真相是 ,你以為是 ,每次觀測平均多付的 log 代價。 Kullback 與 Leibler [2] 將這個量用來描述分布之間的資訊差異。
非負性(兩行)。 把 寫成 , 是 convex(M5.0),Jensen 說
第一個等號要求 在 下是常數;第二個等號要求 沒有在 的地方放質量。再用兩者總和都是 1,就得到 。所以 KL 為零當且僅當兩個分布相同,但它並不是 metric 意義下的距離。
Cross-entropy 與 entropy。 把 拆開:
是用正確機率表計算的平均 negative log probability; 則使用模型的表。在這些量有限時,cross-entropy=正確表的代價+用錯表的額外代價。固定 後,最小化 cross-entropy 與 KL 是同一個目標。連續情況的 differential entropy 可以是負的,不能直接解讀成離散事件的不確定性。
不對稱。 ,而且差別不是技術性的。看兩種錯:
- 太小而 不小——你以為某件事幾乎不會發生,它卻常發生。 很大,乘上不小的 , 爆炸( 時趨近 )。這是「押太少在會發生的事上」——賭場裡這叫破產。
- 太大而 很小,該項的權重也小;若 ,該項本身為零。但 的總質量只能是 1,多放在這裡就會少放在別處,整個 KL 仍會受影響。
把 對調,取平均的權重也換了。 對「 在 的地方放質量」是無限大;漏掉某塊的直接權重則可能是零。這說明方向會影響對錯誤的處理,不代表任意例子中某一方向都比較大。
展開細節KL 不是距離:不對稱、不滿足三角不等式,但有一個更好的性質
距離(metric)要對稱、滿足三角不等式;KL 兩者都不滿足。它也不是唯一的比較方式。KL 的一個重要性質是對獨立乘積可加:。證明只要把 log 乘積拆成和,再分別取期望即可。
另一個常用的事實:KL(p‖q) ≥ ½‖p − q‖₁²(Pinsker 不等式)。所以 KL 小 ⟹ 兩個分佈在任何事件上的機率差都小;但反過來不成立——total variation 很小時 KL 仍可能是無限大(只要 q 在某個 p 不為零的點上是零)。
直覺對了一半
一年後的期望 log 財富差是 。用 、 算:
約一年 nat,這是期望 log 差,不是實際財富比例的確定值,也不是平均財富比例的 log。各項可以為負,只有總和保證非負;這個例子中,低估雨天造成了最大的正貢獻。
反過來的錯——真相 、你的表 ,也就是把 10% 的雨天當成 30%:。比 小——同樣是「雨天差 20 個百分點」,方向不同代價不同,這就是不對稱。
上面的長期極限用了固定 的獨立樣本與可積分的 log 比值。若只拿部分資金下注,財富乘數會改變,不能直接把 KL 按下注比例縮小。
跑一年,然後把某個 壓到零
import numpy as np
rng = np.random.default_rng(0)
p = np.array([0.5, 0.3, 0.2]); q = np.array([0.6, 0.1, 0.3])
kl = lambda a, b: np.sum(a * np.log(a / b))
print(kl(p, q), kl(q, p)) # 0.157 vs 0.121:不對稱
x = rng.choice(3, size=(2000, 365), p=p) # 2000 個「一年」,每年 365 天真實天氣
gap = np.log(p[x]).sum(1) - np.log(q[x]).sum(1) # 知道 p 的人 − 照 q 下注的人(log 財富差)
print(gap.mean() / 365, gap.std() / 365) # ≈ 0.158,抖動 ≈ 0.03:每天多輸 KL
# 破壞:把雨天的機率壓到幾乎零
q_bad = np.array([0.7, 1e-6, 0.3 - 1e-6])
print(kl(p, q_bad)) # ≈ 3.5 nat/天:每個雨天輸掉 3×10⁵ 倍
模擬 2000 個「一年」,每天平均多輸 nat、與公式一致,抖動是 (一年 365 天的隨機性)。把雨天的機率壓到 :KL 跳到 nat/天——每個雨天你的財富乘上 ,一年約 110 個雨天,破產。理論不只說「用錯表會輸」,還說出哪一格錯最貴、貴多少。
互動 demo:拖動 q 的三格並交換方向,觀察哪一種錯誤被 KL 重罰。
檢查理解
參考文獻
- Cover, T. M., Thomas, J. A. Elements of Information Theory. Wiley, 2nd ed., 2006.(第 2.3 節 relative entropy 的定義、第 2.6 節非負性(information inequality)、第 6 章 gambling and data compression:Kelly 賭注與「多輸 KL」的推導、第 11.6 節 Pinsker 不等式。)
- Kullback, S., Leibler, R. A. On Information and Sufficiency. Annals of Mathematical Statistics 22(1), 1951.(原始出處。)
- Kelly, J. L. A New Interpretation of Information Rate. Bell System Technical Journal 35(4), 1956.(照機率比例下注使長期成長率最大;用錯表的損失。)
- MacKay, D. J. C. Information Theory, Inference, and Learning Algorithms. Cambridge University Press, 2003.(第 2 章:entropy、cross-entropy 與 KL 的直覺解釋與練習。)