В рамках осеннего курса Стэнфордского университета CS221 преподаватели представили глубокий разбор байесовских сетей — фундаментального инструмента для моделирования и рассуждений в условиях неопределенности. Лекция связывает классические методы машинного обучения со сложными вероятностными моделями, объясняя, как эффективно описывать структуру мира и решать задачи вывода. На конкретных примерах — от систем сигнализации до современных авторегрессионных языковых моделей — демонстрируется переход от теории вероятностей к практическому программированию ИИ.
🔄 От реактивного ИИ к пониманию мира: Эволюция подходов 0:05
Развитие искусственного интеллекта строится на нескольких ключевых компонентах: восприятии окружения, рассуждении, действии и обучении. Исторически базовым этапом стало классическое машинное обучение, где обученные предикторы (линейные модели или глубокие нейросети) напрямую связывают воспринимаемые данные с действиями. В такой парадигме агент реагирует на среду реактивно, выдавая предсказание на основе текущих входных данных, но не производит глубокого планирования.
Для реализации более развитого интеллекта необходимы модели на основе состояний (state-based models), позволяющие агенту осуществлять планирование и «размышлять» перед принятием решений. В рамках курса CS221 были рассмотрены три такие архитектуры:
- Задачи поиска (search problems), где действия агента имеют детерминированные последствия, а целью является поиск пути с минимальной стоимостью.
- Марковские процессы принятия решений (MDP), описывающие среду со стохастическими исходами действий, где распределение вероятностей известно, а оптимизация стратегии происходит через итерацию ценности (value iteration).
- Игры (games), в которых правила мира известны, но присутствует противодействие со стороны оппонента с неизвестной стратегией, что требует консервативного подхода и применения алгоритма минимакса (minimax).
Все эти подходы разделяются на свободные от модели (model-free) и основанные на модели (model-based) методы. Методы класса model-free (такие как классификация, регрессия, алгоритмы SARSA, Q-learning и TD-learning) нацелены на прямое получение оптимального действия в зависимости от состояния среды. По оценке лектора, они вычислительно дешевле и проще в реализации, из-за чего преобладают в практических приложениях. В свою очередь, методы model-based требуют фундаментального понимания того, как устроен мир. Они позволяют симулировать последствия переходов из состояния в состояние. Главным преимуществом model-based подходов лектор называет их гибкость: например, при изменении функции вознаграждения на лету модель способна мгновенно пересчитать оптимальную стратегию, тогда как функция Q-value жестко компилирует в себе старые параметры наград и переходов.
Однако моделирование структуры мира — чрезвычайно сложная задача. Фундаментальный вопрос о том, как компактно представить состояние вселенной в условиях неопределенности, приводит к концепции байесовских сетей (Bayesian networks).
📊 Тензоры и законы вероятности: Новый взгляд через Einops 4:46
Перед детальным разбором байесовских сетей лектор предлагает нестандартный взгляд на базовые правила теории вероятностей через призму многомерных массивов. Состояние мира предлагается описывать набором случайных дискретных величин (random variables), отражающих его атрибуты. В качестве простейшей иллюстрации рассматриваются две бинарные переменные: $S$ (солнечная погода, где 1 — солнечно, 0 — пасмурно) и $R$ (дождь, где 1 — идет, 0 — нет).
Комбинация значений этих переменных формирует пространство возможных состояний (assignments). Каждому состоянию ставится в соответствие вероятность, образуя совместное распределение (joint distribution). В примере для Калифорнии лектор приводит следующие вероятности:
- Отсутствие солнца и дождя ($S=0, R=0$) составляет 0.2.
- Пасмурная погода с дождем ($S=0, R=1$) оценивается в 0.08.
- Солнечный день без осадков ($S=1, R=0$) имеет наибольшую вероятность — 0.7.
- Редкое феноменальное состояние одновременного солнца и дождя ($S=1, R=1$) составляет всего 0.02.
В программном коде такое распределение инкапсулируется в класс prob table, представляющий собой обертку над библиотекой NumPy. Двумерная матрица (или тензор) распределяет значения переменной $S$ по строкам, а $R$ — по столбцам. При увеличении числа переменных до четырех и более визуализировать многомерный тензор становится невозможно, поэтому данные разворачиваются в плоскую таблицу, где каждой уникальной комбинации присвоена своя вероятность.
Над совместным распределением, как над источником абсолютной истины о моделируемом мире, производятся две главные операции:
- Маргинализация (marginalization) — процесс исключения или игнорирования «лишних» переменных путем схлопывания и суммирования строк распределения, различающихся только в этих переменных. Например, чтобы вычислить чистую вероятность солнца $P(S=0)$, необходимо сложить $P(S=0, R=0)$ и $P(S=0, R=1)$, что дает 0.28.
- Условное оценивание (conditioning) — расчет вероятностей при фиксации известной улики или свидетельства (evidence), например, факта дождя ($R=1$). Операция состоит из фильтрации строк, удовлетворяющих условию, расчета суммарной вероятности этого свидетельства и последующего деления выбранных вероятностей на это число (ренормализация для приведения суммы к 1).
Поскольку вероятностные таблицы структурно являются тензорами, лектор демонстрирует, что все законы вероятностей элегантно выражаются через операции пакета inops и функцию einsum. Для маргинализации переменной $R$ пишется лаконичная строчка кода, где на вход подается тензор с осями S R, а на выходе указывается ось S, что автоматически заставляет систему просуммировать элементы по оси $R$. При условном оценивании сначала применяется селекционный тензор, зануляющий строки, не соответствующие улике, после чего через inops рассчитывается скалярная сумма свидетельства и производится поэлементное деление. Преподаватель подчеркивает, что данный математический аппарат применим ко всем дискретным переменным, тогда как работа с непрерывными величинами потребовала бы вычисления сложных интегралов и создавала бы риск деления на ноль при кондиционировании на события с нулевой плотностью вероятности.
🔍 Вероятностный вывод как SQL-запрос к базе данных 20:58
Переходя к понятию вероятностного вывода (probabilistic inference), лектор вводит усложненную модель мира, состоящую уже из четырех случайных величин: наличие солнца ($S$), дождя ($R$), дорожных пробок ($T$) и осени как текущего сезона ($A$). Совместное распределение в данном случае описывается как многомерная функция $P(S, R, T, A)$.
Сформулированная задача вероятностного вывода заключается в поиске ответов на конкретные вопросы к этой системе — например, какова вероятность дождя, если известно, что на дорогах зафиксированы пробки и на дворе осень. Лектор предлагает концептуальную аналогию: совместное распределение вероятностей ведет себя в точности как реляционная база данных SQL, содержащая в себе полный набор фактов о мире, а сам вероятностный вывод является аналогом выполнения SQL-запросов к этой базе.
Любой подобный структурированный запрос всегда состоит из трех типов переменных:
- Переменные свидетельства (evidence), значения которых нам точно известны из наблюдений (в примере — пробки $T=1$ и осень $A=1$). Они выделяют подмножество релевантных состояний.
- Переменные запроса (query), значение которых нас интересует (в примере — дождь $R$). В нотации теории вероятностей искомая величина записывается как $P(R \mid T=1, A=1)$.
- Скрытые или нерелевантные переменные (в примере — солнце $S$), которые вообще не упоминаются в запросе. Математически они автоматически подлежат маргинализации — их внутренние различия нивелируются путем суммирования.
Байесовские сети строятся поверх этих базовых вероятностных правил с единственной целью — сделать описание и расчет таких огромных совместных распределений значительно более простым и модульным.
🔔 Эффект «объяснения изнутри»: Парадокс независимости в сетях Байеса 23:44
Для демонстрации работы байесовских сетей на практике лектор разбирает задачу о землетрясениях, ограблениях и домашней сигнализации. По условию задачи, землетрясения ($E$) и ограбления дома ($B$) являются абсолютно независимыми друг от друга событиями. Каждое из них происходит с априорной вероятностью $\epsilon = 0.05$ (5%). В доме установлена охранная сигнализация ($A$), которая гарантированно срабатывает, если происходит либо землетрясение, либо ограбление.
Находясь в отъезде, владелец получает на телефон уведомление о том, что сигнализация сработала, но система не конкретизирует причину. Очевидно, что вероятность ограбления резко возрастает. Однако затем владелец включает службу новостей и узнает, что в районе его дома только что произошло землетрясение. Изменится ли теперь вероятность того, что дом был ограблен?
Лектор проводит опрос среди студентов, предлагая три варианта: вероятность ограбления пойдет вниз, пойдет вверх или останется прежней. С одной стороны, интуиция подсказывает, что угроза ограбления снижается. С другой стороны, возникает парадокс: ведь события изначально объявлены независимыми, почему же информация о землетрясении должна влиять на факт взлома? Построение байесовской сети позволяет разрешить это противоречие с математической точностью.
Процесс формального конструирования совместного распределения $P(B, E, A)$ состоит из четырех модульных шагов:
- Определение переменных. В систему вводятся три узла: $B$ (ограбление), $E$ (землетрясение), $A$ (сигнализация).
- Соединение узлов направленными ребрами. Стрелки проводятся от причин к следствиям — от $B$ к $A$ и от $E$ к $A$, поскольку состояние сигнализации напрямую зависит от этих факторов. Преподаватель делает оговорку, что направленные ребра отражают «прямое влияние», и призывает к осторожности с термином «причинно-следственная связь» (causality), так как байесовские сети автоматически ее не гарантируют, хотя для человеческой интуиции такая трактовка удобна.
- Задание локальных условных распределений (local conditional distributions) для каждого узла строго по отношению к его родителям. Для узлов без родителей прописываются простые априорные таблицы: $p(B=1) = 0.05, p(B=0) = 0.95$, аналогично для $E$. Для узла $A$ задается условная таблица $p(A \mid B, E)$, логика которой описывается детерминированной функцией «ИЛИ»: если значение $A$ совпадает с результатом логического выражения $B \lor E$, вероятность равна 1, иначе — 0.
- Вычисление итогового совместного распределения как произведения всех локальных распределений. Для любой комбинации переменных формула выглядит как $P(B, E, A) = p(B) \times p(E) \times p(A \mid B, E)$. В коде эта операция перемножения тензоров снова реализуется через одну функцию
einsum.
Расчет маргинальных и условных вероятностей из полученной «базы данных» (где вероятность полного покоя системы $P(0, 0, 0)$ составляет около 0.9) дает точные ответы на поставленные вопросы. Априорная вероятность ограбления составляет $P(B=1) = 0.05$. Если сработала только сигнализация, расчет условной вероятности $P(B=1 \mid A=1)$ через фильтрацию и нормирование показывает результат чуть более 51%.
Однако когда в систему добавляется второе свидетельство — факт землетрясения, мега-операция с селекционными тензорами по формуле $P(B=1 \mid A=1, E=1)$ возвращает значение обратно к исходным 0.05.
Этот феномен в теории байесовских сетей называется «объяснением изнутри» или «вытеснением причин» (explaining away). Его суть заключается в том, что две независимые причины (ограбление и землетрясение) при отсутствии информации о следствии ($A$) никак не влияют друг на друга. Но как только мы фиксируем общее следствие, они становятся зависимыми. Факт землетрясения полностью берет на себя «ответственность» за прозвучавшую сигнализацию, снимая подозрение с ограбления и снижая его вероятность. Математически это выражается строгим неравенством:
$$P(B \mid A, E) < P(B \mid A)$$
Лектор подчеркивает, что до создания строгого математического аппарата байесовских сетей исследователи использовали разрозненные эвристики для рассуждений в условиях неопределенности, которые часто были противоречивыми и ломались на практике.
🩺 Диагностика заболеваний: Распространение улик в сложных сетях 47:32
Для закрепления материала лектор представляет медицинский пример с четырьмя узлами, предваряя его шутливым дисклеймером о том, что он не является экспертом в медицине и данные не стоит воспринимать как реальное руководство к лечению.
Задача моделирует диагностику пациента со следующими бинарными переменными:
- Наличие простуды ($C$, априорная вероятность 10% или 0.1).
- Наличие аллергии ($A$, априорная вероятность 20% или 0.2).
- Симптом кашля ($H$).
- Симптом зуда в глазах ($I$).
На этапе построения топологии графа фиксируется, что простуда и аллергия независимы. Кашель ($H$) может быть вызван как простудой, так и аллергией, поэтому в него ведут стрелки от обоих узлов. Зуд в глазах ($I$) развивается исключительно из-за аллергии, что задает ребро от $A$ к $I$.
В отличие от предыдущего примера с жесткой логикой «ИЛИ», здесь локальные условные распределения делаются более «сглаженными» (soft), чтобы отразить реальную неопределенность. Например, функция для кашля $p(H \mid C, A)$ определяет, что если состояние кашля соответствует наличию хотя бы одной из болезней, вероятность этого исхода равна 0.9, а противоположного — 0.1 (то есть даже при простуде человек кашляет не в 100% случаев). Локальное распределение зуда в глазах $p(I \mid A)$ аналогично дает 0.9 при согласии переменных и 0.1 при расхождении. Перемножение четырех тензоров формирует итоговое совместное распределение, где наиболее вероятным состоянием является полное здоровье пациента (вероятность около 0.6).
Вероятностный вывод в этой сети снова наглядно демонстрирует эффект «объяснения изнутри». Расчет условной вероятности наличия простуды при зафиксированном кашле дает $P(C=1 \mid H=1) = 0.28$. Если же к кашлю добавляется новый симптом — зуд в глазах ($I=1$), то точный расчет показывает, что вероятность простуды падает почти вдвое, составляя $P(C=1 \mid H=1, I=1) = 0.13$. Лектор объясняет логику: появление зуда в глазах резко увеличивает вероятность аллергии. А поскольку аллергия способна самостоятельно вызывать кашель, она «объясняет» его наличие, снижая подозрения в отношении простуды.
На основе этих примеров лектор формулирует обобщенные правила для байесовских сетей произвольного масштаба:
- Сеть строится на базе направленного ациклического графа (DAG) над переменными $X_1, \dots, X_n$, где строго запрещены циклы.
- Для каждого узла $X_i$ задается ровно одно локальное условное распределение $p(X_i \mid \text{Parents}(X_i))$, зависящее от всех его родителей одновременно. Нельзя путать локальные распределения (заданные по определению, обозначаются строчной $p$) и маргинальные/условные распределения (математически выводимые из совместного, обозначаются прописной $P$).
- В литературе существует шутливое правило о том, что «родители узла должны быть женаты», подчеркивающее необходимость их совместного учета в одной таблице.
В масштабных сетях (например, из 100 переменных при фиксации 17 улик) процесс вывода превращается в сложнейшее распространение сигналов (propagating evidence) между узлами. В общем виде задача точного вычисления таких величин является NP-трудной, что обуславливает необходимость поиска приближенных алгоритмов.
🤖 Сети Байеса в современности: От языковых моделей до джейлбрейка 1:00:43
Чтобы связать классическую теорию с современными технологиями, лектор предлагает посмотреть на авторегрессионные языковые модели через призму байесовских сетей. Если «надеть шляпу» специалиста по вероятностным графам, то любая большая языковая модель (LLM) представляет собой чистокровную байесовскую сеть.
В этой интерпретации компоненты модели раскладываются следующим образом:
- Случайными переменными выступают генерируемые последовательно токены $X_1, X_2, \dots, X_T$.
- Направленные ребра связывают абсолютно все предыдущие токены с каждым последующим (каждый узел $X_t$ имеет в качестве родителей все элементы от $X_1$ до $X_{t-1}$).
- Локальное условное распределение вероятностей для очередного токена $p(X_t \mid X_1, \dots, X_{t-1})$ вычисляется нейросетью-трансформером (Transformer).
- Совместное распределение всей текстовой последовательности является строгим произведением этих локальных вероятностей.
Стандартная работа с языковой моделью заключается в прямом сэмплировании (forward sampling), когда на основе промпта генерируются последующие токены один за другим. Однако математический аппарат байесовских сетей позволяет выполнять инвертированный вероятностный вывод — рассуждать о любых подмножествах переменных в любом направлении.
Интересным и опасным примером применения обратного вывода лектор называет задачу «джейлбрейка» (jailbreaking) нейросетей. Вместо обычной генерации текста исследователь фиксирует желаемый (запрещенный) ответ модели в качестве известного свидетельства (evidence) — например, фразу: «Конечно, вот инструкция по созданию бомбы». Задача вероятностного вывода в данном контексте сводится к тому, чтобы пойти по графу в обратном направлении и вычислить распределение вероятностей на промптах, которые способны гарантированно породить данный деструктивный ответ.
Поскольку языковые модели оптимизированы исключительно под движение вперед, обратный вывод на практике оказывается экстремально сложной вычислительной задачей с экспоненциальной трудоемкостью. Тем не менее, как отмечает преподаватель, существуют современные научные работы, предлагающие ускорять этот процесс с помощью методов вариационного вывода (variational inference).
💻 Вероятностное программирование и сэмплирование с отклонением 1:04:11
В финальной части лекции рассматривается концепция вероятностного программирования (probabilistic programming) — междисциплинарного направления, изучающего синергию между кодом программ и распределениями вероятностей. Вместо утомительного ручного прописывания громоздких многомерных таблиц байесовскую сеть можно лаконично задать в виде обычной функции, генерирующей случайные образцы.
Программа для базовой модели сигнализации занимает всего три строчки кода. Переменные $B$ (ограбление) и $E$ (землетрясение) инициализируются через вызовы функции распределения Бернулли со значением 0.05 (Bernoulli(0.05)), которая возвращает 1 или 0 с заданной вероятностью на базе встроенного генератора случайных чисел. Переменная сигнализации $A$ объявляется через стандартную логическую операцию B or E, после чего функция возвращает полный вектор состояний.
Такая прозрачная программная реализация открывает путь к приближенному вероятностному выводу с помощью метода сэмплирования с отклонением (rejection sampling). Алгоритм выглядит изящно и состоит из трех шагов:
- Генерация огромного количества случайных выборок (семплов) из совместного распределения путем многократного запуска вероятностной программы.
- Фильтрация полученных результатов: программа оставляет только те семплы, которые в точности соответствуют зафиксированной улике (условию evidence). Для этого свидетельство оформляется в виде тестирующей функции, возвращающей
TrueилиFalse. - Подсчет частоты встречаемости интересующих нас значений переменной запроса (query) среди оставшихся «выживших» семплов и построение нормированной гистограммы.
В коде этот процесс занимает около пяти строк. Запуск алгоритма на 1000 итераций для поиска вероятности ограбления при сработавшей сигнализации выдает оценку в районе 0.56, что близко к истинному математическому значению 0.51. Главным недостатком сэмплирования с отклонением лектор называет его катастрофическую неэффективность в ситуациях, когда целевая улика является редким событием. Если априорная вероятность свидетельства составляет, например, 0.001, то алгоритм будет тратить 99.9% процессорного времени на генерацию пустых семплов, которые тут же будут отброшены стадией фильтрации.
Тем не менее, метод обладает строгой математической гарантией: при устремлении числа семплов к бесконечности приближенное распределение гарантированно сходится к истинному значению. Этот же подход демонстрируется на примере скрытых марковских моделей (Hidden Markov Models, HMM), применяемых для трекинга объектов. Объект последовательно меняет скрытые координаты $H_t$ с вероятностью 0.5 остаться на месте или сдвинуться, а датчики выдают зашумленные показания $E_t$. Запуск генератора семплов позволяет легко определить наиболее вероятную траекторию объекта по его датчикам без вычисления сложных формул.
Резюмируя лекцию, преподаватель отмечает, что внедрение байесовских сетей требует радикального сдвига парадигмы по сравнению с привычным дискриминативным машинным обучением. Вместо жесткого обучения классификатора, отображающего входы в выходы, байесовские сети моделируют сам процесс генерации данных изнутри. Это дает весомые преимущества:
- Автоматическая и корректная обработка пропущенных данных в медицинских картах или анкетах.
- Возможность легкой интеграции экспертных априорных знаний напрямую в архитектуру без необходимости их долгого обучения.
- Полная интерпретируемость всех промежуточных скрытых переменных, что выгодно отличает подход от непрозрачных нейросетевых систем класса end-to-end.
Поскольку базовый алгоритм сэмплирования слишком медленный, следующая лекция курса будет полностью посвящена оптимизации вывода и альтернативным эффективным подходам.