Я новичок в вероятности c программирования и TFP. Я пытаюсь использовать его для вероятностного графического моделирования c, которое привлекает меня гибкостью, позволяя разбивать сложные модели на более простые кусочные объяснения. Однако у меня возникают трудности при определении моделей более высокого уровня, которые вероятностно связаны с переменными, определенными моделями более низкого уровня.
Предположим, я определил следующее распределение для случайной величины theta_1
на основе пояснительных переменных x_1, x_2
и аналогично для theta_2
на основе x_3, x_4
:
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
в качестве объясняющих переменных. Например, предположим, что я хотел бы смоделировать случайную величину y
, которая обычно распределяется по разнице между theta_1
и theta_2
. Учитывая, что theta_1_model
и theta_2_model
сами являются распределениями (для случайных величин dim-3), похоже, я должен иметь возможность использовать их в определении JointDistributionSequential для y
по направлениям:
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. Это не работает однако. Именно при определении взаимосвязи между новыми переменными в модели более высокого уровня и отдельными переменными, уже определенными в моделях более низкого уровня, у меня возникают трудности .
Я, конечно, мог бы определить полное модель для y
в одном большом JointDistributionSequential
определении. Однако для более сложных приложений, где я хотел бы повторно использовать компоненты более низкого уровня, это невозможно.
Недавно был опубликован официальный документ (https://arxiv.org/pdf/2001.11819.pdf), озаглавленный «Совместные распределения». для вероятности TensorFlow »с разделом« Композиция совместных распределений ». В этом разделе предполагается, что совместные распределения в принципе можно комбинировать способом, который я предлагаю, но не показывает, как могут быть определены отношения между новыми переменными в модели более высокого уровня и переменными, уже определенными в моделях более низкого уровня.
Любая помощь будет принята с благодарностью. Спасибо.