TensorFlow 變分推理操作

2018-08-30 15:23 更新

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.

利用變分推理對隱變量進(jìn)行推理的優(yōu)化目標(biāo).

此函數(shù)要與 StochasticTensor 配合使用.用戶應(yīng)該建立推理網(wǎng)絡(luò),使用 StochasticTensors 作為潛在變量,生成網(wǎng)絡(luò).elbo 在最小需求的情況下 p(x|Z),假定所有 StochasticTensor 的上游 p(x|Z) 都是變分分布.使用 register_prior 登記每個 StochasticTensor 先驗分布.或者,通過 variational_with_prior 指定所有變分分布及其先驗.

數(shù)學(xué)描述:

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 等人的隨機(jī)變分推斷的2.2 節(jié),包括 ELBO 在完全貝葉斯設(shè)置中對最小化 KL 的等價性 (q (Z) | |p (Z | x)) .

form 指定使用哪種形式的 ELBO.form = ELBOForms.default 嘗試,按優(yōu)先順序: 分析 KL, 分析熵, 抽樣.

variational_with_prior 字典中的多個條目意味著分解.例如 q (Z) = q (z1) q (dxx) q (z3).

ARGS:

  • log_likelihood:張量對數(shù) p(x | Z).
  • variational_with_prior:字典從 StochasticTensorq(Z)到 Distributionp(Z).如果為 None,默認(rèn)為所有 StochasticTensor 對象的上游 log_likelihood 與 register_prior 注冊的先驗.
  • keep_batch_dim:布爾值.在求和熵/KL 項時是否保留批次維度.當(dāng)樣本是每個數(shù)據(jù)點(diǎn), 這應(yīng)該是真的;否則 (例如在 Bayesian NN中), 這應(yīng)該是假的.
  • form:ELBOForms 常數(shù).控制如何計算 ELBO.默認(rèn)為 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或樣本熵是提供的關(guān)節(jié).

有關(guān)默認(rèn)使用的內(nèi)容,請參見 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 以獲取更多詳細(xì)信息.

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

ARGS:

  • log_joint:張量對數(shù) p(x,Z).
  • variational:StochasticTensor q (Z) 的列表.如果沒有, 則默認(rèn)為 log_joint 上游的所有 StochasticTensor 對象.
  • keep_batch_dim:布爾值,表示是否在求和熵項時保持批量維數(shù).當(dāng)樣本是每個數(shù)據(jù)點(diǎn),這應(yīng)該是真實(shí)的;否則 (例如在 Bayesian NN 中),這應(yīng)該是假的.
  • form:ELBOForms 常數(shù).控制如何計算ELBO,默認(rèn)為 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 與分布的先驗關(guān)聯(lián).  這是一個幫助函數(shù), 它與 elbo 結(jié)合使用, 允許用戶指定變分分布和它們的先驗之間的映射, .

這是一個幫助函數(shù),它與 elbo 結(jié)合使用,允許用戶指定變分分布與其先驗之間的映射,而不必明確傳遞 variational_with_prior.

ARGS:

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

返回:

None

注意:

  • ValueError:如果變分不是 StochasticTensor 或 prior 不是 Distribution.
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號