KL散度的公式是
正向kl散度 python 正向kl散度_正向kl散度 python

假设真实分布为正向kl散度 python 正向kl散度_最小化_02,我们想用分布正向kl散度 python 正向kl散度_正向kl散度 python_03去近似正向kl散度 python 正向kl散度_最小化_02,我们很容易想到用最小化KL散度来求,但由于KL散度是不对称的,所以并不是真正意义上的距离,那么我们是应该用正向kl散度 python 正向kl散度_正向kl散度 python_05还是用正向kl散度 python 正向kl散度_正向kl散度 python_06?

下面就来分析这两种情况:

正向KL散度: 正向kl散度 python 正向kl散度_正向kl散度 python_05

正向kl散度 python 正向kl散度_正向kl散度 python_05被称为正向KL散度,其形式为:
正向kl散度 python 正向kl散度_正向kl散度 python_09
仔细观察(1)式,正向kl散度 python 正向kl散度_最小化_02是已知的真实分布,要求使上式最小的正向kl散度 python 正向kl散度_正向kl散度 python_03

考虑当正向kl散度 python 正向kl散度_正向kl散度 python_12时,这时正向kl散度 python 正向kl散度_正向kl散度 python_03取任何值都可以,因为正向kl散度 python 正向kl散度_正向kl散度 python_14这一项对整体的KL散度没有影响。当正向kl散度 python 正向kl散度_正向kl散度 python_15时,正向kl散度 python 正向kl散度_正向kl散度 python_14这一项对整体的KL散度就会产生影响,为了使(1)式最小,正向kl散度 python 正向kl散度_正向kl散度 python_03又处于正向kl散度 python 正向kl散度_正向kl散度 python_14中分母的位置,所以正向kl散度 python 正向kl散度_正向kl散度 python_03尽量大一些才好。

总体而言,对于正向 KL 散度,在正向kl散度 python 正向kl散度_最小化_02大的地方,想让 KL 散度小,就需要 正向kl散度 python 正向kl散度_正向kl散度 python_03 的值也尽量大;在正向kl散度 python 正向kl散度_最小化_02小的地方,正向kl散度 python 正向kl散度_正向kl散度 python_03对整体 KL 影响并不大(因为 log 项本身分子很小,又乘了一个非常小的 p(x))。换一种说法,要想使正向 KL 散度最小,则要求在 正向kl散度 python 正向kl散度_正向kl散度 python_24 不为 0 的地方,正向kl散度 python 正向kl散度_正向kl散度 python_25 也尽量不为 0,所以正向 KL 散度被称为是 zero avoiding。此时得到的分布 正向kl散度 python 正向kl散度_正向kl散度 python_25

反向KL散度:正向kl散度 python 正向kl散度_正向kl散度 python_06

正向kl散度 python 正向kl散度_正向kl散度 python_06被称为反向KL散度,其形式为:
正向kl散度 python 正向kl散度_最小化_29
仔细观察(2)式,正向kl散度 python 正向kl散度_最小化_02是已知的真实分布,要求使上式最小的正向kl散度 python 正向kl散度_正向kl散度 python_03

考虑当正向kl散度 python 正向kl散度_正向kl散度 python_12时,这时为了使(2)式变小,正向kl散度 python 正向kl散度_正向kl散度 python_03取0值才可以,否则(2)式就会变成无穷大。当正向kl散度 python 正向kl散度_正向kl散度 python_15时,为了使(2)式变小,必须在正向kl散度 python 正向kl散度_最小化_02小的地方,正向kl散度 python 正向kl散度_正向kl散度 python_03也小。在正向kl散度 python 正向kl散度_最小化_02大的地方可以适当忽略。换一种说法,要想使反向 KL 散度最小,则要求在 正向kl散度 python 正向kl散度_正向kl散度 python_24 为 0 的地方,正向kl散度 python 正向kl散度_正向kl散度 python_25 也尽量为 0,所以反向 KL 散度被称为是 zero forcing。此时得到分布 正向kl散度 python 正向kl散度_正向kl散度 python_25

一个例子

假如正向kl散度 python 正向kl散度_最小化_02是两个高斯分布的混合,正向kl散度 python 正向kl散度_正向kl散度 python_03是单个高斯,用正向kl散度 python 正向kl散度_正向kl散度 python_03去近似正向kl散度 python 正向kl散度_最小化_02,两种KL散度该如何选择?

正向kl散度 python 正向kl散度_正向kl散度 python_45


对于正向KL散度来说,正向kl散度 python 正向kl散度_正向kl散度 python_03的分布图像更符合第二行,正向KL散度更在意正向kl散度 python 正向kl散度_最小化_02中的常见事件,也就是首先要保证正向kl散度 python 正向kl散度_最小化_02峰值附近的正向kl散度 python 正向kl散度_最小化_49,在正向kl散度 python 正向kl散度_正向kl散度 python_03中的概率密度值不能为0。当 正向kl散度 python 正向kl散度_正向kl散度 python_24 具有多个峰时,正向kl散度 python 正向kl散度_正向kl散度 python_25 选择将这些峰模糊到一起,以便将高概率质量放到所有峰上。

正向kl散度 python 正向kl散度_正向kl散度 python_53


对于反向KL散度来说,正向kl散度 python 正向kl散度_正向kl散度 python_03的分布图像更符合第二行。反向KL散度更在意正向kl散度 python 正向kl散度_最小化_02中的罕见事件,也就是首先要保证正向kl散度 python 正向kl散度_最小化_02低谷附件的正向kl散度 python 正向kl散度_最小化_49,在正向kl散度 python 正向kl散度_正向kl散度 python_03中的概率密度值也较小。当 正向kl散度 python 正向kl散度_正向kl散度 python_24 具有多个峰并且这些峰间隔很宽时,如该图所示,最小化 KL 散度会选择单个峰,以避免将概率密度放置在正向kl散度 python 正向kl散度_正向kl散度 python_24的多个峰之间的低概率区域中。

在机器学习的变分推理中使用的是反向正向kl散度 python 正向kl散度_最小化_61

参考:https://lumingdong.cn/various-entropies-in-machine-learning.html