KL Divergence

參考文章:
KL散度(Kullback-Leibler Divergence)介紹及詳細公式推導
變分自編碼器(VAE)推導

KL散度簡介

KL散度的概念來源於概率論和信息論中。KL散度又被稱爲:相對熵、互熵、鑑別信息、Kullback熵、Kullback-Leible散度(即KL散度的簡寫)。在機器學習、深度學習領域中,KL散度被廣泛運用於變分自編碼器中(Variational AutoEncoder,簡稱VAE)、EM算法、GAN網絡中。

KL散度定義

KL散度的定義是建立在熵(Entropy)的基礎上的。此處以離散隨機變量爲例,先給出熵的定義,再給定KL散度定義。

若一個離散隨機變量X的可能取值爲X=x1,x2,,xnX={x_1,x_2,⋯,x_n},而對應的概率爲pi=p(X=xi)p_i=p(X=x_i),則隨機變量XX的熵定義爲:
H(X)=in=p(xi)logp(xi)H(X)=−∑_i^n=p(x_i)log_p(x_i)規定當p(xi)=0,p(xi)logp(xi)=0p(x_i)=0時,p(x_i)log_p(x_i)=0
若有兩個隨機變量PQP、Q,且其概率分佈分別爲p(x)q(x)p(x)、q(x),則pp相對qq的相對熵爲:

DKL(pq)=inp(x)logp(x)q(x)D_{KL}(p||q)=∑_i^np(x)log{p(x)\over q(x)}
之所以稱之爲相對熵,是因爲其可以通過兩隨機變量的交叉熵(Cross-Entropy)以及信息熵推導得到:
針對上述離散變量的概率分佈p(x)q(x)p(x)、q(x)而言,其交叉熵定義爲:
H(p,q)=xp(x)log1q(x)=xp(x)logq(x)H(p,q)=∑_xp(x)log{1\over q(x)}=−∑_xp(x)logq(x)
在信息論中,交叉熵可認爲是對預測分佈q(x)q(x)用真實分佈p(x)p(x)來進行編碼時所需要的信息量大小。
因此,KL散度或相對熵可通過下式得出:

DKL(pq)=H(p,q)H(p)=xp(x)logq(x)xp(x)logp(x)=xp(x)(logq(x)logp(x))=xp(x)logq(x)p(x)D_{KL}(p||q)=H(p,q)−H(p)=−∑_xp(x)logq(x)−∑_x−p(x)logp(x)=-∑_xp(x)(logq(x)−logp(x))=−∑_xp(x)log{q(x)\over p(x)}

代碼

import numpy as np
from scipy import *

def asymmetricKL(P,Q):
    return sum(P * log(P / Q)) #calculate the kl divergence between P and Q
 
def symmetricalKL(P,Q):
    return (asymmetricKL(P,Q)+asymmetricKL(Q,P))/2.00

KL = scipy.stats.entropy(P,Q) 

服從一維高斯分佈的隨機變量KL散度

在這裏插入圖片描述

服從多元高斯分佈的隨機變量KL散度

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章