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

Когда плотность известна только с точностью до множителя

В байесовской задаче апостериорная плотность параметра θ\theta имеет вид

p(θD)=p(Dθ)p(θ)p(Du)p(u)du.p(\theta\mid D)= \frac{p(D\mid\theta)\,p(\theta)} {\int p(D\mid u)\,p(u)\,du}.

Числитель вычислить обычно можно: это правдоподобие, умноженное на prior, — всё то, что мы уже собирали в уроке 47. А вот многомерный интеграл в знаменателе не берётся ни аналитически, ни численно: сетка из десяти узлов по каждой из двадцати координат — это 102010^{20} точек, больше, чем секунд с начала Вселенной. Обозначим ненормированную плотность

π~(θ)=p(Dθ)p(θ),π(θ)=π~(θ)Z,Z=π~(u)du.\widetilde\pi(\theta)=p(D\mid\theta)\,p(\theta), \qquad \pi(\theta)=\frac{\widetilde\pi(\theta)}{Z}, \qquad Z=\int\widetilde\pi(u)\,du .

Для ожидания I=Eπf(θ)I=\mathbb E_\pi f(\theta) нужны выборки из π\pi, но стандартный генератор случайных чисел требует нормированного распределения. MCMC обходит круг: строит цепь Маркова, стационарное распределение которой совпадает с π\pi, и оценивает

I^N=1Nt=1Nf(θt).\widehat I_N=\frac1N\sum_{t=1}^{N} f(\theta_t).

Выборки θt\theta_t зависимы — и это не мелкая техническая деталь, а главная статья расходов всего метода. Базовые свойства стационарности и переходов были введены в цепях Маркова; теперь они становятся вычислительным инструментом.

Баланс потоков

Пусть K(x,dy)K(x,dy) — переходное правило цепи. Достаточное условие стационарности называется детальным балансом (обратимостью):

π(x)K(x,dy)=π(y)K(y,dx).\pi(x)\,K(x,dy)=\pi(y)\,K(y,dx).

Оно говорит, что в равновесии поток вероятности из xx в yy в точности компенсируется обратным потоком. Проинтегрируем по всем xx:

π(dx)K(x,dy)=π(dy)K(y,dx)=π(dy),\int\pi(dx)K(x,dy)=\pi(dy)\int K(y,dx)=\pi(dy),

потому что полная вероятность перейти хоть куда-нибудь равна единице. Значит, один такт цепи сохраняет целевое распределение: если θtπ\theta_t\sim\pi, то и θt+1π\theta_{t+1}\sim\pi.

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

Алгоритм Метрополиса–Хастингса

Находясь в xx, предложим новую точку yq(yx)y\sim q(y\mid x) и примем её с вероятностью

a(x,y)=min(1,  π~(y)q(xy)π~(x)q(yx)).a(x,y)=\min\left( 1,\; \frac{\widetilde\pi(y)\,q(x\mid y)} {\widetilde\pi(x)\,q(y\mid x)} \right).

Если предложение отклонено, следующее состояние снова равно xx. Для симметричного предложения q(yx)=q(xy)q(y\mid x)=q(x\mid y) остаётся исходная формула Метрополиса:

a(x,y)=min(1,π~(y)π~(x)).a(x,y)=\min\left(1,\frac{\widetilde\pi(y)}{\widetilde\pi(x)}\right).

В программе всё считают в логарифмах: предложение принимается, если

logu<logπ~(y)logπ~(x),uU(0,1),\log u<\log\widetilde\pi(y)-\log\widetilde\pi(x), \qquad u\sim\mathrm{U}(0,1),

и это единственная строка, где встречается случайность помимо самого предложения.

Движение в область большей плотности принимается всегда, а вниз по плотности — иногда. Эти редкие спуски и позволяют цепи выбираться из локального пика. Формула похожа на критерий в имитации отжига, но цель другая: отжиг ищет единственный максимум и постепенно замораживает температуру, а MCMC обязан сохранить всё распределение целиком.

Это одна фраза, и в ней весь метод. Прямое взвешивание безнадёжно: почти все взятые наугад конфигурации имеют ничтожный вес, и миллион точек несёт информации как одна. Перенос трудности из веса в способ выбора и есть изобретение 1953 года.

Хастингс сделал шаг, ради которого метод и попал в статистику: снял требование симметрии предложения. Множитель q(xy)/q(yx)q(x\mid y)/q(y\mid x) компенсирует несимметричность, и предложение можно проектировать свободно — хоть тянуть его в сторону области высокой плотности.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три панели: сверху двухвершинная ненормированная плотность, в середине трасса первых 400 состояний цепи с редкими переходами между модами, снизу гистограмма цепи в сравнении с нормированной плотностью
Рис. 67.1. Цель, прогулка и гистограмма: 100 000 состояний стоят 534 независимых

Цель — смесь 0,6N(2,5;0,49)+0,4N(2,5;0,49)0{,}6\,\mathcal N(-2{,}5;\,0{,}49)+0{,}4\,\mathcal N(2{,}5;\,0{,}49); точная масса слева равна 0,6000{,}600. Цепь с σ=1,2\sigma=1{,}2 приняла 56,0%56{,}0\% предложений и за 100 000 тактов после прогрева перешла между модами 469 раз — один переход на 213 тактов. Гистограмма похожа на цель, но доля x<0x<0 оказалась 0,5800{,}580: промах 0,0200{,}020 там, где наивный расчёт по числу тактов, 0,60,4/1000000,0015\sqrt{0{,}6\cdot0{,}4/100\,000}\approx0{,}0015, обещал больше чем в десять раз меньше. Причина честно измерена: τint=187\tau_{\mathrm{int}}=187 и Neff=534N_{\mathrm{eff}}=534.

Отказ — это тоже такт

Повторы обязательны. Если записывать в цепь только принятые предложения, стационарное распределение изменится: области, из которых трудно уйти и в которые трудно попасть, будут представлены неверно.

Масштаб предложения и цена корреляции

Рассмотрим random-walk Metropolis:

y=x+σε,εN(0,I).y=x+\sigma\varepsilon,\qquad \varepsilon\sim\mathcal N(0,I).

При слишком малом σ\sigma почти всё принимается, но цепь ползёт микроскопическими шагами и остаётся рядом с собой. При слишком большом σ\sigma предложения падают в области ничтожной плотности и отклоняются; цепь снова почти стоит, только теперь неподвижность выглядит как длинные плато. Между крайностями есть рабочий масштаб.

Измеряется всё это автокорреляцией функции f(θt)f(\theta_t) на лаге kk:

ρk=Corr(f(θt),f(θt+k)),\rho_k=\operatorname{Corr}\bigl(f(\theta_t),f(\theta_{t+k})\bigr),

интегрированным временем автокорреляции

τint=1+2k1ρk\tau_{\mathrm{int}}=1+2\sum_{k\ge1}\rho_k

и эффективным размером выборки

NeffNτint.N_{\mathrm{eff}}\approx\frac{N}{\tau_{\mathrm{int}}}.

Смысл τint\tau_{\mathrm{int}} прямой: дисперсия среднего по зависимой цепи равна

Var(fˉ)τintVar(f)N=Var(f)Neff,\operatorname{Var}(\bar f)\approx \frac{\tau_{\mathrm{int}}\operatorname{Var}(f)}{N} =\frac{\operatorname{Var}(f)}{N_{\mathrm{eff}}},

то есть цепь длины NN стоит ровно N/τintN/\tau_{\mathrm{int}} независимых наблюдений. Сравнивать методы по длине выходного файла бессмысленно.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Шесть панелей: трассы и автокорреляции цепей с сигма 0,05, 2,4 и 25 на стандартной нормальной цели
Рис. 67.2. Три масштаба предложения: 98,6% принятия дают в 200 раз меньше информации, чем 44,6%

Цель N(0,1)\mathcal N(0,1), 50 000 состояний после прогрева в каждой колонке. При σ=0,05\sigma=0{,}05 принимается 98,6%98{,}6\% предложений, но τint=892\tau_{\mathrm{int}}=892 и Neff=56N_{\mathrm{eff}}=56. При σ=2,4\sigma=2{,}4 принимается 44,6%44{,}6\%, τint=4,4\tau_{\mathrm{int}}=4{,}4, Neff=11457N_{\mathrm{eff}}=11\,457 — в 204 раза больше информации при том же числе вычислений. При σ=25\sigma=25 принимается лишь 5,2%5{,}2\%, цепь стоит длинными плато, Neff=1651N_{\mathrm{eff}}=1651. Доля принятия сама по себе ничего не значит: худший вариант имел лучшую долю.

Лаборатория цепи

Предложение, доля принятия и перемешивание

Загружается живая иллюстрация…

Начните с двух мод и σ=1,2\sigma=1{,}2: посмотрите, как быстро растёт число тактов и как медленно — число переходов между модами. Затем поставьте σ=0,05\sigma=0{,}05 и убедитесь, что доля принятия почти 100%100\%, а NeffN_{\mathrm{eff}} остаётся двузначным. Затем σ=8\sigma=8: принимается мало, трасса складывается из ступенек. Наконец, переключите цель на «узкая + широкая» — настройка, удобная для широкого холма, проскакивает узкий, а настройка для узкого еле ползёт по широкому. Одной универсальной длины шага не существует.

Отдельно поставьте старт x=8x=8 при маленьком σ\sigma: первые сотни тактов цепь просто идёт к области высокой плотности, и включать их в среднее нельзя.

Прогрев, несколько цепей и диагностика

Начальный участок, пока цепь забывает старт, называют warm-up или burn-in. Правило «отбросить первые десять процентов» — не теорема, а привычка. Надёжнее запускать несколько цепей из разнесённых точек и сравнивать их между собой.

Диагностика R^\widehat R сопоставляет разброс между цепями и внутри них. Если BB — межцепная дисперсия средних, WW — средняя внутрицепная дисперсия, а nn — длина половины цепи, то

Var^=n1nW+Bn,R^=Var^W.\widehat{\operatorname{Var}}=\frac{n-1}{n}W+\frac{B}{n}, \qquad \widehat R=\sqrt{\frac{\widehat{\operatorname{Var}}}{W}} .

Эффективный размер выборки при нескольких цепях складывается: если запущено MM цепей длины NN с общим τint\tau_{\mathrm{int}}, то

Neffвсего=MNτint,N_{\mathrm{eff}}^{\text{всего}}=\frac{MN}{\tau_{\mathrm{int}}},

и четыре цепи по 25 000 тактов дают ровно столько же информации, сколько одна длиной 100 000, — зато позволяют вычислить R^\widehat R.

Значение около единицы — необходимый, но не достаточный признак. Цепи могут дружно застрять в одной моде и показать R^1,00\widehat R\approx1{,}00, честно согласившись друг с другом в общем заблуждении.

Thinning — сохранение каждого kk-го состояния — обычно не создаёт информацию. Оно уменьшает файл, но выбрасывает уже вычисленные точки. Для оценки среднего выгоднее учитывать все состояния и корректно оценивать τint\tau_{\mathrm{int}}.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева четыре трассы, две держатся около минус шести, две около плюс шести, ни одна не переходит; справа объединённая гистограмма с двумя одинаковыми пиками и долей 0,500
Рис. 67.3. Ноль переходов, идеальная гистограмма, split-R = 8,05

Цель — две далеко разнесённые моды равной массы (±6\pm6, ширина 0,80{,}8). Четыре цепи по 30 000 тактов после прогрева, две стартовали слева, две справа. Переходов между модами — ноль. Объединённая доля x<0x<0 равна ровно 0,5000{,}500, то есть «правильна», но лишь потому, что мы сами поставили поровну стартов. Split-R^=8,05\widehat R=8{,}05 немедленно выдаёт обман, а гистограмма — нет.

Проверка на задаче с известным ответом

Перед сложным posterior полезно устроить калибровочный стенд: взять реальные данные, но такую модель, где ответ известен точно. Возьмём SMS Spam Collection: 5574 сообщения, из них 747 помечены как спам. Модель — та же, что в уроке 47: доля спама pp с prior Beta(1,1)\mathrm{Beta}(1,1) и биномиальным правдоподобием. Тогда posterior известен в замкнутой форме:

pDBeta(1+747,  1+4827),E[pD]=7485576=0,13415.p\mid D\sim\mathrm{Beta}(1+747,\;1+4827), \qquad \mathbb E[p\mid D]=\frac{748}{5576}=0{,}13415 .

Теперь сделаем вид, что формулы мы не знаем, и запустим random-walk Metropolis по pp с σ=0,02\sigma=0{,}02: 120 000 тактов, первые 20 000 в прогрев. Цепь приняла 27,2%27{,}2\% предложений, дала среднее 0,134100{,}13410, τint=5,8\tau_{\mathrm{int}}=5{,}8 и Neff=8645N_{\mathrm{eff}}=8645.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева гистограмма цепи совпадает с кривой точного бета-распределения, справа бегущее среднее выходит на горизонталь точного значения по логарифмической оси
Рис. 67.4. Реальный спам: цепь против точного ответа, промах 0,000045 при MCSE 0,000048

Реальные данные SMS Spam Collection (n=5574n=5574, спама 747). Слева: гистограмма цепи и точная плотность Beta(748,4828)\mathrm{Beta}(748,4828) — совпадают. Справа: бегущее среднее по логарифмической оси; после нескольких тысяч тактов оно оседает на точном значении 0,134150{,}13415. Промах составил 0,0000450{,}000045 при собственной оценке погрешности MCSE=0,000048\mathrm{MCSE}=0{,}000048 — метод не только попал, но и правильно предсказал свою точность. Байесовский интервал цепи [0,1254;0,1431][0{,}1254;\,0{,}1431] совпадает с точным [0,1252;0,1431][0{,}1252;\,0{,}1431] до третьего знака.

Совпадение с известным ответом — не украшение, а обязательный этап. Программа, которая ошибается в знаке приращения логарифма или забывает записывать повторы, на такой задаче ловится за минуту, а на реальном posterior может годами выдавать правдоподобную чепуху.

Геометрия posterior: реальные данные

Возьмём набор Breast Cancer Wisconsin из sklearn: 569 наблюдений, из них 212 злокачественных. Оставим два признака — mean radius и mean perimeter — и заметим главное: у почти круглого пятна периметр пропорционален радиусу, поэтому корреляция признаков равна 0,9980{,}998. Модель:

Pr(yi=1xi,β)=σ(β0+xiβ),βjN(0,22),\Pr(y_i=1\mid x_i,\beta)=\sigma(\beta_0+x_i^\top\beta), \qquad \beta_j\sim\mathcal N(0,2^2),

а ненормированный логарифм posterior равен

logπ~(β)=i[yizilog(1+ezi)]β224,zi=β0+xiβ.\log\widetilde\pi(\beta) =\sum_i\Bigl[y_i z_i-\log\bigl(1+e^{z_i}\bigr)\Bigr] -\frac{\|\beta\|^2}{2\cdot4}, \qquad z_i=\beta_0+x_i^\top\beta .

Почти дублирующие признаки делают posterior вытянутым: корреляция коэффициентов равна 0,963-0{,}963, отношение осей эллипса 11,911{,}9. Изотропное предложение обязано быть узким по короткой оси — и потому ползёт вдоль длинной.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Две панели с одинаковым облаком posterior в виде узкой наклонной долины; красная траектория изотропной цепи топчется на месте, синяя траектория цепи с ковариацией предложения проходит долину из конца в конец
Рис. 67.5. Одинаковая доля принятия, разница в эффективном размере выборки в 23 раза

Реальные данные: 569 наблюдений, два признака с корреляцией 0,9980{,}998. Изотропное предложение приняло 35,9%35{,}9\% и дало Neff=159N_{\mathrm{eff}}=159; предложение с ковариацией, пропорциональной ковариации posterior, приняло почти столько же — 37,8%37{,}8\% — но дало Neff=3685N_{\mathrm{eff}}=3685, в 23,223{,}2 раза больше при том же числе вычислений π~\widetilde\pi. Доля принятия у обеих цепей практически одинакова: она не видит геометрию.

Интересно, что́ именно posterior знает уверенно. Отдельные коэффициенты почти не определены: βradius=2,89\beta_{\text{radius}}=-2{,}89 с интервалом [5,26;0,50][-5{,}26;\,-0{,}50] шириной 4,764{,}76, а βperimeter=6,69\beta_{\text{perimeter}}=6{,}69 с интервалом [4,26;9,10][4{,}26;\,9{,}10]. Зато их сумма определена почти вчетверо точнее: 3,803{,}80 с интервалом [3,17;4,47][3{,}17;\,4{,}47] шириной 1,301{,}30.

Энергия, температура и многомодальность

Плотность часто записывают в физической форме

π(x)eE(x)/T,E(x)=Tlogπ~(x).\pi(x)\propto e^{-E(x)/T}, \qquad E(x)=-T\log\widetilde\pi(x).

Энергия EE мала в вероятных состояниях, температура TT сглаживает рельеф. При T0T\to0 пики сжимаются к точкам максимума, при больших TT рельеф становится почти плоским. Отношение принятия принимает вид

π~(y)π~(x)=eΔE/T,ΔE=E(y)E(x),\frac{\widetilde\pi(y)}{\widetilde\pi(x)}=e^{-\Delta E/T}, \qquad \Delta E=E(y)-E(x),

а вероятность за один шаг пересечь барьер высотой ΔE\Delta E падает экспоненциально. Отсюда и берутся нулевые переходы на рис. 67.3.

Tempering-методы запускают несколько цепей при разных температурах и периодически обменивают их состояния: горячая цепь легко перелезает барьеры, холодная хранит нужную цель, а обмен принимается по своему критерию Метрополиса, так что суммарный баланс сохраняется.

Сколько стоит одна честная цифра

Оценив среднее, надо честно сообщить его погрешность. Наивная формула из урока 46 предполагает независимость и потому в MCMC врёт. Правильная версия — Monte Carlo standard error:

MCSE(fˉ)Var^(f)Neff=τintVar^(f)N.\operatorname{MCSE}(\bar f) \approx\sqrt{\frac{\widehat{\operatorname{Var}}(f)}{N_{\mathrm{eff}}}} =\sqrt{\frac{\tau_{\mathrm{int}}\,\widehat{\operatorname{Var}}(f)}{N}} .

Проверить её можно так же, как мы проверяли интервалы в уроке 46: многократно повторить всю процедуру и посчитать, как часто интервал накрывает известное истинное значение.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Две колонки: доля попаданий 0,34 у интервала с корнем из N и 0,935 у интервала с корнем из эффективного размера выборки, штриховая линия номинала 0,95
Рис. 67.6. Наивный интервал накрывает истину в 34% случаев вместо 95%

Двести независимых запусков, в каждом 4000 состояний после прогрева, цель N(0,1)\mathcal N(0,1), истинное среднее равно нулю. Интервал fˉ±1,96s/N\bar f\pm1{,}96\,s/\sqrt N, считающий выборку независимой, накрыл истину лишь в 34%34\% запусков. Интервал с поправкой на автокорреляцию, fˉ±1,96s/Neff\bar f\pm1{,}96\,s/\sqrt{N_{\mathrm{eff}}}, дал 93,5%93{,}5\% — почти номинал. Он в 4,14{,}1 раза шире, и эта ширина честная.

Отсюда простое правило работы: любое число из цепи публикуется вместе с NeffN_{\mathrm{eff}} и MCSE, а количество значащих цифр в ответе определяется MCSE, а не тем, сколько их напечатал компьютер.

Другая ветвь Монте-Карло: Соболь и равномерность вместо случайности

У задачи «оценить интеграл» есть и второй путь, и его в 1967 году проложил Илья Меерович Соболь. В работе «О распределении точек в кубе и приближённом вычислении интегралов» он построил ЛПτ\tau-последовательности — не случайные, а нарочито равномерные наборы точек, у которых каждый двоичный блок координат заполняется без сгущений и пустот. Для гладких функций ошибка квази-Монте-Карло убывает почти как 1/N1/N вместо 1/N1/\sqrt N:

I^NIV(f)DN,DN=O ⁣((logN)dN),\bigl|\widehat I_N-I\bigr|\le V(f)\,D^{*}_N, \qquad D^{*}_N=O\!\left(\frac{(\log N)^{d}}{N}\right),

где V(f)V(f) — вариация функции, а DND^{*}_N — дискрепанс, то есть отклонение набора точек от идеальной равномерности. Это неравенство Коксмы–Хлавки: детерминированная оценка, без всяких «с вероятностью 0,950{,}95».

Две ветви решают разные задачи, и это стоит помнить. ЛПτ\tau великолепен для гладкого интеграла умеренной размерности по известной области; MCMC незаменим там, где область — это сама неизвестная масса вероятности в двадцатимерном пространстве, и найти её можно, только ползая по отношениям плотностей. Советская школа вычислительной вероятности разрабатывала обе ветви: Соболь и Ермаков строили теорию Монте-Карло для интегралов и интегральных уравнений, тогда как физики пользовались метрополисовскими цепями. Сегодняшние библиотеки содержат обе кнопки, и выбирать между ними — часть работы.

Три слоя успешной цепи

Успешная MCMC-работа состоит из трёх слоёв.

Первый — математика: детальный баланс и неприводимость гарантируют, что у цепи правильное стационарное распределение. Это доказывается на бумаге и не зависит от данных.

Второй — вычислительная диагностика: несколько цепей из разнесённых стартов, трассы, split-R^\widehat R, τint\tau_{\mathrm{int}}, NeffN_{\mathrm{eff}}, MCSE. Она отвечает на вопрос, успела ли цепь исследовать существенные области за отведённое время. Доля принятия относится сюда — и только сюда.

Третий — предметная проверка: осмысленна ли сама вероятностная модель, откуда взяты данные, что означает коэффициент. Идеальная цепь на плохой модели даёт уверенно неверный ответ, и никакой R^\widehat R этого не заметит.

Следующий урок о взломе шифра применит ту же механику к непривычному пространству состояний — перестановкам букв. Там у цепи нет координат, зато есть локальные обмены и языковая «энергия», и всё, что мы сегодня считали для чисел, будет считаться для текста.

Задачи