Алгоритм распространения доверия

Алгоритм распространения доверия (англ. belief propagation, trust propagation algorithm, также алгоритм «sum-product») — алгоритм маргинализации с помощью двунаправленной передачи сообщений на графе, применяемый для вывода на графических вероятностных моделях (таких как байесовские и марковские сети). Предложен Дж. Перлом в 1982 году.

Постановка задачи править

Рассмотрим функцию:

 , где  

Чтобы получить вероятность, необходимо её нормализовать:

 

Рассматриваются следующие задачи:

  1. Задача нормализации:
найти  
  1. Задача маргинализации:
найти  
  1. Задача нормализованной маргинализации
найти  

Все эти задачи NP-полны, так что сложность их решения в худшем случае возрастает экспоненциально. Однако некоторые частные случаи можно решить быстрее, чем и занимается данный алгоритм.

Структура графа править

Граф, используемый алгоритмом, состоит из вершин, соответствующих переменным, и вершин, соответствующих функциям. Функции соединены с переменными, от которых они зависят.

Пример править

Например, функции

 

соответствует следующий граф:

 

Передача сообщений править

В графе пересылаются сообщения двух видов: от функций к переменным и от переменных к функциям.

От переменной   к функции  :

  (здесь   — множество вершин, соседних с i)


От функции   к переменной  :

 

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

Алгоритм править

Существует два подхода, в зависимости от характера полученного графа:

Подход 1 править

Предположим, что граф является деревом. Начиная с листьев будем постепенно обходить все вершины и вычислять сообщения (при этом применяется стандартное правило передачи сообщений: сообщение можно передавать только в том случае, если его можно полностью построить).

Тогда за количество шагов, равное диаметру графа, работа алгоритма закончится.

Подход 2 править

Если граф не является деревом, то можно начать с того, что все переменные передают сообщение 1, а потом уже его модифицируют, когда до них доходят сообщения от функций.

Такой алгоритм в общем случае работает неверно и делает много лишнего, но все же полезен на практике.

Вычисление маргиналов править

Когда рассылка сообщений закончена, маргиналы вычисляются по следующей формуле:

 
 

Нормализация на лету править

Если нужно рассчитать только нормализованные маргиналы (настоящие вероятности), то можно на каждом шаге нормализовать сообщения от переменных к функциям:

 ,

где   подобраны так, чтобы

 

Математическое обоснование алгоритма править

С математической точки зрения алгоритм перераскладывает изначальное разложение:

 

в произведение:

 ,

где   соответствует узлам-функциям, а   — узлам-переменным.

Изначально, до передачи сообщений   и  

Каждый раз, когда приходит сообщение   из функции в переменную,   и   пересчитываются:

 ,
 

Очевидно, что общее произведение от этого не меняется, а   по окончании передачи сообщений станет маргиналом  .

Ссылки править

С. Николенко. Курс «Вероятностное обучение»