簡體   English   中英

TensorFlow 概率中聯合分布的組成

[英]Composition of Joint Distributions in TensorFlow Probability

我是概率編程和 TFP 的新手。 我正在嘗試將它用於概率圖形建模,它在將復雜模型分解為更簡單的分段解釋方面的靈活性吸引了我。 但是,我很難定義與較低級別模型定義的變量概率相關的較高級別模型。

假設我根據解釋變量x_1, x_2為隨機變量theta_1定義以下分布,同樣為基於x_3, x_4theta_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_1theta_2作為解釋變量的模型。 例如,假設我想 model 一個隨機變量y ,它正態分布於theta_1theta_2之間的差異。 鑒於theta_1_modeltheta_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM