Probability

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

  • June 1, 2019

我知道當我們想要測量概率形式的數字之間的距離時,KL-divergence 是一個更合適的度量。但是,我仍然很困惑使用 KL 散度而不是概率數之間的平方誤差有什麼好處。

如果有人能用簡單的語言解釋這一點,我將不勝感激。

概述:

  • KL-Divergence 源自香農熵。
  • 香農熵是信號 X 中包含的信息量 P(X) .
  • 交叉熵是當我們用估計分佈對信號 X 進行編碼時包含在信號 X 中的信息 Q(X) 而不是它的真實分佈 P(X) .
  • KL-Divergence 是“真實”香農熵和“編碼”交叉熵之間的信息差異。
  • KL-Divergence 是不對稱的,因為如果我們通過編碼獲得信息 P(X) 使用 Q(X) ,那麼在相反的情況下,如果我們編碼,我們會丟失信息 Q(X) 使用 P(X) . 如果將高分辨率 BMP 圖像編碼為較低分辨率的 JPEG,則會丟失信息。如果將低分辨率 JPEG 轉換為高分辨率 BMP,您將獲得信息。當您對概率分佈進行編碼時,這同樣適用 P(X) 使用 Q(X) ,或者做相反的事情。所以屬性: DKL(PQ)DKL(QP)
    實際上是可取的,因為它表達了當我們使用 KL-Divergence 作為相似性度量時信息以一種方式丟失並以另一種方式獲得的事實。
  • 另一方面,平方誤差是對稱的: SSE(P,Q)=SSE(Q,P)
    因此,如果我們使用 SSE 作為相似度的度量。

細節:

要了解 KL-divergence,首先需要了解香農熵的概念:

I(X)=ni=1P(xi)logP(xi)

香農熵 I(X) 衡量一個信號中包含多少信息 Xx1,x2,,xn 其特點是分佈 P(xi) .

換句話說,知道概率分佈 XP(xi) 我學習或獲得了多少信息,在進行實驗後,我發現結果是 X=xi .

要看到這一點,請考慮以下情況 P(xi)=1 對於一些 xi , 和 0 對於所有其他人。所以事件 X=xi 總是預期的(這是一個特定的事件),我們從執行實驗中什麼也沒學到,因此在這種情況下 X 信息為零。如果你做數學,你會看到在這種情況下, I(X)=0 .

另一方面,如果 P(xi)=1n 對於所有 i,即我們有一個均勻分佈和任何值 X=xi 同樣可能,我們有最大可能值 I(X) ,給定集合 X .

現在讓我們定義交叉熵,即有多少信息在 X ,如果我建模 X 具有模擬分佈 Q(xi) 而不是真實分佈 P(xi)

H(P,Q)=ni=1P(xi)logQ(xi)

為了簡化,我們將寫 I(P) 代替 I(X) , 因為集合 X 沒有改變。現在你可以看一下KL-divergence,這是我們使用真實分佈的情況下的信息差異 P(xi) 來表示我們的信號和模擬分佈 Q(xi)

DKL(PQ)=H(P,Q)I(P)

現在讓我們填寫條款:

DKL(PQ)=ni=1P(xi)logQ(xi)+ni=1P(xi)logP(xi)

然後簡化:

DKL(PQ)=ni=1P(xi)(logQ(xi)logP(xi))

這反過來導致:

DKL(PQ)=ni=1P(xi)log(Q(xi)P(xi))

這與使用平方誤差有何不同?考慮我們估計時的平方誤差 P(xi) 使用 Q(xi)

SSE(P,Q)=ni=1(P(xi)Q(xi))2

這個量是對稱的:

SSE(P,Q)=SSE(Q,P)

KL-Divergence 不對稱:

DKL(PQ)DKL(QP)


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