數學基礎

KL散度(KL divergence)

/ K-L dy-VER-juns /

KL 散度衡量的是「一個機率分布離另一個有多遠」——更確切地說,是當你以為世界會遵循分布 Q、它實際上卻遵循分布 P 時,你額外要承受多少意外。想像你照著一份說「多半放晴」的預報去打包行李。要真是晴天,你打包得正好;可要是天天傾盆,那份錯誤的預期就讓你付出了慘重代價。KL 散度,就是這份懲罰的平均大小,以「白白浪費掉的意外」的位元來計量。

它永遠是零或正數,而且僅當兩個分布完全相同時才恰好等於零——你的信念與現實分毫不差,毫無懲罰。它越大,就說明你假定的那個分布,把真實分布誤導得越離譜。這裡有個著名的小彆扭:KL 散度不是對稱的。「真相是 P 卻預期 Q」的懲罰,一般不等於「真相是 Q 卻預期 P」的懲罰,所以它是一道有方向的缺口,而非日常意義上真正的「距離」。

在機器學習裡,KL 散度是衡量「我的模型分布有多錯」的天然標尺。訓練一個分類器去最小化交叉熵,骨子裡就是在把「模型預測的分布」與「真實標籤」之間的 KL 散度推向零。它也是變分自編碼器以及許多「用一個分布去逼近另一個分布」的方法內部的引擎。要隨身帶著的提醒:正因為它不對稱,又會在模型給某件「確實發生了的事」賦了零機率時炸到無窮大,所以使用 KL 散度時,必須小心你究竟把它朝哪個方向擺。

一款天氣應用相信 Q =(70% 晴、30% 雨),可真實氣候卻是 P =(50% 晴、50% 雨)。照著 Q 來安排,你被雨淋個措手不及的次數,會比預想的多;KL 散度就給這種反覆出現的「校準失準」標上一個精確的數。把這款應用修到恰好預測(50%、50%),散度就降為零了。

KL 散度給「信了一份錯誤預報(Q)、卻要面對現實(P)」的代價標價;讓二者吻合,代價便歸零。

KL 散度不是真正的距離,因為它不對稱:從 P 到 Q 的散度,一般不等於從 Q 到 P 的散度。它也從不為負,並通過一個簡單的恆等式與交叉熵相關——交叉熵等於資料自身的熵,加上 KL 散度。

又稱
KL散度KL 散度相对熵相對熵Kullback-Leibler divergencerelative entropy