KL散度的理解

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

KL散度( KL divergence)

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

熵(entropy

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

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

若是咱们使用 log2 做为底,熵能够被理解为:咱们编码全部信息所须要的最小位数(minimum numbers of bits)
须要注意的是:经过计算熵,咱们能够知道信息编码须要的最小位数,却不能肯定最佳的数据压缩策略。怎样选择最优数据压缩策略,使得数据存储位数与熵计算的位数相同,达到最优压缩,是另外一个庞大的课题。

KL散度的计算

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

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 VAEpost

转载于:https://www.cnblogs.com/blogofnickchen/p/7221641.html学习