KL散度的理解

原文地址Count Bayesie
这篇文章是博客Count Bayesie上的文章Kullback-Leibler Divergence Explained 的学习笔记,原文对 KL散度 的概念诠释得非常清晰易懂,建议阅读

KL散度( KL divergence)

全称:Kullback-Leibler Divergence
用途:比较两个概率分布的接近程度
在统计应用中,我们经常需要用一个简单的,近似的概率分布 f 来描述
观察数据 D 或者另一个复杂的概率分布 f 。这个时候,我们需要一个量来衡量我们选择的近似分布 f 相比原分布 f 究竟损失了多少信息量,这就是KL散度起作用的地方。

熵(entropy

想要考察 信息量 的损失,就要先确定一个描述信息量的量纲。
在信息论这门学科中,一个很重要的目标就是量化描述数据中含有多少信息。
为此,提出了 的概念,记作 H
一个概率分布所对应的 熵 表达如下:

H=i=1Np(xi)logp(xi)

如果我们使用 log2 作为底,熵可以被理解为:我们编码所有信息所需要的最小位数(minimum numbers of bits)
需要注意的是:通过计算熵,我们可以知道信息编码需要的最小位数,却不能确定最佳的数据压缩策略。怎样选择最优数据压缩策略,使得数据存储位数与熵计算的位数相同,达到最优压缩,是另一个庞大的课题。

KL散度的计算

现在,我们能够量化数据中的信息量了,就可以来衡量近似分布带来的信息损失了。
KL散度的计算公式其实是熵计算公式的简单变形,在原有概率分布 p 上,加入我们的近似概率分布 q,计算他们的每个取值对应对数的差:

DKL(p||q)=i=1Np(xi)(logp(xi)logq(xi))

换句话说,KL散度计算的就是数据的原分布与近似分布的概率的对数差的期望值。
在对数以2为底时, log2 ,可以理解为“我们损失了多少位的信息”
写成期望形式
DKL(p||q)=E[logp(x)log(q(x)]

更常见的是以下形式:
DKL(p||q)=i=1Np(xi)logp(xiq(xi)

现在,我们就可以使用KL散度衡量我们选择的近似分布与数据原分布有多大差异了。

散度不是距离

DKL(p||q)DKL(q||p)

因为KL散度不具有交换性,所以不能理解为“距离”的概念,衡量的并不是两个分布在空间中的远近,更准确的理解还是衡量一个分布相比另一个分布的信息损失(infomation lost)

使用KL散度进行优化

通过不断改变预估分布的参数,我们可以得到不同的KL散度的值。
在某个变化范围内,KL散度取到最小值的时候,对应的参数是我们想要的最优参数。
这就是使用KL散度优化的过程。

VAE(变分自动编码)

神经网络进行的工作很大程度上就是“函数的近似”(function approximators)
所以我们可以使用神经网络学习很多复杂函数,学习过程的关键就是设定一个目标函数来衡量学习效果。
也就是通过最小化目标函数的损失来训练网络(minimizing the loss of the objective function)
使用KL散度来最小化我们近似分布时的信息损失,让我们的网络可以学习很多复杂分布。
一个典型应用是VAE
Tutorial on VAE

### KL的全称与定义 KL的全称是 **Kullback-Leibler Divergence**,它是一种衡量两个概率分布 \( P \) 和 \( Q \) 之间差异的方法。其定义为: \[ D_{\text{KL}}(P \| Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} \] 这里,\( P(x) \) 表示真实分布,\( Q(x) \) 表示近似分布。KL可以被理解为使用分布 \( Q \) 来近似真实分布 \( P \) 时所导致的“信息损失”的量[^2]。 在离情况下,KL通过求和计算;而在连续情况下,则用积分替代求和符号。公式如下: \[ D_{\text{KL}}(P \| Q) = \int_{-\infty}^{\infty} P(x) \log \frac{P(x)}{Q(x)} dx \] KL具有以下性质: - **非负性**:\( D_{\text{KL}}(P \| Q) \geq 0 \),这是由Gibbs不等式保证的,且当且仅当 \( P = Q \) 时,\( D_{\text{KL}}(P \| Q) = 0 \)[^2]。 - **不对称性**:KL是非对称的,即 \( D_{\text{KL}}(P \| Q) \neq D_{\text{KL}}(Q \| P) \)[^3]。 此外,KL也被称为相对熵(Relative Entropy),因为它可以被理解为两个分布之间的熵差。 ### 信息熵与KL的关系 信息熵(Entropy)是衡量随机变量不确定性的指标,定义为: \[ H(P) = -\sum_{x} P(x) \log P(x) \] KL可以看作是交叉熵(Cross Entropy)与信息熵的差值。交叉熵定义为: \[ H(P, Q) = -\sum_{x} P(x) \log Q(x) \] 因此,KL可以表示为: \[ D_{\text{KL}}(P \| Q) = H(P, Q) - H(P) \] 这意味着KL不仅衡量了分布 \( P \) 和 \( Q \) 的差异,还反映了使用分布 \( Q \) 近似分布 \( P \) 时的信息损失[^4]。 ```python import numpy as np def kl_divergence(p, q): p = np.asarray(p, dtype=np.float64) q = np.asarray(q, dtype=np.float64) return np.sum(np.where(p != 0, p * np.log(p / q), 0)) ``` 上述代码实现了离分布下的KL计算。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值