参考文章:
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散度