KL散度

KL散度(KL divergence)

全称:Kullback-Leibler Divergence。

用途:比较两个概率分布的接近程度。
在统计应用中,我们经常需要用一个简单的,近似的概率分布 f * 来描述。

观察数据 D 或者另一个复杂的概率分布 f 。这个时候,我们需要一个量来衡量我们选择的近似分布 f * 相比原分布 f 究竟损失了多少信息量,这就是KL散度起作用的地方。

信息量

一个事件x的信息量是:

$I ( x ) = − \log ( p ( x ) )$

解读:如果一个事件发生的概率越大,那么信息量就越小。如果是1,也就是100%发生,那么信息量为0。

就是对信息量求期望值。

$H(X)=E[I(x)]=-\sum\limits_{x∈X}p(x)\log p(x)$

举例: 如果10次考试9次不及格,一次及格。 假设事件为$x_A$代表及格事件,那么这个事件的熵为:

$H_A(x)=-[p(x_A)\log(p(x_A))+(1-p(x_A))\log(1-p(x_A))]=0.4690$

其实也和后续的逻辑回归的二分类的损失函数有类似。

KL散度

现在,我们能够量化数据中的信息量了,就可以来衡量近似分布带来的信息损失了。

KL散度的计算公式其实是熵计算公式的简单变形,在原有概率分布 $p$ 上,加入我们的近似概率分布 $q$ ,计算他们的每个取值对应对数的差:

$D_KL(p||q) = \sum\limits_{i=1}^Np(x_i) \cdot (\log p(x_i)-\log q(x_i))$

换句话说,KL散度计算的就是数据的原分布与近似分布的概率的对数差的期望值。

在对数以2为底时, $log_2$ ,可以理解为“我们损失了多少位的信息”。

写成期望形式:

$D_KL(p||q) = E[\log p(x)-\log q(x)]$

$D_KL(p||q) = \sum\limits_{i=1}^Np(x_i) \cdot \log \frac{p(x_i)}{q(x_i)}$

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

散度不是距离

$D_KL(p||q) \neq D_KL(q||p)$

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

使用KL散度进行优化

通过不断改变预估分布的参数,我们可以得到不同的KL散度的值。

在某个变化范围内,KL散度取到最小值的时候,对应的参数是我们想要的最优参数。

这就是使用KL散度优化的过程。

神经网络进行的工作很大程度上就是“函数的近似”(function approximators)。

因此我们可以使用神经网络学习很多复杂函数,学习过程的关键就是设定一个目标函数来衡量学习效果。

也就是通过最小化目标函数的损失来训练网络(minimizing the loss of the objective function)。

而KL散度可以作为正则化项(regularization term)加入损失函数之中,即使用KL散度来最小化我们近似分布时的信息损失,让我们的网络可以学习很多复杂的分布。

一个典型应用是VAE(变分自动编码)。


参考:

https://www.cnblogs.com/boceng/p/11519381.html

https://blog.csdn.net/iterate7/article/details/80061850

0%