【问题标题】:How to compute KL-divergence for a product distribution using Tensorflow如何使用 Tensorflow 计算产品分布的 KL 散度
【发布时间】:2020-04-28 13:38:11
【问题描述】:

我想计算张量流中的KL散度DKL( ∏q(zk|x) ‖ p(z) )


其中 ∏q(zk|x) 是 N 个分布的乘积(k=1 到 k=N),不独立,每个 tensorflow_probability.layers.MultivariateNormalTriL 类型。 p(z) 是一个 tfp.distributions.MultivariateNormalDiag。 单个 q(z|x) 和 p(z) 之间的 KL 散度:DKL(q(z|x) ‖ p(z)) 有效。


我尝试子类化 tfp Distributions 类来创建产品分布 Q(z) = ∏q(zk|x) 然后计算 DKL(Q(z) ‖ p(z)) 但我必须实现 _kl_divergence 函数,这让我重新开始。


我想用张量流概率或至少张量流来解决这个问题。

【问题讨论】:

    标签: tensorflow2.0 tensorflow-probability probability-distribution


    【解决方案1】:

    我认为这种情况下没有分析 KL。但是由于 KL[q||p] 是 q(x)*log_q(x)-q(x)*log_p(x) 您可以对 KL 使用蒙特卡罗近似。在 TFP 中,这可能看起来像:

    q = QDist(...)
    p = MVNDiag(...)
    x = q.sample()  # x ~ q(x)
    kl = q.log_prob(x) - p.log_prob(x)
    

    或者,对于较低的方差

    x = q.sample(10)  # x ~ q(x)
    kl = tf.math.reduce_mean(q.log_prob(x) - p.log_prob(x))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 2018-08-10
      • 2021-04-12
      • 1970-01-01
      • 2020-01-01
      • 2017-10-03
      • 2018-09-27
      • 1970-01-01
      相关资源
      最近更新 更多