TensorFlow 计算Renyi分歧
tf.contrib.bayesflow.entropy.renyi_ratio
renyi_ratio ( log_p , q , alpha , z = None , n = None , seed = None , name = 'renyi_ratio' )
定义在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py
参见指南:贝叶斯熵(contrib)>操作
使用 Monte Carlo 估计出现在 Renyi 分歧中的比率.
这可以用于计算 Renyi(alpha)分歧,或者基于 Renyi 分歧的日志痕迹近似值.
定义
用 z_i 独立同分布样品 q,和 exp{log_p(z)} = p(z),这操作返回查看(偏向有限个 n)估计:
(1 -alpha)^ { - 1 } Log[ n^{- 1} sum_ {i = 1 } ^ n ( p(z_i)/q(z_i))^ {1-alpha} \approx(1-alpha)^ {- 1 } Log[ E_q [( p(Z)/q(Z))^ { 1 - alpha }]]
该比例出现在不同的上下文中:
Renyi 分歧
如果 log_p(z) = Log[p(z)] 是分配的日志概率,并且 alpha > 0,alpha != 1 ,那么该操作近似于 -1 倍仁义分歧:
# 选择合理的高 n 来限制偏移,见下文 renyi_ratio ( log_p , q ,alpha,n = 100 ) \approx - 1 * D_alpha [ q || p ] ,where D_alpha [ q || p ] := (1 - alpha)^ {-1} Log E_q [(p(Z)/q(Z))^ { 1 - alpha} ]
Renyi(或 “alpha”)的分歧是非负数,并且当且仅当 q = p 时它等于零;alpha 的各种限制导致不同的特殊情况:
alpha D_alpha[q||p] ----- --------------- -- > 0 Log[int_ {q >0} p(Z)dz] = 0.5 , -2 Log[ 1- Hel^ 2[q||p]] ,(\propto squared Hellinger distance) -- > 1 KL[q||p] = 2 Log[1 + chi ^ 2[q||p]] ,(\propto squared Chi - 2 divergence ) -- > infty Log[max_z{q(z)/ p(z)}] ,(min description length principle).
对数证据近似
如果 log_p (z) = log [p (z, x)] 是联合分布 p 的日志,这是在变分推理中常见的 ELBO 的一种替代方法.
L_alpha( q ,p )= Log[p(X)] - D_alpha[q||p]
如果 q 和 p 有同样的支持,并且 0 < a <= b < 1,则可以显示出 ELBO <= D_b <= D_a <= Log[p(x)].因此,该操作允许 ELBO 和真实证据之间进行平滑的插值.
稳定性说明
请注意,当 1 - alpha 值不小的时候,比例 (p(z) / q(z))^{1 - alpha} 会受到下溢/溢出问题的影响.因此,它在集中后在对数空间中进行评估.尽管如此,infinite / NaN 的结果还是会出现.为此,人们可能希望 alpha 逐渐缩小,见操作 renyi_alpha;使用 float64 也将有所帮助.
有限样本量的偏差
由于对数的非线性,对于随机变量{X_1,...,X_n},有 E[ Log[sum_{i=1}^n X_i] ] != Log[ E[sum_{i=1}^n X_i] ].结果,这个估计是有限偏移的 n.对于 alpha < 1 ,它是不减少的 n(预期中).例如,如果 n = 1,此估计器产生与 elbo_ratio 相同的结果,并且当 n 增加的时候,估计的预期值也增加.
呼叫签名
用户提供 Tensor 样品 z 或 样品数量来绘制 n.
ARGS:
- log_p:从可调用映射样本 q 到具有形状 broadcastable 的 Tensors 再到 q.batch_shape.例如,log_p “就像” q.log_prob 一样工作.
- q:tf.contrib.distributions.Distribution;log_p 和 q 应在同一组中得到支持.
- alpha:张量与形状 q. batch_shape 和的值不等于1.
- z:来自 p 的样品张量,由 p.sample 从一些 n 生成.
- n:整数张量;未提供 z 时要使用的样本数.请注意,这可能是高度偏移的小 n, 见字符串.
- seed:随机数生成器的 Python 整数.
- name:给该操作提供一个名字.
返回:
- renyi_result:样本的缩放对数平均值.形状张量等于 q 的批次形状,并且 dtype= q.dtype.