KL散度原理和实现

KL散度计算

KL散度(Kullback-Leibler Divergence)一般用于度量两个概率分布函数之间的相似程度:离散求和、连续求积分。
KL ⁡ ( P ∥ Q ) = ∑ P ( x ) log ⁡ P ( x ) Q ( x ) \operatorname{KL}(P\|Q)=\sum P(x)\log\frac{P(x)}{Q(x)} KL(PQ)=P(x)logQ(x)P(x)


KL ⁡ ( P ∥ Q ) = ∫ P ( x ) log ⁡ P ( x ) Q ( x ) d x \operatorname{KL}(P\|Q)=\int P(x)\log\frac{P(x)}{Q(x)}dx KL(PQ)=P(x)logQ(x)P(x)dx


参考:

KL散度理解以及使用pytorch计算KL散度 - 知乎 (zhihu.com)

KL散度 (Kullback-Leibler divergence) - 知乎 (zhihu.com)


pytorch实现KL散度:

先用softmax计算概率,再进行KL散度计算

import torch.nn.functional as F
kl = F.kl_div(x.softmax(dim=-1).log(), y.softmax(dim=-1), reduction='sum')