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.


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy