參考文章:
KL散度(Kullback-Leibler Divergence)介紹及詳細公式推導
變分自編碼器(VAE)推導
KL散度簡介
KL散度的概念來源於概率論和信息論中。KL散度又被稱爲:相對熵、互熵、鑑別信息、Kullback熵、Kullback-Leible散度(即KL散度的簡寫)。在機器學習、深度學習領域中,KL散度被廣泛運用於變分自編碼器中(Variational AutoEncoder,簡稱VAE)、EM算法、GAN網絡中。
KL散度定義
KL散度的定義是建立在熵(Entropy)的基礎上的。此處以離散隨機變量爲例,先給出熵的定義,再給定KL散度定義。
若一個離散隨機變量X的可能取值爲X = x 1 , x 2 , ⋯ , x n X={x_1,x_2,⋯,x_n} X = x 1 , x 2 , ⋯ , x n ,而對應的概率爲p i = p ( X = x i ) p_i=p(X=x_i) p i = p ( X = x i ) ,則隨機變量X X X 的熵定義爲:
H ( X ) = − ∑ i n = p ( x i ) l o g p ( x i ) H(X)=−∑_i^n=p(x_i)log_p(x_i) H ( X ) = − i ∑ n = p ( x i ) l o g p ( x i ) 規定當p ( x i ) = 0 時 , p ( x i ) l o g p ( x i ) = 0 p(x_i)=0時,p(x_i)log_p(x_i)=0 p ( x i ) = 0 時 , p ( x i ) l o g p ( x i ) = 0
若有兩個隨機變量P 、 Q P、Q P 、 Q ,且其概率分佈分別爲p ( x ) 、 q ( x ) p(x)、q(x) p ( x ) 、 q ( x ) ,則p p p 相對q q q 的相對熵爲:
D K L ( p ∣ ∣ q ) = ∑ i n p ( x ) l o g p ( x ) q ( x ) D_{KL}(p||q)=∑_i^np(x)log{p(x)\over q(x)} D K L ( p ∣ ∣ q ) = i ∑ n p ( x ) l o g q ( x ) p ( x )
之所以稱之爲相對熵,是因爲其可以通過兩隨機變量的交叉熵(Cross-Entropy)以及信息熵推導得到:
針對上述離散變量的概率分佈p ( x ) 、 q ( x ) p(x)、q(x) p ( x ) 、 q ( x ) 而言,其交叉熵定義爲:
H ( p , q ) = ∑ x p ( x ) l o g 1 q ( x ) = − ∑ x p ( x ) l o g q ( x ) H(p,q)=∑_xp(x)log{1\over q(x)}=−∑_xp(x)logq(x) H ( p , q ) = x ∑ p ( x ) l o g q ( x ) 1 = − x ∑ p ( x ) l o g q ( x )
在信息論中,交叉熵可認爲是對預測分佈q ( x ) q(x) q ( x ) 用真實分佈p ( x ) p(x) p ( x ) 來進行編碼時所需要的信息量大小。
因此,KL散度或相對熵可通過下式得出:
D K L ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) = − ∑ x p ( x ) l o g q ( x ) − ∑ x − p ( x ) l o g p ( x ) = − ∑ x p ( x ) ( l o g q ( x ) − l o g p ( x ) ) = − ∑ x p ( x ) l o g q ( 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)} D K L ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) = − x ∑ p ( x ) l o g q ( x ) − x ∑ − p ( x ) l o g p ( x ) = − x ∑ p ( x ) ( l o g q ( x ) − l o g p ( x ) ) = − x ∑ p ( x ) l o g p ( x ) q ( x )
代碼
import numpy as np
from scipy import *
def asymmetricKL ( P, Q) :
return sum ( P * log( P / Q) )
def symmetricalKL ( P, Q) :
return ( asymmetricKL( P, Q) + asymmetricKL( Q, P) ) / 2.00
KL = scipy. stats. entropy( P, Q)
服從一維高斯分佈的隨機變量KL散度
服從多元高斯分佈的隨機變量KL散度