Bayesian Network
Байесовская сеть моделирует переменные и их условные зависимости в виде ориентированного ациклического графа, позволяя обновлять вероятности причин с учётом свидетельств.
Байесовская сеть, также называемая сетью убеждений, — это вероятностная графическая модель, которая представляет набор случайных переменных и их условные зависимости с помощью ориентированного ациклического графа (DAG). Каждый узел — это переменная, например заболевание, симптом или показание датчика, а каждая стрелка направлена от непосредственного влияющего фактора к переменной, на которую он воздействует. В каждом узле хранится таблица условных вероятностей, которая задаёт распределение для каждой комбинации значений родительских узлов. Вместе эти таблицы определяют полное совместное распределение всех переменных. Получив данные о некоторых переменных, сеть вычисляет обновлённые вероятности для остальных, что делает её инструментом для диагностики, оценки рисков и поддержки принятия решений в условиях неопределённости. Джудеа Перл разработал значительную часть теории в 1980-х годах, а его работы по вероятностному и причинному выводу принесли ему премию Тьюринга в 2011 году.
Структура и таблицы условных вероятностей#
Граф кодирует условную независимость: каждая переменная независима от переменных, которые не являются её потомками, если известны её родительские узлы. Благодаря этому совместное распределение раскладывается на небольшие локальные компоненты: P(X1, ..., Xn) = P(X1 | parents(X1)) × ... × P(Xn | parents(Xn)). В классической сети «ограбление — сигнализация» из работ Перла, которая рассматривается в учебнике Рассела и Норвига «Искусственный интеллект: современный подход», есть пять булевых переменных. Ограбление или землетрясение могут включить домашнюю сигнализацию, после чего соседи Джон и Мэри звонят владельцу дома.
Полная совместная таблица для пяти бинарных переменных требует 31 независимую вероятность. Сети достаточно 10: по одной для ограбления и землетрясения, четыре для сигнализации при каждой комбинации значений двух родительских узлов и по две для каждого соседа в зависимости от состояния сигнализации. По мере увеличения числа переменных экономия быстро растёт, поскольку размер каждой таблицы зависит только от количества родительских узлов этого узла.
Вывод: обновление вероятностей на основе наблюдений#
При выводе наблюдаемые переменные фиксируются, а апостериорное распределение запрашиваемой переменной вычисляется с помощью теоремы Байеса, применённой к графу. Вывод может выполняться в любом направлении: от причин к следствиям (предсказание), от следствий к причинам (диагностика) и между причинами общего следствия. В последнем случае, который называют объясняющим исключением, если известно, что сигнализация сработала, то сведения о землетрясении снижают вероятность ограбления. Точный вывод перебором или исключением переменных применим для маленьких сетей и сетей древовидной структуры, но в общем случае задача NP-трудная. Поэтому в больших сетях используют приближённые методы, например взвешивание по правдоподобию, выборку Гиббса или циклическое распространение убеждений.
В этом примере на вопрос из учебника P(Burglary | John calls, Mary calls) отвечают перебором, суммируя факторизованное совместное распределение по ненаблюдаемым переменным землетрясения и сигнализации:
from itertools import product
# Conditional probability tables of the burglary-alarm network
p_burglary, p_earthquake = 0.001, 0.002
p_alarm = {(True, True): 0.95, (True, False): 0.94, (False, True): 0.29, (False, False): 0.001}
p_john = {True: 0.90, False: 0.05} # P(John calls | alarm)
p_mary = {True: 0.70, False: 0.01} # P(Mary calls | alarm)
def bern(p, value):
"""Return the probability of a binary outcome with success probability p."""
return p if value else 1 - p
# Evidence: both neighbors called. Sum the factored joint over the hidden variables.
joint = {True: 0.0, False: 0.0}
for b, e, a in product([True, False], repeat=3):
joint[b] += bern(p_burglary, b) * bern(p_earthquake, e) * bern(p_alarm[b, e], a) * p_john[a] * p_mary[a]
print(f"P(burglary | John and Mary call) = {joint[True] / sum(joint.values()):.3f}")Скрипт выводит 0.284 — тот же ответ, что и в учебнике. Два звонка повышают вероятность ограбления с 1 к 1,000 примерно до 28%. Оставшиеся 72% приходятся на объяснения без ограбления, например срабатывание сигнализации из-за землетрясения или неисправности, поскольку ограбления случаются очень редко.
Обучение байесовских сетей на данных#
Сеть можно построить вручную на основе экспертных знаний, обучить на данных или совместить оба подхода. При обучении параметров таблицы условных вероятностей заполняются на основе наблюдаемых частот; для сглаживания редких сочетаний используются априорные распределения, а при пропущенных значениях — алгоритм максимизации ожидания. Обучение структуры ищет сам граф: либо оценивает кандидатные графы по критерию, например байесовскому информационному критерию, либо выполняет тесты условной независимости, как это делает алгоритм PC. Обученные стрелки показывают статистическую зависимость, но интерпретация их как причин требует дополнительных допущений, рассматриваемых в обнаружении причинно-следственных связей. Библиотеки Python, например pgmpy, реализуют оба вида обучения, а также точный и приближённый вывод.
Примеры применения в реальных условиях#
- Медицинская диагностика: Сети связывают заболевания с вызываемыми ими симптомами и результатами анализов. Наблюдения врача обновляют вероятность каждого состояния, а каждый вывод можно проследить по графу — это одна из форм объяснимого ИИ.
- Диагностика неисправностей: В промышленных и IT-системах моделируется распространение отказов компонентов на сигналы тревоги и показания приборов. При визуальном контроле классы дефектов, обнаруженные детектором YOLO26, могут выступать в сети в качестве наблюдаемых данных, обновляющих вероятность каждой первопричины, например изношенного инструмента или неправильно откалиброванного станка.
- Оценка рисков: Экологи, страховщики и инженеры по безопасности объединяют ограниченные данные с экспертными оценками в сетях, вычисляющих вероятность редких событий.
Байесовские сети и связанные модели#
- Наивный Байес: Байесовская сеть, в которой единственным родительским узлом всех признаков является узел класса. Предполагается, что признаки независимы при известном классе.
- Случайные поля Маркова: Графические модели с ненаправленными рёбрами, подходящие для симметричных отношений, например между соседними пикселями изображения.
- Марковские процессы принятия решений: Модели последовательного принятия решений, где действия изменяют состояние, а награды нужно максимизировать. Это стандартная основа обучения с подкреплением. Байесовская сеть учитывает решения и выигрыши только после добавления узлов решений и полезности, образующих диаграмму влияния.
- Скрытые марковские модели: Динамическая байесовская сеть, структура которой повторяется на каждом временном шаге, а скрытое состояние порождает одно наблюдение за шаг. Фильтры Калмана имеют ту же структуру, но используют непрерывные состояния и линейно-гауссовские переходы и наблюдения.










