TensorFlow 变分推理操作
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.