"Probabilistic Network Library" (П.Гладков)

advertisement
Павел Александрович
Гладков
Семинар-практикум в
лабораториях ННГУ, созданных
при поддержке Intel®
Библиотека PNL
Probabilistic Network Library
Создание графических моделей
Обучение моделей
Введение наблюдений
Механизмы вывода:
Junction Tree Inference
Loopy-Belief Propagation
Проект parPNL - объективно




Изучение теоретических основ вероятностных
алгоритмов
Анализ исходного кода PNL
Профилирование библиотеки для нахождения
её «узких» мест.
Распараллеливание процедур:
 Для алгоритмов на Junction Tree
 Для алгоритмов Loopy-Belief
Проект parPNL - субъективно






Основы работы в MS VC++ 6.0
Теоретические основы вероятностных сетей и
механизмов вывода
Структуры библиотеки PNL
Теоретический курс «параллельные алгоритмы»
Инструкции MPI и их применение
Инструкции OpenMP
Вероятностные сети

Графическая модель:
А


Б
А – человек курит
Б – у человека рак лёгких
P(Б|А)=0.3
Вероятностные сети

Более сложная модель «Asia»
КУРЕНИЕ
БРОНХИТ
ВИЗИТ В АЗИЮ
РАК ЛЁГКИХ
ТУБЕРКУЛЁЗ?
ИЛИ ТУБЕРКУЛЁЗ, ИЛИ РАК ЛЁГКИХ
ОТДЫШКА
ПОЛОЖИТЕЛЬНЫЙ РЕНТГЕН
Junction Tree Inference
1.
Определение модели:
- определение переменных
- определение структурных зависимостей
- присваивание условных вероятностей
2.
Конструирование механизма вывода:
- морализация графической модели [упрощение]
- триангуляризация морализованного графа
- нахождение cliques морализованного графа
3.
Анализ наблюдений:
- инициализация потенциалов вершин
- выполнение “propagation of evidence”
- нахождение маргинального распределения вероятностей
Профилировка Junction Tree
60
Create (BNet)
50
Create (Evidence)
40
ShrinkObserved
30
20
CollectEvidence
10
DistributeEvidence
0
% общего времени
Параллельный JTree





Создание Байесовой сети Create(BNet)
Создание наблюдения Create(Evidence)
Функция DivideNodes, разделяющая работу между
N процессами
Параллельная версия CollectEvidence
Параллельная версия DistributeEvidence
Организационный вопрос

Сложная иерархия объектов





CObject
CInfEngine
CJtreeInfEngine
Периодические обновления PNL
Вывод: необходимо создание
объекта-потомка CParJtreeInfEngine
Функция DivideNodes

Вычисляется вес каждой clique





Количество вершин в клике
Размер сепаратора
Вычисляется вес поддеревьев
Находится пороговое значение
W*=W(Root)/NProc
Дерево разбивается на поддеревья с
весами, близкими к W*
Первоначальный алгоритм

1-ый слой

2-ой слой

3-й слой

4-й слой
11
9
5
10
6
1
7
2
8
3
4
Улучшенный алгоритм

W*=270/4=67.5
270
30
100
30
20
140
40
40
20
50
10
20
10
10
50
20
20
10
1
30
30
40
40
Улучшенный алгоритм

W*=220/3=73.3
220
30
100
30
20
90
40
40
20
50
10
2
20
10
10
50
20
20
10
1
30
30
40
40
Улучшенный алгоритм

W*=130/2=65
130
30
100
30
20
90
40
40
20
50
10
10
10
50
2
20
3
20
20
10
1
30
30
40
40
Улучшенный алгоритм

W*=90/1=90
90
30
4
60
30
20
90
40
40
20
50
10
10
10
50
2
20
3
20
20
10
1
30
30
40
40
Сравнение алгоритмов
70
Новый
Старый
60
50
40
30
20
10
0
40/115
40/130
50/124
60/134
100/200
Спасибо за внимание
Вопросы?
Download