阅读(11.2k) 书签 (0)

TensorFlow 计算Renyi分歧

2018-08-30 15:56 更新

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.