[英]Composition of Joint Distributions in TensorFlow Probability
我是概率編程和 TFP 的新手。 我正在嘗試將它用於概率圖形建模,它在將復雜模型分解為更簡單的分段解釋方面的靈活性吸引了我。 但是,我很難定義與較低級別模型定義的變量概率相關的較高級別模型。
假設我根據解釋變量x_1, x_2
為隨機變量theta_1
定義以下分布,同樣為基於x_3, x_4
的theta_2
定義以下分布:
theta_1_model = tfd.JointDistributionSequential(
[
tfd.Normal(0, 1, name='x_1'),
tfd.Normal(0, 1, name='x_2'),
lambda x_2, x_1: tfd.Normal(x_1, tf.exp(x_2), name='theta_1')
]
)
theta_2_model = tfd.JointDistributionSequential(
[
tfd.Normal(0, 1, name='x_3'),
tfd.Normal(0, 1, name='x_4'),
lambda x_4, x_3: tfd.Normal(x_3, tf.exp(x_4), name='theta_2')
]
)
然后我想定義依賴theta_1
和theta_2
作為解釋變量的模型。 例如,假設我想 model 一個隨機變量y
,它正態分布於theta_1
和theta_2
之間的差異。 鑒於theta_1_model
和theta_2_model
本身就是分布(對於 dim-3 隨機變量),似乎我應該能夠在y
的 JointDistributionSequential 定義中使用它們,如下所示:
y_model = tfd.JointDistributionSequential(
[
theta_1_model,
theta_2_model,
lambda t_2_m, t_1_m: tfd.Normal(t_1_m[...,2]-t_2_m[...,2], 1, name='y')
]
)
在這里,我嘗試使用 [..., 2] 索引來引用 dim-3 分布中的 theta 分量。 然而,這不起作用。 正是在指定較高級別 model 中的新變量與已在較低級別模型中定義的各個變量之間的關系時,我遇到了困難。
我當然可以在一個大的JointDistributionSequential
定義中為y
定義完整的 model。 然而,對於更復雜的應用程序,我想重用較低級別的組件,這是不可行的。
There has recently been a white-paper ( https://arxiv.org/pdf/2001.11819.pdf ) published entitled 'Joint Distributions for TensorFlow Probability' with a 'Composition of Joint Distributions' section. 本節建議原則上可以按照我建議的方式組合聯合分布,但沒有顯示如何指定高級 model 中的新變量與已在低級模型中定義的變量之間的關系。
任何幫助將不勝感激。 謝謝。
我認為您的代碼只需稍作改動即可使用。 您正在使用t_1_m[...,2]
但t_1_m
不是Tensor
- 作為 JDSequential 的樣本,它是Tensor
的 python 列表。 我試過了,用t_1_m[2]
替換它(另外一個),我能夠從嵌套的 model 中采樣並計算日志概率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.