# Обучение байесовских сетей: от простого подсчета до магического алгоритма EM

Источник: https://www.youtube.com/watch?v=4d9V6Sxa6gU
Канал: Stanford Online
Опубликовано: 09.03.2026

---

Курс CS221 Стэнфордского университета продолжает погружение в мир байесовских сетей. Если на предыдущих лекциях основное внимание уделялось архитектуре сетей и методам логического вывода (inference), то новая встреча посвящена фундаментальному вопросу: откуда берутся вероятности в этих моделях? В эпоху больших данных ручное заполнение таблиц вероятностей невозможно, поэтому на первый план выходит машинное обучение параметров из эмпирических данных.

## 🧠 Основы: От структуры к вероятностям
[[JUMP:00:05]]

Байесовская сеть — это не просто граф, а способ определения совместного распределения вероятностей над набором случайных переменных [00:18]. Каждая такая сеть состоит из двух компонентов: направленного ациклического графа (DAG) и набора локальных условных распределений (local conditional distributions) для каждого узла [00:46]. 

Ключевые принципы работы с БД:

*   **Локальность:** Для каждого узла $X_i$ определяется таблица $P(X_i | \text{Parents}(X_i))$, где учитываются только прямые «родители» переменной [00:59].
*   **Совместная вероятность:** Чтобы получить вероятность конкретного сценария (например, вероятности взлома при сработавшей сигнализации), все локальные вероятности перемножаются [02:13].
*   **Инференс:** Запросы к «базе данных» сети могут быть как точными (маргинализация), так и приближенными (сэмплирование по Гиббсу или выборка с отклонением) [03:18].

## 📊 Обучение при полных данных: Стратегия «считай и нормируй»
[[JUMP:13:21]]

В самом простом сценарии — обучении с полным наблюдением (fully observed setting) — алгоритм видит значения всех переменных для каждого примера из обучающей выборки [13:49]. Основная задача здесь — заполнить таблицы локальных условных распределений.

Алгоритм обучения интуитивно понятен и сводится к двум шагам:

1.  **Подсчет (Count):** Проход по обучающей выборке и фиксация того, сколько раз встречается конкретное значение узла при определенных значениях его родителей [16:56].
2.  **Нормировка (Normalize):** Превращение счетчиков в вероятности так, чтобы их сумма для каждой комбинации условий равнялась единице [17:25].

На примере моделирования рейтингов фильмов: если мы видим «драму» с рейтингом «5» три раза, а всего драм в выборке пять, то вероятность $P(R=5 | G=\text{Drama})$ составит 0.6 [19:57]. Этот метод является решением задачи оценки максимального правдоподобия (Maximum Likelihood Estimation, MLE) в закрытой форме [55:10]. Это означает, что для нахождения оптимальных параметров не нужно использовать градиентный спуск или итерации — достаточно один раз пройтись по данным [55:23].

### 🤝 Разделение параметров (Parameter Sharing)
[[JUMP:30:11]]

В реальных системах, например, при наличии тысячи пользователей, создание отдельной таблицы вероятностей для каждого из них приведет к переобучению и нехватке данных [30:39]. Решение заключается в том, чтобы заставить разные узлы графа использовать одну и ту же таблицу параметров [31:06]. 

По мнению лектора, выбор между разделением параметров и индивидуальными моделями — это классический компромисс в моделировании:

*   **Разделение:** Требует меньше данных для обучения и повышает стабильность модели [36:56].
*   **Индивидуализация:** Обеспечивает гибкость и точность, если объекты (например, пользователи) действительно ведут себя по-разному [37:09].

## 🛠 Проблема нулевых частот и сглаживание Лапласа
[[JUMP:59:30]]

Серьезный недостаток классического метода MLE проявляется на малых выборках. Если в данных ни разу не встретился фильм с рейтингом «2», модель присвоит этому событию нулевую вероятность [1:00:13]. Со слов спикера, такой подход слишком «узколоб» (close-minded), так как отсутствие события в выборке не означает его невозможность в реальности [1:00:27].

Для решения этой проблемы применяется **сглаживание Лапласа (Laplacian smoothing)**:

*   К каждому счетчику в таблице добавляется небольшое число $\lambda$ (псевдо-счетчик), обычно 1 или 0.1 [1:01:06].
*   Это гарантирует, что ни одна вероятность не станет строго нулевой.
*   При увеличении объема реальных данных влияние этих «фиктивных» наблюдений постепенно сходит на нет [1:04:10].

## 🪄 Алгоритм EM: Работа с «невидимыми» данными
[[JUMP:1:05:03]]

Наиболее сложным и «магическим» спикер называет случай частичного наблюдения (partially observable setting), когда значения некоторых переменных (скрытых или латентных) в обучающей выборке отсутствуют [1:06:05]. Здесь невозможно просто посчитать частоты, возникает проблема «курицы и яйца»: чтобы оценить параметры, нужно знать скрытые значения, а чтобы восстановить скрытые значения, нужны параметры [1:08:19].

Для решения используется **Алгоритм ожидания-максимизации (Expectation-Maximization, EM)**:

1.  **E-шаг (Expectation):** На основе текущих (сначала случайных) параметров вычисляется распределение вероятностей для скрытых переменных. Вместо одного жесткого значения мы получаем «взвешенные» догадки о том, что там могло быть [1:10:52].
2.  **M-шаг (Maximization):** Эти взвешенные данные трактуются как реальная выборка. Мы снова выполняем «считай и нормируй», но теперь используем веса из E-шага [1:15:35].

Процесс итеративно повторяется до сходимости. EM гарантированно увеличивает правдоподобие данных на каждом шаге, но может застрять в локальном оптимуме, поэтому важен выбор начальных условий [1:18:15]. Лектор подчеркивает, что EM отлично подходит для задач кластеризации, где скрытая переменная — это номер кластера, не имеющий заранее заданного семантического смысла [1:18:41].