阅读(1120) (11)

TensorFlow 变分推理操作

2017-08-29 16:27:32 更新

tf.contrib.bayesflow.variational_inference.elbo


elbo (
log_likelihood ,
variational_with_prior = None ,
keep_batch_dim = True ,
form = None ,
name = 'ELBO'
)

定义在:tensorflow/contrib/bayesflow/python/ops/variational_inference_impl.py.

参见指南:BayesFlow变分推理(contrib)>操作

证明下限.log p(x) >= ELBO.

利用变分推理对隐变量进行推理的优化目标.

此函数要与 StochasticTensor 配合使用.用户应该建立推理网络,使用 StochasticTensors 作为潜在变量,生成网络.elbo 在最小需求的情况下 p(x|Z),假定所有 StochasticTensor 的上游 p(x|Z) 都是变分分布.使用 register_prior 登记每个 StochasticTensor 先验分布.或者,通过 variational_with_prior 指定所有变分分布及其先验.

数学描述:

log p(x) = log\int p(x ,Z)dZ
= log\int\frac {q(Z)p(x ,Z)} {q(Z)} dZ
= log E_q [ \frac { p(x ,Z)} {q(Z)}]
>= E_q [log \ frac { p(x ,Z)} {q(Z)}] = L[ q ; p ,x] #ELBO
L[ q;p,X] = E_q [log P(x|Z)p (Z)] - E_q[log q(Z)]
= E_q [log P(x|Z)p(Z)] + H[ q ] (1 )
= E_q [ log p(x|Z)] - KL( q | | p ) (2 )
H - Entropy
KL - Kullback - Leibler divergence

参见 Hoffman 等人的随机变分推断的2.2 节,包括 ELBO 在完全贝叶斯设置中对最小化 KL 的等价性 (q (Z) | |p (Z | x)) .

form 指定使用哪种形式的 ELBO.form = ELBOForms.default 尝试,按优先顺序: 分析 KL, 分析熵, 抽样.

variational_with_prior 字典中的多个条目意味着分解.例如 q (Z) = q (z1) q (dxx) q (z3).

ARGS:

  • log_likelihood:张量对数 p(x | Z).
  • variational_with_prior:字典从 StochasticTensorq(Z)到 Distributionp(Z).如果为 None,默认为所有 StochasticTensor 对象的上游 log_likelihood 与 register_prior 注册的先验.
  • keep_batch_dim:布尔值.在求和熵/KL 项时是否保留批次维度.当样本是每个数据点, 这应该是真的;否则 (例如在 Bayesian NN中), 这应该是假的.
  • form:ELBOForms 常数.控制如何计算 ELBO.默认为 ELBOForms.default.
  • name:前缀操作的名称.

返回:

与 log_likelihood 具有相同的类型和形状的 ELBO .

提出:

  • TypeError:如果变量 variational_with_prior 不是 StochasticTensors 或者先验不是 Distributions.
  • TypeError:如果表单不是有效的 ELBOForms 常量.
  • ValueError:如果 variational_with_prior 是无,则StochasticTensor 上游没有 log_likelihood. 
  • ValueError:如果任何变分没有事先通过或注册.

tf.contrib.bayesflow.variational_inference.ELBOForms


tf.contrib.bayesflow.variational_inference.ELBOForms 类

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

参考指南:BayesFlow变分推理(contrib)>操作

用于控制 elbo 计算的常量.

analytic_kl 使用了变分分布和先验 (s) 之间的解析 kl 散度.

analytic_entropy 使用变分分布的分析熵.

sample 使用样本KL或样本熵是提供的关节.

有关默认使用的内容,请参见 elbo.

方法


check_form

check_form ( form )

类成员

  • analytic_entropy
  • analytic_kl
  • default
  • sample

tf.contrib.bayesflow.variational_inference.elbo_with_log_joint


elbo_with_log_joint (
log_joint ,
variational = None ,
keep_batch_dim = True ,
form = None ,
name = 'ELBO'
)

定义在:tensorflow/contrib/bayesflow/python/ops/variational_inference_impl.py

参考指南:BayesFlow变分推理(contrib)>操作

下限的证明,log p(x) >= ELBO.

此方法用于计算 p (x,Z), 而不是 p (x |Z).请参见 elbo 以获取更多详细信息.

由于仅指定了连接,所以分析KL不可用.

ARGS:

  • log_joint:张量对数 p(x,Z).
  • variational:StochasticTensor q (Z) 的列表.如果没有, 则默认为 log_joint 上游的所有 StochasticTensor 对象.
  • keep_batch_dim:布尔值,表示是否在求和熵项时保持批量维数.当样本是每个数据点,这应该是真实的;否则 (例如在 Bayesian NN 中),这应该是假的.
  • form:ELBOForms 常数.控制如何计算ELBO,默认为 ELBOForms.default.
  • name:前缀操作的名称.

返回:

与 log_joint 具有相同的类型和形状的张量 ELBO.

注意:

  • TypeError:如果 variationals 在变分中不是 StochasticTensor.
  • TypeError:如果表单不是有效的 ELBOForms 常量.
  • ValueError:如果 variational 是 None,log_joint 上游没有 StochasticTensor.
  • ValueError:如果形式是 ELBOForms.analytic_kl.

tf.contrib.bayesflow.variational_inference.register_prior


register_prior (
variational,
prior
)

定义在:tensorflow/contrib/bayesflow/python/ops/variational_inference_impl.py

参考指南:BayesFlow变分推理(contrib)>操作

将变分 StochasticTensor 与分布的先验关联.  这是一个帮助函数, 它与 elbo 结合使用, 允许用户指定变分分布和它们的先验之间的映射, .

这是一个帮助函数,它与 elbo 结合使用,允许用户指定变分分布与其先验之间的映射,而不必明确传递 variational_with_prior.

ARGS:

  • variational:StochasticTensor q(Z).近似分布.
  • prior:Distribution p(Z).事先分配.

返回:

None

注意:

  • ValueError:如果变分不是 StochasticTensor 或 prior 不是 Distribution.