Быстрый гамильтоновый сэмплер Монте-Карло с аналитической матрицей градиента/массы

Я только что начал проект, в котором мне нужно сделать выборку из многомерного (сейчас ~ 10 ^ 3-мерного, но должен перейти к ~ 10 ^ 6) и сильно негауссовского апостериорного распределения с помощью гамильтониана Монте-Карло (HMC) пробоотборник. В моем конкретном случае градиенты потенциала могут быть вычислены аналитически, а массовая матрица может быть грубо аппроксимирована. Насколько я понимаю, большинство пакетов вероятностного программирования (например, stan, tf.probability, edward, pymcx, ...) используют какой-то численный/стохастический градиентный расчет/аппроксимацию, который может занимать больше времени, а также менее эффективен для конвергенция.

Прямо сейчас у меня есть очень наивная реализация Python в виде этого псевдокода, который это способ замедлить многомерные вычисления. Знаете ли вы, существуют ли какие-либо модификации этого алгоритма, повышающие производительность, или уже есть хорошие и быстрые пробоотборники, которые явно учитывают эти аналитические результаты?


person user6566791    schedule 12.04.2019    source источник
comment
Будет полезно посмотреть, что у вас есть прямо сейчас   -  person Sharky    schedule 13.04.2019
comment
Я думаю, что это одна из вещей, которую можно сделать с пользовательскими Theano Ops в PyMC3, но я никогда не использовал его сам. Возможно, спросите об этом на странице дискурса PyMC.   -  person merv    schedule 13.04.2019
comment
Этот другой вопрос также может быть полезен: > stackoverflow.com/questions/52759259/   -  person merv    schedule 13.04.2019