You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于KL散度中使用概率分布对数比率的技术疑问

关于KL散度中使用概率分布对数比率的技术疑问

最近我在研究两个概率分布的差异检验,了解到KL散度可以分别对离散和连续分布衡量它们的相似度:

  • 离散分布的KL散度:
    $$D_{KL}(P||Q) = \sum_{i} P(i) \cdot log \left( \frac{P(i)}{Q(i)} \right)$$
  • 连续分布的KL散度:
    $$D_{KL}(P||Q) = \int_{-\infty}^{+\infty} p(x) \cdot log \left( \frac{p(x)}{q(x)} \right) dx$$

不过我一直有个疑问:为什么我们要关注这两个分布的对数比率呢?

其实这个问题得从KL散度的本质——信息论里的「编码冗余」说起:

  • 首先,KL散度衡量的是「用分布Q的编码方式去表示分布P的样本时,平均需要多花多少比特的信息量」。在信息论里,一个事件的自信息量(也就是编码它需要的最优比特数)定义为 $-log(P(x))$,概率越小的事件,信息量越大,这完全符合我们的直觉——罕见事件肯定比天天发生的常见事件更“有信息量”。
  • 当我们用Q的编码去表示P的样本时,每个样本的编码长度差异就是 $(-logQ(x)) - (-logP(x)) = log(\frac{P(x)}{Q(x)})$,对所有样本按P的概率加权平均,就得到了KL散度。这里对数的核心作用是让信息量满足可加性:两个独立事件的联合信息量等于各自信息量之和,只有对数函数能满足这个要求(比如$log(P(x,y))=log(P(x))+log(P(y))$,刚好对应联合事件的信息量是两个事件信息量的和)。

另外还有几个实用层面的原因:

  • 数值稳定性:如果直接用比率$\frac{P(x)}{Q(x)}$,当P远大于Q时,这个值会指数级爆炸,而对数能把这种极端的增长压缩成线性变化,避免计算时出现数值溢出的问题。
  • 优化便利性:对数函数是单调递增的,最大化$log(\frac{P(x)}{Q(x)})$和最大化$\frac{P(x)}{Q(x)}$的结果完全一致,但对数的导数更简单($\frac{d}{dx}log(x)=\frac{1}{x}$),在梯度下降这类优化算法中,计算起来更高效,也更稳定。
  • 非线性惩罚:对数能对“Q和P差异大”的情况施加更合理的惩罚——当Q远小于P时,$log(\frac{P}{Q})$会快速增大,这意味着用Q编码P的样本会浪费大量信息量,正好对应KL散度要衡量的“冗余”程度。

备注:内容来源于stack exchange,提问作者wulasa

火山引擎 最新活动