【KL散度原理与实现】

1. 定义

KL散度( Kullback–Leibler divergence),又称相对熵(relative entropy),是描述两个概率分布P和Q差异的一种方法。

2. 特点

它是非对称的,这意味着D(P||Q) ≠ D(Q||P)。

3. 意义

特别的,在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布。KL散度在信息论中有自己明确的物理意义,它是用来度量使用基于Q分布的编码来编码来自P分布的样本平均所需的额外的Bit个数。

而其在机器学习领域的物理意义则是用来度量两个函数的相似程度或者相近程度

4. 公式

在这里插入图片描述

5. Pytorch实现

方式1:先定义再调用

self.KL = torch.nn.KLDivLoss(reduction = 'sum')
loss_kl = self.KL(atts.softmax(dim = -1).log(), deps.softmax(dim = -1))

方式2:直接调用

loss_KL = torch.nn.functional.kl_div(atts.softmax(dim = -1).log(), deps.softmax(dim = -1), reduction = 'sum')
### KL的理论知识概念 KL(Kullback-Leibler Divergence)是一种用于衡量两个概率分布之间差异的非对称量工具,广泛应用于机器学习、信息论和统计学等领域[^1]。它能够量化一个概率分布相对于另一个概率分布的变化情况。 #### 定义公式 对于离型随机变量 \(X\) 的两种概率分布 \(P(x)\) 和 \(Q(x)\),KL的定义如下: \[ D_{KL}(P||Q) = \sum_x P(x) \log{\frac{P(x)}{Q(x)}} \] 其中,\(P(x)\) 表示真实分布,\(Q(x)\) 是近似分布或预测分布。该公式的含义是从分布 \(P(x)\) 到分布 \(Q(x)\) 所需的信息增益[^3]。 #### 信息熵的关系 信息熵是描述随机事件不确定性的指标,其公式为: \[ H(P) = -\sum_x P(x) \log{P(x)} \] 交叉熵则是在给定真实分布 \(P(x)\) 下,使用近似分布 \(Q(x)\) 对消息进行编码所需的平均比特数,其表达式为: \[ H(P, Q) = -\sum_x P(x) \log{Q(x)} \] 因此,KL可以看作是交叉熵减去信息熵的结果: \[ D_{KL}(P||Q) = H(P, Q) - H(P) \][^2] #### 统计学意义 在统计学中,KL反映了两个概率分布之间的距离。如果两个分布完全相同,则 KL 为零;否则,随着分布间差异增大,KL也会随之增加。需要注意的是,KL是非对称的,即通常情况下有 \(D_{KL}(P||Q) \neq D_{KL}(Q||P)\)[^1]。 #### 应用场景 由于其能有效评估模型输出的概率分布目标实际分布间的差距,在许多现代技术中有重要用途。例如变分自编码器 (VAE) 中通过优化隐空间向标准正态分布靠拢的过程就涉及到了KL计算;还有期望最大化算法(EM algorithm)里迭代更新参数阶段同样依赖于这一原理实现收敛过程控制等功能[^3]。 ```python import numpy as np def kl_divergence(p, q): p = np.asarray(p, dtype=np.float64) q = np.asarray(q, dtype=np.float64) return np.sum(np.where(p != 0, p * np.log(p / q), 0)) ``` 以上代码片段展示了如何基于 NumPy 实现简单的二项分布版本 KL 计算功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值