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(P∥Q)=∑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(P∥Q)=∫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')