Это не официальный сайт wikipedia.org 01.01.2023

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

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

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

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

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

p ( X ) = j = 1 m f j ( X j )  , где X j = { x i } i = 1 n  

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

p ( X ) = 1 Z j = 1 m f j ( X j ) , Z = X j = 1 m f j ( X j )  

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

  1. Задача нормализации:
найти Z = X j = 1 m f j ( X j )  
  1. Задача маргинализации:
найти p i ( x i ) = k i p ( X )  
  1. Задача нормализованной маргинализации
найти p i ( x i ) = k i p ( X )  

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

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

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

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

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

p ( X ) = f 1 ( x 1 ) f 2 ( x 2 ) f 3 ( x 3 ) f 4 ( x 1 , x 2 ) f 5 ( x 2 , x 3 )  

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

 

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

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

От переменной x i   к функции f j  :

q i j ( x i ) = k n e ( i ) j r k i ( x i )   (здесь n e ( i )   — множество вершин, соседних с i)


От функции f j   к переменной x i  :

r j i ( x i ) = X i x i ( f j ( X j ) k n e ( i ) j q k j ( x k )  

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

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

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

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

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

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

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

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

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

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

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

p i ( x i ) = j n e ( i ) r j i ( x i )  
Z = i p i ( x i ) , p ( x i ) = 1 Z p i ( x i )  

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

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

q i j ( x i ) = α i j k n e ( i ) j r k i ( x i )  ,

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

i q i j ( x i ) = 1  

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

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

p ( X ) = j = 1 m f j ( X j )  

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

p ( X ) = j = 1 m ϕ j ( X j ) i = 1 m ψ i ( x i )  ,

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

Изначально, до передачи сообщений ϕ j ( X j ) = f j ( X j )   и ψ i ( x i ) = 1  

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

ψ i ( x i ) = j n e ( i ) r j i ( x i )  ,
ϕ j ( X i ) = f j ( X j ) i n e ( j ) r j i ( x i )  

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

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

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