KL散度:我们为“猜错”付出的代价

Note

KL散度衡量的是,当我们用一个“猜想”的分布 来近似一个“真实”的分布 时,我们额外付出的信息代价。

在继续接下来的阅读前,我希望你能先深入了解一下和交叉熵的概念。

数学上的表达

有了对于熵直观的认识,我们就可以很自然地写下KL散度的数学定义了。

对于离散型随机变量,我们知道熵和交叉熵的定义分别是:

KL散度就是这两者的差值,也就是我们多付出的那部分编码长度:

整理一下,就得到了我们最常见的那个公式:

在这个式子里, 是我们想要逼近的真实分布,而 则是我们用来拟合的近似分布。按照惯例,我们约定 。另外,如果存在某个 使得 ,那么KL散度就是正无穷大。这一点也很好理解:真实世界可能发生的事情,在你的模型里居然认为完全不可能,那你的模型就“错得离谱”,代价自然是无穷大。

对于连续型随机变量,思路是完全一样的,我们只需要把求和符号换成积分符号就行了:

几个绕不开的性质

  1. 非负性,当且仅当 时等号成立。这一点是KL散度最重要的性质,它告诉我们用 去近似 最多也就是“一样好”(代价为 0),绝不会比用 自己更好。这个性质可以用吉布斯不等式或更通用的琴生不等式证明,这里我就不展开了,但结论本身与我们的直觉相符。

  2. 非对称性。这一点初看可能会让人觉得有些困惑,因为它不符合我们对“距离”的直观认知。比如从A到B的距离和从B到A的距离应该是一样的。但KL散度并非如此,这也正是它被称为“散度”(divergence)而非“距离”(distance)的根本原因。它衡量的是一个分布“替代”另一个的单向代价。

为了加深理解,我们不妨来看一个简单的例子。

热身练习:一个硬币的例子

假设我们有一枚不均匀的硬币,它出现正面的概率是 ,反面是 。这就是我们的真实分布

现在我们有两个模型来近似它:

  1. 模型 :认为这是一枚稍微不那么偏的硬币,
  2. 模型 :认为这是一枚完全均匀的硬币,

我们来分别计算一下 到这两个模型的KL散度,看看哪个模型“错得更少”。

根据公式,我们有:

以及:

计算结果显示 ,这跟我们的直觉判断完全一致: 分布显然比 分布更接近真实的 分布。

KL散度的舞台:变分推断

我这次重新梳理KL散度的来龙去脉,主要还是因为它在变分推断(Variational Inference, VI)中扮演着不可或缺的角色。

在很多复杂的贝叶斯模型中,我们想要求解后验分布 ,但这个后验往往形式复杂,难以直接计算。变分推断的思路很巧妙:我们不直接求这个复杂的 ,而是引入一个相对简单的、带参数的分布族 ,然后通过调整参数 ,让 尽可能地去逼近

那么,用什么来衡量这个“逼近”的程度呢?KL散度就登场了。我们的目标,就是最小化 。经过一番推导,我们会发现,最小化这个KL散度,就等价于最大化一个叫做“证据下界”(Evidence Lower Bound, ELBO)的东西。这一下就把一个棘手的推断问题,转化成了一个我们熟悉的优化问题。

关于变分推断和ELBO的更多细节,这里就不展开了,我们在变分推断中再详细讨论。

文章小结

KL散度为我们衡量两个概率分布之间的“差异”提供了一把非对称的尺子。

总的来说,KL散度告诉了我们用一个近似分布 去替代真实分布 时,信息量的损失有多少。这个损失越小,说明 就越接近。当损失为 0 时,两者便完全等同。这个看似简单的思想,却在机器学习的诸多领域中扮演着基石性的角色。