KL散度 (Kullback-Leibler Divergence,相对熵)

References:

https://zhuanlan.zhihu.com/p/45131536

https://hsinjhao.github.io/2019/05/22/KL-DivergenceIntroduction/

https://www.jiqizhixin.com/articles/2018-05-29-2

含义

  • 一句话:KL散度可以用来衡量两个分布之间的差异/匹配程度。但它并不是一个真正的度量或者距离,因为它不具有对称性。
  • 广义的散度指的是一类运算,它将矢量空间上的一个矢量场对应到一个标量场上,通俗的讲,就是输入一组矢量,返回一个标量。
  • 在统计学意义上来说,KL散度可以用来衡量两个分布之间的差异程度。若两者差异越小,KL散度越小,反之亦反。当两分布一致时,其KL散度为0。正是因为其可以衡量两个分布之间的差异,所以在VAE、EM、GAN中均有使用到KL散度。
  • 在信息论中,其可理解为编码系统对信息进行编码时所需要的平均附加信息量。

定义

理解熵

  • 熵是用来表示信息量。
  • 首先,我们考虑一个离散的随机变量 \(x\) 。当我们观察到这个变量的一个具体值的时候,我们接收到了多少信息呢?
  • 信息量可以被看成在学习 \(x\) 的值的时候的“惊讶程度”。如果有人告诉我们一个相当不可能的事件发生了,我们收到的信息要多于我们被告知某个很可能发生的事件发生时收到的信息。如果我们知道某件事情一定会发生,那么我们就不会接收到信息。于是,我们对于信息内容的度量将依赖于概率分布\(p(x)\) ,因此我们想要寻找一个函数\(h(x)\) ,它是概率\(p(x)\)的单调递增函数,表达了信息的内容。 \(h(.)\) 的形式可以这样寻找:如果我们有两个不相关的事件 x 和 y ,那么我们观察到两个事件同时发生时获得的信息应该等于观察到事件各自发生时获得的信息之和,即 \(h(x)+h(y)=h(x,y)\) 。两个不相关事件是统计独立的,因此\(p(x)p(y)=p(x,y)\)。根据这两个关系,很容易看出\(h(.)\)一定与\(p(.)\) 的对数有关。因此,我们有: \[ h(x)=-\log p(x) \] 其中,负号确保了信息一定是正数或者是零。注意,低概率事件\(x\) 对应于高的信息量。
  • 现在假设一个发送者想传输一个随机变量的值给接收者。这个过程中,他们传输的平均信息量通可以通过求上式关于概率分布 p(x) 的期望得到。这个期望值就是熵Entropy: \[ H[x]=-\sum_x p(x)\log p(x) \]
  • 它是这个随机变量的平均信息量。

KL散度的性质

  1. \(D_{KL}(p||q)>=0\), 当且仅当\(p(x)=q(x)\)时取等号
  2. 不满足对称性,即\(D_KL(p||q)\neq D_KL(q||p)\)

讨论

  • KL散度是不对称的。因此不能作为一个距离度量,在使用时往往有一些问题。
  • 那么就可以用\(\alpha\)-散度。KL散度是它的一个特殊化。根据这个,还能算出一个对称的Hellinger距离,它的平方根是一个合法的距离度量
  • 还可以推广到F散度:把KL散度公式中的\(\log\)函数替换为任意的函数f,只要f满足这两个条件:
    1. f是一个凸函数
    2. \(f(1)=0\) 此时F散度的表达式为: \[ D_f(p\|q)=\int q(X)f(\frac{p(X)}{q(X)})dX \]\(f(X)=X\log X\)时,就是KL散度了。
  • Bregman散度:这是从另一个角度来思考“距离”。最常见的均方欧氏距离,推广到任意维度的函数之间的距离,同样只是需要一个凸函数就能表达了。这个凸函数的取值,可以表示一大片不同的散度,都属于Bregman散度的特例
  • Wasserstein距离。这是用来解决一个问题的:如果两个分布离得太远,完全没有重叠,那么KL散度的值会失去意义。这在深度学习中意味着这一点梯度为0——梯度消失! Wasserstein距离可以解决这种问题,也叫做Earth-Mover(推土机)距离:当我们希望把一堆土推移成另一堆土的形状和位置,推土代价定义为移动土的量*土移动的距离,这个代价就是两个分布的Wasserstein距离。 Wessertein距离相比KL散度和JS散度的优势在于:即使两个分布的支撑集没有重叠或者重叠非常少,仍然能反映两个分布的远近。WGAN就是Wasserstein距离比较经典的应用之一。

信息的压缩

  1. 假如我们有一组样本,每个样本分别有不同的值。可以直接记下每个样本的信息。
  2. 也可以用这个样本的分布来表示同样的信息量。(每个取值的概率)
  3. 还可以用一个已知的分布来表示这个分布(比如均匀分布、二项分布、正态分布),只需要记下具体分布的参数。