EssayAI
Блог
Блог
Математика и алгоритмы

Алгоритм Метрополиса-Гастингса: как работает MCMC

23 марта 2026Время чтения: 8 минут
#алгоритм Метрополиса-Гастингса#MCMC#цепь Маркова#байесовская статистика#выборка
Алгоритм Метрополиса-Гастингса: как работает MCMC

Алгоритм Метрополиса-Гастингса - базовый и до сих пор самый часто упоминаемый метод MCMC (Markov chain Monte Carlo). Его придумали Николас Метрополис с соавторами в 1953 году для расчётов в статистической физике, а в 1970 году Уилфред Кит Гастингс обобщил схему до несимметричных пропозиций - отсюда двойное название. Идея простая: построить цепь Маркова, чьё стационарное распределение совпадает с целевым π(x)\pi(x), и собирать из неё реализации. Это нужно, когда плотность π(x)f(x)\pi(x) \propto f(x) известна только с точностью до нормировочной константы - то есть мы умеем считать f(x)f(x), но не интеграл f\int f.

Зачем сэмплировать из π(x)f(x)\pi(x) \propto f(x)

Типовая постановка приходит из байесовской статистики. Апостериорная плотность параметра θ\theta при наблюдаемых данных DD записывается через формулу Байеса:

π(θD)=L(Dθ)π0(θ)L(Dθ)π0(θ)dθ.\pi(\theta \mid D) = \frac{L(D \mid \theta)\,\pi_0(\theta)}{\int L(D \mid \theta)\,\pi_0(\theta)\,d\theta}.

Числитель f(θ)=L(Dθ)π0(θ)f(\theta) = L(D\mid\theta)\,\pi_0(\theta) считается явно - это произведение правдоподобия и априорного распределения. А знаменатель - интеграл по всему пространству параметров - может быть многомерным и аналитически не браться. Прямое сэмплирование (inverse-CDF, rejection sampling) либо требует нормировки, либо плохо масштабируется по размерности. MCMC обходит проблему: строит цепь, чьё инвариантное распределение и есть π\pi, не вычисляя нормировку.

Если ты уже определился с конкретной целью и хочешь подобрать шаг и пропозицию - заполни поля ниже, и мы соберём acceptance ratio, подскажем sigma и проверим autocorrelation.

Общая схема: пропозиция и шаг принятия

Пусть текущее состояние цепи - xx. На каждом шаге:

  1. Сгенерировать кандидата xq(xx)x' \sim q(x' \mid x) из произвольного пропозиционного распределения qq, из которого мы умеем сэмплировать.
  2. Посчитать acceptance ratio
α(x,x)=min ⁣(1,  π(x)q(xx)π(x)q(xx)).\alpha(x, x') = \min\!\left(1,\; \frac{\pi(x')\,q(x \mid x')}{\pi(x)\,q(x' \mid x)}\right).
  1. Бросить uUniform(0,1)u \sim \mathrm{Uniform}(0, 1) и принять кандидата (xn+1=xx_{n+1} = x'), если uαu \le \alpha. Иначе остаться: xn+1=xx_{n+1} = x.

Важный момент: π\pi входит в α\alpha только отношением π(x)/π(x)\pi(x')/\pi(x). Если πf\pi \propto f, то нормировочная константа сокращается - поэтому достаточно считать ff. Это ключ ко всему MCMC: мы никогда не интегрируем плотность, мы только сравниваем её значения в двух точках.

Стационарность через detailed balance

Цепь имеет инвариантным распределение π\pi, если выполнено условие детального баланса (detailed balance):

π(x)P(xx)=π(x)P(xx)для всех x,x,\pi(x)\, P(x \to x') = \pi(x')\, P(x' \to x)\quad \text{для всех } x, x',

где P(xx)=q(xx)α(x,x)P(x \to x') = q(x' \mid x)\,\alpha(x, x') - вероятность перехода. Проверим. Без ограничения общности пусть π(x)q(xx)π(x)q(xx)\pi(x')\,q(x\mid x') \le \pi(x)\,q(x'\mid x) - тогда α(x,x)=π(x)q(xx)π(x)q(xx)\alpha(x, x') = \frac{\pi(x')\,q(x\mid x')}{\pi(x)\,q(x'\mid x)} и α(x,x)=1\alpha(x', x) = 1. Подставляем:

π(x)q(xx)α(x,x)=π(x)q(xx)=π(x)q(xx)α(x,x).\pi(x)\,q(x'\mid x)\,\alpha(x,x') = \pi(x')\,q(x\mid x') = \pi(x')\,q(x\mid x')\,\alpha(x',x).

Условие detailed balance выполнено, значит π\pi - инвариантная мера цепи. При неприводимости и апериодичности (для q>0q > 0 это почти всегда так) цепь эргодична и распределение xnx_n при nn \to \infty стремится к π\pi.

Частный случай: алгоритм Метрополиса

Если пропозиция симметрична - q(xx)=q(xx)q(x' \mid x) = q(x \mid x'), как у нормального шага x=x+εx' = x + \varepsilon, εN(0,σ2)\varepsilon \sim N(0, \sigma^2) - отношение пропозиций сокращается, и формула упрощается до

α(x,x)=min ⁣(1,  π(x)π(x)).\alpha(x, x') = \min\!\left(1,\; \frac{\pi(x')}{\pi(x)}\right).

Это исходный алгоритм Метрополиса 1953 года. Логика интуитивная: если кандидат в более «плотной» области, принимаем всегда; если в менее плотной, принимаем с вероятностью отношения плотностей. Гастингс снял требование симметрии: добавил поправочный множитель q(xx)/q(xx)q(x\mid x')/q(x'\mid x), и стало можно использовать любые пропозиции, в том числе direction-biased (Langevin, independence sampler).

Типовые пропозиции

Random Walk Gaussian (нормальное блуждание). q(xx)=N(x;x,σ2I)q(x'\mid x) = N(x'; x, \sigma^2 I). Симметрично, простейший выбор. Подбор σ\sigma критичен: слишком маленький - цепь почти всё принимает, но медленно гуляет (высокий autocorrelation); слишком большой - почти всё отвергает и стоит на месте. Оптимальный target acceptance rate для dd-мерного гауссовского таргета - 0.234\approx 0.234 (Roberts, Gelman, Gilks 1997), на d=1d = 1 ближе к 0.440.44.

Langevin (MALA - Metropolis-adjusted Langevin algorithm). Пропозиция x=x+σ22logπ(x)+σεx' = x + \tfrac{\sigma^2}{2}\nabla \log \pi(x) + \sigma \varepsilon использует градиент log-плотности и сдвигает кандидата в сторону мод. Поправка Метрополиса-Гастингса нужна, потому что дискретизация SDE Ланжевена смещена. Оптимальный target acceptance rate - 0.5740.574.

Hamiltonian Monte Carlo (HMC). Вводится вспомогательный импульс pN(0,M)p \sim N(0, M), и цепь движется по гамильтоновой траектории H=logπ(x)+12pTM1pH = -\log\pi(x) + \tfrac12 p^T M^{-1} p интегратором Верле. Шаг принятия компенсирует ошибку интегратора. На гладких многомерных плотностях HMC даёт ESS на одну итерацию на порядки выше, чем Random Walk, и стандартно используется в Stan, PyMC, NumPyro. Target acceptance - 0.650.650.800.80.

Burn-in и проверки сходимости

Цепь стартует из произвольной точки, и первые сотни-тысячи итераций система ещё не «забыла» начальное состояние - это burn-in (или warm-up), и его выкидывают. Длина зависит от шага и от того, насколько x0x_0 далеко от типичных значений π\pi. Эмпирически: 10–50% выборки.

Главные численные диагностики сходимости и качества:

  • R^\hat{R} Гельмана-Рубина. Запускают mm независимых цепей, сравнивают внутрицепную дисперсию WW с межцепной BB и считают R^=(W+B/n)/W\hat{R} = \sqrt{(W + B/n)/W}. Хорошее значение - R^<1.01\hat{R} < 1.01. Если R^\hat{R} заметно больше единицы, цепи ещё не пришли к общему распределению.
  • Autocorrelation ρk\rho_k. Чем медленнее ρk\rho_k убывает с лагом kk, тем сильнее зависимы соседние реализации. Интегральное время автокорреляции τ=1+2k1ρk\tau = 1 + 2\sum_{k\ge 1}\rho_k показывает, сколько шагов между «эффективно независимыми» сэмплами.
  • Effective sample size. ESS=N/τ\mathrm{ESS} = N/\tau - число «эффективных» независимых наблюдений из NN собранных. Если ESS\mathrm{ESS} мал по сравнению с NN, цепь либо плохо настроена, либо смешивается медленно из-за самой геометрии π\pi (мультимодальность, узкие хребты).

Где применяется

  • Байесовская статистика. Любая нетривиальная апостериорная плотность π(θD)\pi(\theta\mid D), где интеграл нормировки не берётся. Иерархические модели, GLM, спецификации с непрерывно-дискретными смесями.
  • Статистическая физика. Исходная задача 1953 года - расчёт термодинамических средних в модели Изинга по распределению Больцмана π(s)eβH(s)\pi(s) \propto e^{-\beta H(s)}, отсюда же выросло и название.
  • Машинное обучение. Выборка из энергетических моделей (Restricted Boltzmann Machines), регуляризация генеративных моделей, посэмплинг весов в Bayesian Neural Networks.
  • Метрическая теория, теория чисел, биоинформатика. Везде, где нужно усреднить функцию по сложному распределению с явным f(x)f(x).

Типовые задачи

  1. Сгенерировать 10410^4 реализаций из π(x)ex4/4\pi(x) \propto e^{-x^4/4}, оценить E[X2]E[X^2] - целевая плотность из физики, нормировка не выражается в элементарных функциях. Подходит Random Walk с σ1.5\sigma \approx 1.5.
  2. Сэмплировать апостериор π(θD)\pi(\theta\mid D) для логистической регрессии с нормальным prior. MALA с σ=0.05\sigma = 0.05 при d=20d = 20 обычно даёт ESS 0.3N\ge 0.3 N.
  3. Симулировать конфигурации модели Изинга при β=0.4\beta = 0.4 на решётке 32×3232\times 32 - Метрополис с одиночными flip-ами, acceptance 0.3\approx 0.3.

Частые ошибки

  • Забывают, что π\pi нужна только с точностью до константы. Пытаются нормировать π\pi численно - ломают саму причину, по которой MCMC нужен.
  • Не выбрасывают burn-in. Включают начальные итерации в оценки - смещение математического ожидания и недооценка дисперсии.
  • Считают независимыми соседние реализации цепи. ρk\rho_k не нулевой - стандартная ошибка σ/N\sigma/\sqrt{N} занижает реальную неопределённость; вместо NN нужно ESS\mathrm{ESS}.
  • Подгоняют σ\sigma под максимум acceptance rate. Acceptance >0.9> 0.9 - это плохо: цепь почти не двигается. Целиться надо в 0.2340.234 для Random Walk, 0.5740.574 для MALA, 0.650.650.80.8 для HMC.
  • Запускают одну цепь и доверяют ей. Без R^\hat{R} по нескольким независимым стартам нельзя обнаружить, что цепь застряла в одной моде мультимодального распределения.

FAQ

Чем отличается Метрополис от Метрополиса-Гастингса? Метрополис требует симметричной пропозиции q(xx)=q(xx)q(x'\mid x) = q(x\mid x'), и тогда α=min(1,π(x)/π(x))\alpha = \min(1, \pi(x')/\pi(x)). Гастингс добавил поправочный множитель q(xx)/q(xx)q(x\mid x')/q(x'\mid x) и снял ограничение симметрии. На практике под общим именем «Метрополиса-Гастингса» понимают полную версию.

Зачем acceptance ratio именно min(1,)\min(1, \cdot), а не \cdot напрямую? Чтобы вероятность принятия не превышала единицы. Условие detailed balance выполняется и для не-усечённого отношения, но как вероятность принятия отношение >1> 1 интерпретировать нельзя - берут отсечение.

Можно ли использовать MCMC, если плотность π\pi имеет мультимодальную форму? Можно, но Random Walk будет надолго застревать в одной моде. Помогают tempering-схемы (parallel tempering, simulated annealing), HMC с длинными траекториями или специальные jumps - иначе ESS из моды в моду оказывается катастрофически мал.

Коротко

Алгоритм Метрополиса-Гастингса - это рецепт построения цепи Маркова, чьё стационарное распределение совпадает с заданным π\pi. На каждом шаге генерируется кандидат из пропозиции qq, считается acceptance ratio α=min(1,π(x)q(xx)/π(x)q(xx))\alpha = \min(1, \pi(x')q(x\mid x')/\pi(x)q(x'\mid x)) и принимается решение принять или отвергнуть. Detailed balance обеспечивает инвариантность π\pi. Метрополис - частный случай с симметричной qq. Качество выборки контролируют autocorrelation, ESS и R^\hat{R} Гельмана-Рубина. Алгоритм стоит в основе байесовской статистики и MCMC-инструментов вроде Stan и PyMC.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также