KL Divergence

参考文章:
KL散度(Kullback-Leibler Divergence)介绍及详细公式推导
变分自编码器(VAE)推导

KL散度简介

KL散度的概念来源于概率论和信息论中。KL散度又被称为:相对熵、互熵、鉴别信息、Kullback熵、Kullback-Leible散度(即KL散度的简写)。在机器学习、深度学习领域中,KL散度被广泛运用于变分自编码器中(Variational AutoEncoder,简称VAE)、EM算法、GAN网络中。是描述两个概率分布P和Q差异的一种方法。

KL散度定义

KL散度的定义是建立在熵(Entropy)的基础上的。此处以离散随机变量为例,先给出熵的定义,再给定KL散度定义。

若一个离散随机变量X的可能取值为 X = x 1 , x 2 , ⋯ , x n X={x_1,x_2,⋯,x_n} X=x1,x2,,xn,而对应的概率为 p i = p ( X = x i ) p_i=p(X=x_i) pi=p(X=xi),则随机变量 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)=in=p(xi)logp(xi)规定当 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(xi)=0,p(xi)logp(xi)=0
若有两个随机变量 P 、 Q P、Q PQ,且其概率分布分别为 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)} DKL(pq)=inp(x)logq(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)=xp(x)logq(x)1=xp(x)logq(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 ) p ( x ) D_{KL}(p||q)=H(p,q)−H(p)=−∑_xp(x)logq(x)−∑_x−p(x)logp(x)=−∑_xp(x)log{q(x)\over p(x)} DKL(pq)=H(p,q)H(p)=xp(x)logq(x)xp(x)logp(x)=xp(x)logp(x)q(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散度

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KL-DivergenceKL散度)是一种用来衡量两个概率分布之间差异的指标。它始终大于等于0,当且仅当两个分布完全相同时,KL散度等于0。KL散度具有非对称性,即DKL(P||Q)不等于DKL(Q||P),并且不满足三角不等式的形式,因此KL散度不是用来衡量距离的指标。 KL散度的公式可以表示为DKL(P||Q) = ΣP(x) * log(P(x) / Q(x)),其中P和Q分别是两个概率分布,x表示分布中的某个事件。这个公式可以用来计算P相对于Q的信息损失,或者可以理解为在使用Q来近似表示P时的额外损失。 在机器学习中,KL散度经常被用于衡量两个概率分布之间的差异,例如在概率生成模型和信息检索中。在PyTorch中,可以使用F.kl_div()函数来计算KL散度。这个函数的原型为F.kl_div(input, target, size_average=None, reduce=None, reduction='mean'),其中input和target分别是输入和目标张量。 总结起来,KL散度是一种用来衡量两个概率分布之间差异的指标,它不是用来衡量距离的,并且具有非对称性。在机器学习中,KL散度常被用于衡量模型输出与真实分布之间的差异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅谈KL散度](https://blog.csdn.net/weixin_33774615/article/details/85768162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [KL Divergence ——衡量两个概率分布之间的差异](https://blog.csdn.net/weixin_42521185/article/details/124364552)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值