KL散度(Kullback-Leibler Divergence)是信息论中的一个重要概念,在机器学习、统计学习和深度学习中被广泛应用。它通常用来衡量两个概率分布之间的差异。KL散度虽然不是一个严格意义上的距离(因为它不具备对称性和三角不等式等性质),但它可以用来描述两个分布在信息上的差异。下面将详细介绍KL散度的定义、相关数学公式及其在机器学习中的应用。
KL散度的基本定义
KL散度用来度量两个概率分布 P 和 Q 之间的差异,也被称为相对熵。我们假设P是真实分布,Q 是估计分布,那么KL散度的基本数学定义为:
(离散型公式)
(连续型公式)
其中 P(x) 是真实的概率分布函数,Q(x) 是估计的概率分布函数。为每个点上真实分布和估计分布之间的对数比值。
KL散度刻画了在假设数据分布为 Q时,我们根据 P 获得的额外信息损失。如果 P 和 Q分布越接近,KL散度就越小;如果它们差异很大,KL散度值就会很大。这里我们大概知道KL散度越小两个概率分布越接近,KL散度越大,两个概率分布越不同即可。
KL散度的推导和解释
KL散度的定义来源于信息熵的概念。熵大家都知道这个概率,衡量系统无序性(混乱性)的程度,信息熵类比过去就行了,它是衡量某个分布中不确定性的量。给定一个概率分布 P,它的熵 H(P) 定义为:
熵 H(P)描述了从分布 P 中产生随机变量时的不确定性或信息量。
除了熵之外,我们也经常在机器学习的训练迭代中见到交叉熵(Cross Entropy)这个概念,我们也简单介绍一下它。
H(P,Q) (交叉熵)描述了使用分布 Q 来对 P 进行编码时的开销,它定义为:
下面我们再来看看KL散度的公式:
嘿,我们发现了什么,KL散度、熵、交叉熵三者竟然有如下关系:
这是巧合吗,肯定不是,要了解这其中的原因,我们还需要更深一步了解熵、交叉熵、KL散度的概念。
熵 H(P) 是用来衡量分布 P 的不确定性的。它告诉我们,如果我们根据分布 P 生成数据,平均需要多少信息(比如位数)来编码这些数据。换句话说,熵 H(P) 描述了我们在面对由 P 分布生成的数据时的最优编码长度。
交叉熵 H(P,Q) 则是另一种度量,它表示我们使用分布 Q 来描述真实分布 P 时,编码的平均长度。这意味着,虽然真实数据是由分布 P 生成的,但我们假设它是由 Q 生成的,因此编码这些数据时的“开销”要比实际使用 P 编码时更高。
KL散度 本质上是用来衡量使用分布 Q 代替真实分布 P 时,编码数据所需的额外开销。这个额外的开销正好就是交叉熵和熵之间的差值。因此,两者的差值表示了由于我们使用了错误的(或者叫估计的)分布 Q 而多消耗的编码长度,也就是信息损失。
最后总结一下:
KL散度公式之所以是 H(P,Q)−H(P),并不是巧合,而是因为它精确地刻画了当我们使用错误分布 Q 来替代真实分布 P 时,所付出的“代价”或信息损失。这种损失正是我们在信息论中关心的额外开销,所以 KL 散度有着非常自然的数学形式。
KL散度的性质
KL散度有着以下几个重要的性质:
非负性:KL散度总是大于等于0,即 ,我们可以这么理解,当我们用一个估计的分布Q去代替真实分布P的时候,肯定会有损失,最起码不会好过真实分布P,所以当P和Q分布相同的时候,KL散度为0,代表两个概率分布之间没有任何差异,反之它就会大于0,不可能小于0。具体的证明可以看看这位大佬的文章:KL散度(Kullback–Leibler divergence)非负性证明_kl散度非负性证明-CSDN博客
非对称性:,即KL散度不对称,因此不能作为一个严格的距离度量。例如,
可能很大,而
却很小。
在 DKL(P∥Q) 中,分布 P 被认为是真实分布,分布 Q 是近似的估计分布。这个公式表示了如果我们错误地使用 Q 而非 P 来编码数据,会带来多少信息损失。而在 DKL(Q∥P)中,分布 Q 被当作真实分布,而 P 则是估计分布。所以两者在信息论的意义上也是不同的。
以上解释为一种感性的解释,缺乏数学的理性,大家有兴趣可以自行推导一下(本菜鸡尝试了一下没推出来~wuwu,以图为证,下面就不会了,希望有大佬可以教教)
不等式与信息熵:KL散度与熵相关联,熵 H(P)) 是衡量分布 P 的不确定性,而 H(P,Q) 是在使用 Q 进行编码时的平均编码长度。KL散度描述了这个长度的额外开销。
最后总结一下,这篇文章讲了一下KL散度的基本定义、相关推导和理解、以及性质,下一篇文章我可能会介绍一下KL散度在机器学习领域的应用,大家有缘再会!