Алгоритм распространения доверия
(
англ.
belief propagation, trust propagation algorithm , также
алгоритм «sum-product»
) —
алгоритм
маргинализации
с помощью двунаправленной передачи сообщений на
графе
, применяемый для вывода на
графических вероятностных моделях
(таких как
байесовские
и
марковские сети
). Предложен
Дж. Перлом
в 1982 году.
Постановка задачи
Рассмотрим функцию:
-
, где
Чтобы получить вероятность, необходимо её нормализовать:
-
Рассматриваются следующие задачи:
-
Задача
нормализации
:
-
найти
-
Задача
маргинализации
:
-
найти
-
Задача нормализованной маргинализации
-
найти
Все эти задачи
NP-полны
, так что сложность их решения в худшем случае возрастает
экспоненциально
. Однако некоторые частные случаи можно решить быстрее, чем и занимается данный
алгоритм
.
Структура графа
Граф, используемый алгоритмом, состоит из вершин, соответствующих переменным, и вершин, соответствующих функциям. Функции соединены с переменными, от которых они зависят.
Пример
Например, функции
-
соответствует следующий граф:
-
Передача сообщений
В графе пересылаются сообщения двух видов: от функций к переменным и от переменных к функциям.
От переменной
к функции
:
-
(здесь
— множество вершин, соседних с i)
От функции
к переменной
:
-
При этом пустое произведение считаем равным единице. Из этих формул видно, что если у вершины всего одна соседняя точка, то её (вершины) сообщение можно вычислить, не зная входящих сообщений.
Алгоритм
Существует два подхода, в зависимости от характера полученного графа:
Подход 1
Предположим, что
граф
является
деревом
. Начиная с листьев будем постепенно обходить все вершины и вычислять сообщения (при этом применяется стандартное правило передачи сообщений: сообщение можно передавать только в том случае, если его можно полностью построить).
Тогда за количество шагов, равное
диаметру графа
, работа алгоритма закончится.
Подход 2
Если
граф
не является
деревом
, то можно начать с того, что все переменные передают сообщение 1, а потом уже его модифицируют, когда до них доходят сообщения от функций.
Такой алгоритм в общем случае работает неверно и делает много лишнего, но все же полезен на практике.
Вычисление маргиналов
Когда рассылка сообщений закончена, маргиналы вычисляются по следующей формуле:
-
-
Нормализация на лету
Если нужно рассчитать только нормализованные маргиналы (
настоящие вероятности
), то можно на каждом шаге
нормализовать
сообщения от переменных к функциям:
-
,
где
подобраны так, чтобы
-
Математическое обоснование алгоритма
С математической точки зрения алгоритм перераскладывает изначальное разложение:
-
в произведение:
-
,
где
соответствует узлам-функциям, а
— узлам-переменным.
Изначально, до передачи сообщений
и
Каждый раз, когда приходит сообщение
из функции в переменную,
и
пересчитываются:
-
,
-
Очевидно, что общее произведение от этого не меняется, а
по окончании передачи сообщений станет маргиналом
.
Ссылки