TensorFlow 估計ELBO和KL散度中出現(xiàn)的比值

2019-01-31 10:32 更新

tf.contrib.bayesflow.entropy.elbo_ratio

elbo_ratio ( 
    log_p , 
    q , 
    z = None , 
    n = None , 
    seed = None , 
    form = None , 
    name = 'elbo_ratio' 
)

定義在 tensorflow/contrib/bayesflow/python/ops/entropy_impl.py.

參見指南:貝葉斯熵(contrib)>操作

估計 ELBO 和 KL 散度中出現(xiàn)的比值

隨著 p(z) := exp{log_p(z)} ,該操作返回一個近似值:

E_q [ Log [ p ( Z ) / q ( Z )]  ]

術(shù)語 E_q[ Log[p(Z)] ] 總是被計算為樣本平均值.術(shù)語 E_q[ Log[q(Z)] ] 可以用樣本計算,或者定義了 q.entropy() 的精確公式,可以使用精確的公式計算.這是由 kwarg 形式控制的.

該對數(shù)比出現(xiàn)在不同的上下文中:

KL[q || p]

如果 log_p(z) = Log[p(z)] 分配 p,該操作近似計算負的 Kullback-Leibler 散度.

elbo_ratio ( log_p , q , n = 100 ) =  - 1  * KL [ q | | p ] , 
KL [ q | | p ]  = E [ Log [ q ( Z )]  - Log [ p ( Z )]  ]

請注意,如果 p 是一個 Distribution,那么 distributions.kl_divergence(q, p) 可能會被確定并作為確切可用的結(jié)果.

ELBO

如果 log_p (z) = log [p (z, x)] 是一個分布 p 的日志連接, 這是證據(jù)下限 (ELBO):

ELBO ?= E[Log[ p(Z,X)] - Log[q(Z)]] 
       = Log[p(X)]-KL[q||p] 
      <= Log [p(x)]

用戶提供 Tensor 樣品 z ,或樣品數(shù)量來繪制 n.

ARGS:

  • log_p:從可調(diào)用映射樣本 q 到 Tensors 具有形狀 broadcastable 到 q.batch_shape.例如,log_p “就像” q.log_prob 一樣工作.
  • q:tf.contrib.distributions.Distribution.
  • z:Tensor 樣品來自q,由 q.sample(n) 某些 n 生成.
  • n:整數(shù) Tensor.如果 z 不提供則生成樣本數(shù).
  • seed:Python整數(shù)來生成隨機數(shù)生成器.
  • form:ELBOForms.analytic_entropy(使用熵的公式q)或 ELBOForms.sample(熵的樣本估計),或 ELBOForms.default(嘗試分析熵,樣本回退).默認值為ELBOForms.default.
  • name:給這個操作起的名字.

返回:

標量張量持有樣本平均 KL 散度.形狀是 q 的批次形狀, dtype 與 q 相同.

舉:

  • ValueError:如果form沒有被這個功能處理.


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號