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没有被这个功能处理.