Есть ли способ заставить зацикленное распространение убеждений вычислить максимальные маргиналы?

По-видимому, существует два стандартных способа передать сообщение при распространении убеждений: найти суммарное произведение (предельное распределение) переменной и найти максимальное произведение переменной.

Я нашел этот код в Интернете, сделанный пользователем krashkov , который вычисляет сумму-произведение переменной с использованием нециклического и циклического распространения убеждений (и обрисовывает в общих чертах детали реализации и теории распространения убеждений), но у меня возникли проблемы с настройкой кода так что он вычисляет максимальное произведение переменной, используя зацикленное распространение убеждений.

Я внес следующие изменения в код:

  • Я изменил строку в factor_marginalization()функция для вычисления res_distribution = np.max(x.get_distribution(), tuple(np.where(np.isin(x.get_variables(), variables))[0]))вместо res_distribution = np.sum(x.get_distribution(), tuple(np.where(np.isin(x.get_variables(), variables))[0]))

  • Я изменил строку в каждом из __normalize_msg()функции в belief_propagation()а также loopy_belief_propagation()классы для return factor(message.get_variables(), message.get_distribution())вместо return factor(message.get_variables(), message.get_distribution()/np.sum(message.get_distribution()))

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

0 ответов

Другие вопросы по тегам