Probability

為什麼 Kullback-Leilbler 散度比平方誤差更能衡量兩個概率分佈之間的距離?[複製]

  • June 1, 2019

我知道當我們想要測量概率形式的數字之間的距離時,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) 

引用自:https://stats.stackexchange.com/questions/411105

comments powered by Disqus