pytorch KL散度学习

pytorch官方文档中给出了说明pytorch KL散度学习_第1张图片
下面是在学习过程中需要注意的:

  1. KL散度,也叫做相对熵,计算公式如下:

    K L ( p ∣ ∣ q ) = ∑ P ( x ) l o g ( P ( X ) Q ( x ) ) KL(p||q) =\sum{P(x)log(\frac{P(X)}{Q(x)})} KL(pq)=P(x)log(Q(x)P(X))
    其中 P ( x ) P(x) P(x)是真实的分布,是目标; Q ( x ) Q(x) Q(x)是拟合分布,是想要改变的分布。KL散度值越小,分布越接近。

  2. 性质

  • KL散度值 ≥ \geq 0,当 P ( x ) = Q ( x ) P(x) = Q(x) P(x)=Q(x) 时等号成立。
  • KL散度是非对称的,即 K L ( p ∣ ∣ q ) ≠ K L ( q ∣ ∣ p ) KL(p||q)\neq KL(q||p) KL(pq)=KL(qp)
  1. 输入参数
  • 输入 x x x (自己生成的标签)需要经过log_softmax层,把概率分布变换到 l o g log log
  • 输入 y y y (想要拟合到的目标分布)需要经过softmax层计算
  1. 实现代码
import torch.nn as nn

x = F.log_softmax(x)
y = F.softmax(y, dim=1)
criterion = nn.KLDivLoss()
klloss = criterion(x, y)
  1. 可能的错误
    若输入的x或y的分布的概率之和不为1,则会出现KL散度值为负数的情况。

你可能感兴趣的:(ML)