為什麼 Kullback-Leilbler 散度比平方誤差更能衡量兩個概率分佈之間的距離?[複製]
我知道當我們想要測量概率形式的數字之間的距離時,KL-divergence 是一個更合適的度量。但是,我仍然很困惑使用 KL 散度而不是概率數之間的平方誤差有什麼好處。
如果有人能用簡單的語言解釋這一點,我將不勝感激。
概述:
- KL-Divergence 源自香農熵。
- 香農熵是信號 X 中包含的信息量 $ \mathrm{P}(X) $ .
- 交叉熵是當我們用估計分佈對信號 X 進行編碼時包含在信號 X 中的信息 $ \mathrm{Q}(X) $ 而不是它的真實分佈 $ \mathrm{P}(X) $ .
- KL-Divergence 是“真實”香農熵和“編碼”交叉熵之間的信息差異。
- KL-Divergence 是不對稱的,因為如果我們通過編碼獲得信息 $ \mathrm{P}(X) $ 使用 $ \mathrm{Q}(X) $ ,那麼在相反的情況下,如果我們編碼,我們會丟失信息 $ \mathrm{Q}(X) $ 使用 $ \mathrm{P}(X) $ . 如果將高分辨率 BMP 圖像編碼為較低分辨率的 JPEG,則會丟失信息。如果將低分辨率 JPEG 轉換為高分辨率 BMP,您將獲得信息。當您對概率分佈進行編碼時,這同樣適用 $ \mathrm{P}(X) $ 使用 $ \mathrm{Q}(X) $ ,或者做相反的事情。所以屬性: $$ D_\text{KL}(\mathrm{P} \parallel \mathrm{Q}) \neq D_\text{KL}(\mathrm{Q} \parallel \mathrm{P}) $$ 實際上是可取的,因為它表達了當我們使用 KL-Divergence 作為相似性度量時信息以一種方式丟失並以另一種方式獲得的事實。
- 另一方面,平方誤差是對稱的: $$ SSE(P,Q) = SSE(Q,P) $$ 因此,如果我們使用 $ SSE $ 作為相似度的度量。
細節:
要了解 KL-divergence,首先需要了解香農熵的概念:
$$ I(X) = -\sum_{i=1}^n {\mathrm{P}(x_i) \log \mathrm{P}(x_i)} $$
香農熵 $ I(X) $ 衡量一個信號中包含多少信息 $ X \in {x_1,x_2,…,x_n} $ 其特點是分佈 $ \mathrm P(x_i) $ .
換句話說,知道概率分佈 $ X $ 是 $ \mathrm P(x_i) $ 我學習或獲得了多少信息,在進行實驗後,我發現結果是 $ X = x_i $ .
要看到這一點,請考慮以下情況 $ \mathrm P(x_i)=1 $ 對於一些 $ x_i $ , 和 0 對於所有其他人。所以事件 $ X = x_i $ 總是預期的(這是一個特定的事件),我們從執行實驗中什麼也沒學到,因此在這種情況下 $ X $ 信息為零。如果你做數學,你會看到在這種情況下, $ I(X) = 0 $ .
另一方面,如果 $ \mathrm P(x_i)=\frac{1}{n} $ 對於所有 i,即我們有一個均勻分佈和任何值 $ X = x_i $ 同樣可能,我們有最大可能值 $ I(X) $ ,給定集合 $ X $ .
現在讓我們定義交叉熵,即有多少信息在 $ X $ ,如果我建模 $ X $ 具有模擬分佈 $ \mathrm{Q}(x_i) $ 而不是真實分佈 $ \mathrm{P}(x_i) $ :
$$ H(P,Q) = -\sum_{i=1}^n {\mathrm{P}(x_i) \log \mathrm{Q}(x_i)} $$
為了簡化,我們將寫 $ I(P) $ 代替 $ I(X) $ , 因為集合 $ X $ 沒有改變。現在你可以看一下KL-divergence,這是我們使用真實分佈的情況下的信息差異 $ \mathrm{P}(x_i) $ 來表示我們的信號和模擬分佈 $ \mathrm{Q}(x_i) $ :
$$ D_\text{KL}(\mathrm{P} \parallel \mathrm{Q}) = H(P,Q) - I(P) $$
現在讓我們填寫條款:
$$ D_\text{KL}(\mathrm{P} \parallel \mathrm{Q})= -\sum_{i=1}^n {\mathrm{P}(x_i) \log \mathrm{Q}(x_i)} + \sum_{i=1}^n {\mathrm{P}(x_i) \log \mathrm{P}(x_i)} $$
然後簡化:
$$ D_\text{KL}(\mathrm{P} \parallel \mathrm{Q})= -\sum_{i=1}^n {\mathrm{P}(x_i) (\log \mathrm{Q}(x_i)} - \log \mathrm{P}(x_i)) $$
這反過來導致:
$$ D_\text{KL}(\mathrm{P} \parallel \mathrm{Q}) = -\sum_{i=1}^n \mathrm{P}(x_i) \log\left(\frac{\mathrm{Q}(x_i)}{\mathrm{P}(x_i)}\right) $$
這與使用平方誤差有何不同?考慮我們估計時的平方誤差 $ \mathrm{P}(x_i) $ 使用 $ \mathrm{Q}(x_i) $ :
$$ SSE(P,Q) = \sum_{i=1}^n (\mathrm{P}(x_i) - \mathrm{Q}(x_i))^2 $$
這個量是對稱的:
$$ SSE(P,Q) = SSE(Q,P) $$
KL-Divergence 不對稱:
$$ D_\text{KL}(\mathrm{P} \parallel \mathrm{Q}) \neq D_\text{KL}(\mathrm{Q} \parallel \mathrm{P}) $$
R中的數值示例:
library(LaplacesDemon) #Use this library for the KLD function n=10 p=1/2 x=0:10 P=dbinom(x,size=n,prob=p) plot(x,P,type="h",xlim=c(-1,11),ylim=c(0,0.5),lwd=2,col="blue",ylab="P(X)") points(x,P,pch=16,cex=2,col="dark red")
Q = dunif(x, min=0, max=10, log = FALSE) plot(x,Q,type="h",xlim=c(-1,11),ylim=c(0,0.5),lwd=2,col="blue",ylab="Q(X)") points(x,Q,pch=16,cex=2,col="dark red")
> P [1] 0.0009765625 0.0097656250 0.0439453125 0.1171875000 0.2050781250 [6] 0.2460937500 0.2050781250 0.1171875000 0.0439453125 0.0097656250 [11] 0.0009765625 > Q [1] 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 > KLD(P,Q) ... $sum.KLD.px.py #This is KL-D(P||Q) [1] 0.5219417 $sum.KLD.py.px [1] 1.077474 #This is KL-D(Q||P)