阅读(16.1k) 书签 (0)

TensorFlow 估计ELBO和KL散度中出现的比值

2019-01-31 10:32 更新

tf.contrib.bayesflow.entropy.elbo_ratio

elbo_ratio ( 
    log_p , 
    q , 
    z = None , 
    n = None , 
    seed = None , 
    form = None , 
    name = 'elbo_ratio' 
)

定义在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py.

参见指南:贝叶斯熵(contrib)>操作

估计 ELBO 和 KL 散度中出现的比值

随着 p(z) := exp{log_p(z)} ,该操作返回一个近似值:

E_q [ Log [ p ( Z ) / q ( Z )]  ]

术语 E_q[ Log[p(Z)] ] 总是被计算为样本平均值.术语 E_q[ Log[q(Z)] ] 可以用样本计算,或者定义了 q.entropy() 的精确公式,可以使用精确的公式计算.这是由 kwarg 形式控制的.

该对数比出现在不同的上下文中:

KL[q || p]

如果 log_p(z) = Log[p(z)] 分配 p,该操作近似计算负的 Kullback-Leibler 散度.

elbo_ratio ( log_p , q , n = 100 ) =  - 1  * KL [ q | | p ] , 
KL [ q | | p ]  = E [ Log [ q ( Z )]  - Log [ p ( Z )]  ]

请注意,如果 p 是一个 Distribution,那么 distributions.kl_divergence(q, p) 可能会被确定并作为确切可用的结果.

ELBO

如果 log_p (z) = log [p (z, x)] 是一个分布 p 的日志连接, 这是证据下限 (ELBO):

ELBO 〜= E[Log[ p(Z,X)] - Log[q(Z)]] 
       = Log[p(X)]-KL[q||p] 
      <= Log [p(x)]

用户提供 Tensor 样品 z ,或样品数量来绘制 n.

ARGS:

  • log_p:从可调用映射样本 q 到 Tensors 具有形状 broadcastable 到 q.batch_shape.例如,log_p “就像” q.log_prob 一样工作.
  • q:tf.contrib.distributions.Distribution.
  • z:Tensor 样品来自q,由 q.sample(n) 某些 n 生成.
  • n:整数 Tensor.如果 z 不提供则生成样本数.
  • seed:Python整数来生成随机数生成器.
  • form:ELBOForms.analytic_entropy(使用熵的公式q)或 ELBOForms.sample(熵的样本估计),或 ELBOForms.default(尝试分析熵,样本回退).默认值为ELBOForms.default.
  • name:给这个操作起的名字.

返回:

标量张量持有样本平均 KL 散度.形状是 q 的批次形状, dtype 与 q 相同.

举:

  • ValueError:如果form没有被这个功能处理.