24 / 33 · Модели, основанные на энергии
Сэмплирование ненормированных плотностей: MALA, гамильтонов Монте-Карло и NUTS
Как сэмплировать из плотности, известной лишь с точностью до нормировочной константы, — а именно так плотность задаёт модель, основанная на энергии: выборка с отклонением и алгоритм Метрополиса–Гастингса вкратце, MALA и его предложение с учётом градиента, гамильтонов Монте-Карло с импульсом, интегратор leapfrog и проверка принятия по ошибке энергии, настройка размера шага, длины траектории и матрицы масс, NUTS с критерием разворота, удвоением траектории и двойственным усреднением, запуск сэмплеров в Pyro.
На этой странице 17
Потоки дают точную плотность, но только для обратимых сетей с дёшево вычислимым определителем Якоби. Модель, основанная на энергии (energy-based model), снимает все ограничения на архитектуру: любая сеть со скалярным выходом задаёт плотность
Плотность определена, когда конечна; положительна она автоматически, поскольку . Цена — , интеграл по всему пространству данных, который для изображений никто не умеет вычислить. Без него нельзя вычислить . Но само по себе её отсутствие не исключает точного сэмплирования: выборка с отклонением, о которой речь ниже, даёт точные независимые точки из ненормированной плотности. Прямым методам нужна дополнительная структура — обратная функция распределения или огибающая, плотно ограничивающая плотность сверху, — а на изображениях такой структуры нет или от неё нет толку. Вычислить можно отношение , в котором сокращается, и градиент , в который вообще не входит. Поэтому для сэмплирования из модели, основанной на энергии, и для её обучения нужны сэмплеры, использующие только отношения или градиенты ненормированной плотности. Эта заметка строит такие сэмплеры — от случайного блуждания Метрополиса–Гастингса до сэмплеров, которые движутся по градиенту и применяются на практике: MALA, гамильтонова Монте-Карло (Hamiltonian Monte Carlo) и его адаптивной формы NUTS. При первом чтении можно пройти Метрополиса–Гастингса, MALA, интегратор leapfrog и одну итерацию HMC, затем настройку, диагностику прогрева и Pyro; доказательство правила принятия и внутреннее устройство NUTS помечены как дополнительный материал. Следующая заметка встраивает их в обучение.
Обозначения. Целевое распределение задано плотностью на , известной с точностью до константы, ; — потенциальная энергия (potential energy), и для модели, основанной на энергии, . Градиент — это score (функция score). — плотность предлагающего распределения (proposal), — вероятность принятия, — нормальное распределение с ковариацией (вторым аргументом указывается дисперсия), а всегда обозначает новый независимый стандартный нормальный шум. В гамильтоновом Монте-Карло — импульс (momentum; никогда не плотность), — полная энергия, — размер шага, — число шагов. — размерность.
Отправная точка: выборка с отклонением и алгоритм Метрополиса–Гастингса#
В курсе теории вероятностей уже есть два сэмплера, которые работают с ненормированной плотностью; здесь мы лишь напомним, что они дают.
Выборка с отклонением (rejection sampling; Методы Монте-Карло) сэмплирует из предлагающего распределения и оставляет его с вероятностью , где . Оставленные точки — точные независимые сэмплы из : точка сэмплируется и оставляется с плотностью , пропорциональной . Для нормированной целевой плотности доля принятых (acceptance rate) равна , так что в среднем один сэмпл обходится в предложений; если вместо взять , условие принимает вид , а доля принятых — . Наилучшая константа — , и хвосты предлагающего распределения должны быть не легче, чем у целевого, иначе супремум бесконечен. Эта же граница и губит метод в многомерном случае. Для целевого распределения и предлагающего отношение максимально при , поэтому , и принимается половина предложений. Для и отношение равно произведению по координатам, : в десятимерном случае принимается одно предложение из 1024, в стомерном — одно из .
Алгоритм Метрополиса–Гастингса (Марковские методы Монте-Карло) отказывается от независимости. Из текущего состояния он предлагает и принимает его с вероятностью
иначе остаётся в . Входит только отношение , поэтому сокращается. Цепь удовлетворяет условию детального баланса , которое делает стационарным распределением; если цепь к тому же неприводима (может попасть в любую область положительной плотности) и апериодична, она сходится к из любого начального состояния — по эргодической теореме в конечных пространствах и по её аналогу в непрерывных. Состояния цепи коррелированы, и состояний равноценны независимым сэмплам — это эффективный размер выборки (effective sample size, ESS), где — автокорреляция на лаге . При симметричном предложении случайного блуждания (random walk) отношение сводится к , и всё решает шаг : при слишком малом шаге цепь ползёт, при слишком большом предложения отклоняются.
Почему случайное блуждание работает медленно#
Случайное блуждание движется независимыми шагами, поэтому после принятых шагов размера оно обычно уходит на расстояние , а не . Шаг ограничен самым узким направлением целевого распределения: шаг, намного превышающий ширину распределения в каком-либо направлении, попадает в область низкой плотности и отклоняется. Тогда, чтобы пересечь самое широкое направление, нужно около шагов. Для двумерного нормального распределения с единичными дисперсиями и корреляцией стандартные отклонения вдоль двух осей эллипса равны и ; их отношение — , его квадрат — .
С ростом размерности становится хуже. Для целевого распределения с независимыми координатами изменение — сумма слагаемых, и чтобы доля принятых не стремилась к нулю, дисперсия предложения должна быть пропорциональна . Тогда цепи нужно порядка шагов на один независимый сэмпл, а оптимальная доля принятых с ростом стремится к , причём для стандартных нормальных координат (Roberts, Gelman and Gilks, 1997). У обеих проблем одна причина: предложение ничего не знает о том, где сосредоточена вероятность. Остальная часть заметки сообщает ему градиент.
MALA: пусть предлагает градиент#
Диффузия Ланжевена (Langevin diffusion)
где — стандартное броуновское движение, сносится вверх по и диффундирует; при мягких условиях её стационарное распределение — . Один шаг метода Эйлера на время даёт предложение
Если использовать этот шаг сам по себе как обновление цепи, получится нескорректированная динамика Ланжевена (unadjusted Langevin dynamics; Динамика Ланжевена), и при любом конечном её стационарное распределение немного неверно: на его дисперсия равна . Алгоритм Ланжевена с поправкой Метрополиса (Metropolis-adjusted Langevin algorithm, MALA; Roberts and Tweedie, 1996) использует тот же шаг как предложение алгоритма Метрополиса–Гастингса и исправляет ошибку проверкой принятия. Предложение несимметрично, потому что снос (drift) в точке отличается от сноса в точке , поэтому в отношение Метрополиса–Гастингса входят оба направления:
Каждый шаг требует одного нового градиента — в ; градиент в сохраняется с предыдущего шага. Всё вычисляется в логарифмах: , а нормировочные константы двух гауссиан равны и сокращаются.
Разобранный пример: MALA на стандартном нормальном распределении#
Возьмём , так что , и обозначим . Среднее предложения из равно , и
где использованы равенства и . После прибавления остаётся
У случайного блуждания логарифм отношения для той же пары равен , у MALA — той же величине, умноженной на . Предложение уже учитывает бо́льшую часть изменения плотности, и проверка лишь исправляет остаток. При и предложение — . Для сэмпла , ушедшего от центра ещё дальше, отношение равно , поэтому случайное блуждание приняло бы его с вероятностью , а MALA принимает с вероятностью : обратное предложение из имеет среднее , всего в от , так что такой шаг легко отменить.
Как шаг зависит от размерности#
Ошибки MALA возникают только из-за дискретизации динамики, для которой инвариантно, и они меньше, чем у случайного блуждания. Для целевых распределений с независимыми координатами Roberts and Rosenthal (1998) показывают, что шаг может уменьшаться как , а не как , так что цепи нужно порядка шагов на независимый сэмпл вместо , и что оптимальная доля принятых стремится к против у случайного блуждания.
Игрушечная проверка на , где каждый сэмплер настроен на свою асимптотически оптимальную долю принятых, считает эффективный размер выборки по на 1000 вычислений целевой плотности (по одному запуску на 40 000 вычислений для каждого сэмплера; гамильтонов Монте-Карло, о котором речь ниже, — с траекториями длины около 1 и долей принятых около ):
| блуждание: | ESS на 1000 | MALA: | ESS на 1000 | HMC: | ESS на 1000 | |
|---|---|---|---|---|---|---|
| 10 | 0.75 | 33 | 1.27 | 316 | 1.05 | 290 |
| 100 | 0.24 | 4.4 | 0.59 | 108 | 0.65 | 126 |
| 1000 | 0.075 | 0.4 | 0.27 | 43 | 0.37 | 66 |
Каждое десятикратное увеличение обходится случайному блужданию примерно в десятикратную потерю эффективности. Шаг MALA следует закону , а его эффективность падает в три и в два с половиной раза; последний столбец — предмет следующих разделов.
Две оговорки. Во-первых, шаг ограничен самым жёстким направлением целевого распределения, потому что снос проскакивает через максимум плотности там, где кривизна велика: на гауссиане с наименьшей дисперсией один только снос устойчив лишь при . Поэтому на вытянутом целевом распределении MALA ограничен почти так же, как случайное блуждание (рисунок 2 ниже). Предобусловленное (preconditioned) предложение с матрицей , близкой к ковариации целевого распределения, снимает проблему, а матрица , зависящая от положения, даёт вариант на римановом многообразии из работы Girolami and Calderhead (2011). Во-вторых, для целевых распределений с хвостами легче гауссовых нескорректированная цепь может расходиться, а MALA может не сходиться с геометрической скоростью (Roberts and Tweedie, 1996).
Гамильтонов Монте-Карло: импульс и энергия#
И MALA, и случайное блуждание забывают своё направление после каждого шага. Гамильтонов Монте-Карло (HMC) добавляет скорость, которая сохраняется. Введём импульс , независимый от и нормальный, , с матрицей масс (mass matrix) (единичной, если не сказано иное). Совместная плотность равна
а её маргинальное распределение по — это : сэмплируя и отбрасывая , мы сэмплируем . На языке физики — положение частицы, — её потенциальная энергия, — кинетическая энергия, — полная энергия (Neal, 2011, раздел 3.1). Частица движется по уравнениям Гамильтона
Импульс несёт частицу вперёд, а сила , то есть score, искривляет её путь в сторону высокой вероятности. У точного потока три свойства, и HMC опирается на все три (Neal, 2011, раздел 2.2).
- Он сохраняет . По правилу дифференцирования сложной функции .
- Он сохраняет объём. Дивергенция векторного поля равна , потому что первое слагаемое не зависит от , а второе не зависит от ; поток с нулевой дивергенцией сохраняет объём любой области (теорема Лиувилля).
- Он обратим. Если пройти по потоку время , сменить знак импульса и снова пройти время , мы вернёмся в начальную точку с импульсом противоположного знака.
Если бы поток можно было вычислить точно, предложение, полученное движением вдоль него в течение некоторого времени, имело бы то же и принималось бы всегда, как бы далеко оно ни уходило. Вся работа — в интеграторе.
Интегратор leapfrog#
Метод Эйлера обновляет и по производным в текущей точке. На , где , а точные траектории — окружности на плоскости , один шаг Эйлера переводит в , и
каждый шаг умножает энергию на , и траектория раскручивается по спирали наружу. Метод leapfrog (метод Штёрмера–Верле) делит обновление импульса на две половины вокруг полного шага по положению:
В цепочке из шагов последний полушаг одного шага и первый полушаг следующего используют один и тот же градиент, поэтому шагов стоят градиентов. Leapfrog не сохраняет , но два других свойства сохраняет точно (Neal, 2011, раздел 2.3):
- Объём. Каждая из трёх строк — сдвиг (shear): она меняет один блок переменных на величину, зависящую только от другого блока. Её матрица Якоби блочно-треугольная с единичными блоками на диагонали, поэтому её определитель равен 1, и определитель композиции тоже равен 1. Это тот же довод о треугольной матрице Якоби, благодаря которому дёшевы слои связи; здесь определитель не просто дёшев, а равен единице.
- Обратимость. Шаг симметричен: если сменить знак и применить тот же шаг, получится .
Ошибка энергии у leapfrog остаётся ограниченной, а не растёт. На шаг — линейное отображение , , и прямая проверка показывает, что оно точно сохраняет теневую энергию (shadow energy)
так что вдоль любой траектории leapfrog разность лишь колеблется. При коэффициент при перестаёт быть положительным, и траектории перестают быть ограниченными; для гауссианы со стандартным отклонением предел — , и задаёт его самое узкое направление. В общем случае ошибка leapfrog по имеет порядок после одного шага и порядок на траектории фиксированной длины.
Разобранный пример. На из , с : , , . Энергия меняется с на , так что , и шаг был бы принят с вероятностью . Шаг Эйлера из той же точки даёт с , то есть ошибку , в девятнадцать раз больше. Теневая энергия одинакова до и после шага leapfrog.
Одна итерация HMC#
Итерация HMC из текущего состояния состоит из трёх шагов, и цепь их повторяет (Neal, 2011, раздел 3.2):
Итерации HMC в фазовом пространстве: leapfrog против Эйлера
- Обновить импульс. Сэмплировать независимо от всего остального. На плоскости это вертикальный сдвиг, и это единственный шаг, который меняет уровень энергии.
- Смоделировать динамику. Сделать шагов leapfrog размера из и получить . Траектория идёт по линии уровня с точностью до малой ошибки leapfrog.
- Принять или отклонить. Принять с вероятностью , где ; иначе оставить . Импульс отбросить.
- Повторить с шага 1 с новым импульсом.
На рисунке каждый новый импульс переводит цепь на другую окружность, точки leapfrog остаются близко к своей окружности, а точки Эйлера уходят с неё. Исследование разных уровней энергии обеспечивает шаг 1, длинные перемещения на фиксированном уровне — шаг 2.
Почему для принятия достаточно ошибки энергии#
Дополнительный материал: доказательство того, что шаг принятия HMC сохраняет целевое распределение. Остальная часть заметки на него не опирается.
Запишем , пусть — один шаг leapfrog, — смена знака импульса, и определим отображение предложения : сделать шагов, затем сменить знак импульса. Два факта об делают вероятность принятия простой.
- — инволюция, . Обратимость означает , поэтому и — тождественное отображение.
- сохраняет объём, , потому что его сохраняют каждый шаг leapfrog и смена знака.
Будем принимать детерминированное предложение с вероятностью . Для любых двух областей и фазового пространства поток вероятности из в равен
а это поток из в . В первой строке сделана замена : она допустима, потому что — сама себе обратная, а её якобиан равен единице, потому что сохраняет объём. Во второй строке использовано равенство , симметричное относительно перестановки . Это условие детального баланса, поэтому шаг принятия оставляет инвариантным. Само отношение равно
поскольку ; по той же причине смена знака на практике ничего не меняет и её опускают — импульс всё равно сэмплируется заново. Обновление импульса — точный сэмпл из условного распределения при данном , то есть шаг Гиббса, поэтому оно тоже оставляет инвариантным, а значит, и вся итерация (Neal, 2011, раздел 3.2).
Именно сохранение объёма избавляет отношение от якобианов. Отображению предложения, которое растягивает пространство, понадобился бы в отношении множитель — тот же член замены переменных, за который нормализующие потоки платят в своём правдоподобии. У метода Эйлера определитель на равен за шаг, и простое отношение сэмплировало бы не то распределение.
Три сэмплера на вытянутой гауссиане#
На рисунке 2 случайное блуждание, MALA и HMC запущены на двумерном нормальном распределении с корреляцией из раздела о случайном блуждании, с одинаковым бюджетом в 3000 вычислений целевой плотности для каждого. Случайное блуждание использует и принимает 22% предложений, что близко к правилу ; MALA использует , чуть ниже своего предела устойчивости , и принимает 57%; HMC использует и , то есть 300 итераций, и принимает 86%.
Три сэмплера с одинаковым бюджетом на вытянутой гауссиане
Эффективные размеры выборки по — 92, 38 и 300. К этим числам три оговорки. Бюджет считает один градиент за одно вычисление, как одно значение плотности, хотя градиент при обратном автоматическом дифференцировании стоит в несколько раз больше; это одна модель учёта, а не равные затраты по времени. Оценка суммирует автокорреляции до первой, меньшей , поэтому для HMC, у которого автокорреляция на лаге один отрицательна, она возвращает ровно число итераций, что здесь занижает результат HMC. Оценка Гейера по начальной последовательности (initial-sequence estimator), которая учитывает отрицательные лаги, даёт на этом прогоне 661 (Geyer, 1992). Наконец, каждое число получено с одним сидом: по 20 сидам та же оценка даёт от 46 до 107 для случайного блуждания, от 21 до 62 для MALA и от 299 до 783 (медиана 482) для HMC. Через десять вычислений автокорреляция всё ещё равна у случайного блуждания и у MALA, а у HMC, который за это время закончил одну итерацию, она равна . Каждая траектория HMC длится единицы времени. Вдоль длинной оси эллипса, стандартное отклонение по которой равно , десять шагов leapfrog продвигают колебание на радиана (), поэтому траектория обычно заканчивается по другую сторону от среднего; отрицательная автокорреляция и отражает этот переброс. На этом целевом распределении градиент ничего не даёт MALA, и он работает хуже хорошо настроенного случайного блуждания: его шаг ограничен узким направлением, а вдоль длинного направления он по-прежнему диффундирует. Его преимущество — масштабирование с размерностью из таблицы выше. HMC отличается качественно: импульс заставляет его двигаться вдоль длинного направления в течение всей траектории.
Настройка HMC: размер шага, длина траектории и матрица масс#
Размер шага. должен оставаться ниже предела устойчивости — примерно удвоенного стандартного отклонения по самому узкому направлению ( для целевого распределения выше), а на практике и несколько ниже, потому что доля принятых падает с ростом ошибки энергии. Для целевых распределений с независимыми координатами шаг должен уменьшаться как , траектории фиксированной длины тогда нужно порядка шагов leapfrog, а оптимальная доля принятых стремится к (Neal, 2011, раздел 4.4; Beskos et al., 2013 дают ). Поскольку каждый градиент стоит порядка операций, полная стоимость одного независимого сэмпла растёт как против у случайного блуждания и у MALA (Neal, 2011, разделы 4.4 и 5.2).
Длина траектории. определяет, как далеко уходит предложение. Слишком короткая траектория — и HMC вырождается в случайное блуждание мелкими шагами (при это MALA). Слишком длинная — и траектория поворачивает обратно к началу, а лишние градиенты тратятся впустую. Хуже того, фиксированная длина может войти в резонанс с периодами целевого распределения. На целевом распределении выше шаг leapfrog по узкому направлению после перемасштабирования — поворот на угол , где . При и это радиана за шаг и оборота за траекторию, так что узкая координата возвращается почти туда, откуда начала (косинус полного угла равен ); эффективный размер выборки по в четырёх запусках падает до значений от 46 до 78 из 300 итераций, тогда как даёт 300 во всех четырёх. Небольшая случайная вариация или на каждой итерации разрушает такие резонансы (Neal, 2011, раздел 3.2), а NUTS вообще избавляет от выбора .
Матрица масс. При шаг leapfrog по положению принимает вид . Выбрать равной оценке ковариации — то же самое, что запустить HMC с единичной матрицей масс на линейно преобразованной переменной (Neal, 2011, раздел 4.1; Betancourt, 2017, раздел 4.2), для которой целевое распределение примерно изотропно: на гауссиане предел устойчивости перестаёт зависеть от её корреляций, а короткие траектории достигают почти независимых точек. В высокой размерности обычный компромисс — диагональная , по одному масштабу на координату; её оценивают по цепи во время прогрева (warm-up).
NUTS: остановка на развороте#
Сэмплер без разворотов (No-U-Turn Sampler, NUTS; Hoffman and Gelman, 2014) сохраняет динамику HMC и убирает : он удлиняет траекторию, пока та не начнёт возвращаться.
Критерий разворота#
При единичной матрице масс расстояние от начала траектории до её текущей точки меняется со скоростью
Пока эта величина положительна, продолжение моделирования уводит предложение дальше; как только она становится отрицательной, траектория разворачивается (при неединичной матрице масс заменяется скоростью ). Если просто остановиться при первом отрицательном значении, нарушится обратимость: траектория, запущенная обратно из точки остановки, обычно остановилась бы в другом месте, и условие детального баланса не выполнялось бы (Hoffman and Gelman, 2014, раздел 3.1).
Удвоение траектории#
NUTS строит траекторию как сбалансированное двоичное дерево. Он начинает с единственного состояния после обновления импульса. На удвоении он равновероятно выбирает направление и делает шагов leapfrog размера от соответствующего конца, вперёд или назад по времени, что удваивает число состояний. Он останавливается, когда для всей траектории или для любого из её сбалансированных поддеревьев крайнее левое и крайнее правое состояния и удовлетворяют условию
то есть когда продолжение в любую сторону сблизило бы концы. Он останавливается и тогда, когда моделирование становится совсем неточным и ошибка энергии превышает , — это расходимость (divergence; Hoffman and Gelman, 2014, раздел 3.1.1). Поскольку дерево строится случайными удвоениями, любое его состояние могло бы породить то же дерево с той же вероятностью после удвоений, и эта симметрия вместе с сохранением объёма заменяет обратимость, которую потеряло бы простое правило остановки.
Какое состояние оставить#
Дополнительный материал: как NUTS выбирает следующее состояние из своего дерева. Остальная часть заметки на него не опирается.
У NUTS нет единого шага принятия или отклонения конечной точки. Он выбирает следующее состояние среди состояний траектории так, чтобы совместное распределение положения и импульса оставалось инвариантным.
- Сэмплирование срезами (slice sampling), исходный вариант: сэмплировать и равновероятно выбрать одно из состояний траектории с , исключив состояния последнего удвоения, которые вызвали бы остановку раньше, чем было построено всё дерево (Hoffman and Gelman, 2014, раздел 3.1.1). Эффективный вариант хранит лишь состояний и смещает выбор к более новой половине дерева, чтобы следующее состояние, как правило, было далеко от текущего (раздел 3.1.2).
- Мультиномиальное сэмплирование (multinomial sampling): выбрать одно из всех состояний траектории с вероятностью, пропорциональной , без переменной среза. Отказ от вспомогательной переменной повышает эффективность по рассуждению Рао–Блэкуэлла, и именно этот вариант Stan и Pyro используют по умолчанию (Betancourt, 2017, приложения A.2.2 и A.5).
Одна итерация NUTS после удвоений стоит градиентов, и реализации ограничивают глубину дерева: в Pyro по умолчанию — 10 удвоениями.
Адаптация размера шага: двойственное усреднение#
Дополнительный материал: правило обновления, на котором держится автоматическая настройка шага. Остальная часть заметки на него не опирается.
NUTS по-прежнему нужен . Его настраивают во время прогрева так, чтобы статистика принятия в среднем равнялась целевому значению . Для NUTS — среднее по состояниям последнего удвоения итерации , то есть вероятность принятия, которая была бы у HMC для этих состояний. Двойственное усреднение (dual averaging), заимствованное из прямо-двойственного метода Нестерова, обновляет
Когда цепь принимает реже, чем , растёт и шаг уменьшается; стягивание к поощряет шаги крупнее начального приближения , а — сходящееся скользящее среднее. Hoffman и Gelman используют , , , а после прогрева фиксируют равным (Hoffman and Gelman, 2014, раздел 3.2). Они нашли, что NUTS эффективен при любом от 0.45 до 0.65, и предложили против примерно для HMC (раздел 4.4). В Stan и Pyro по умолчанию : меньший шаг, меньше расходимостей на сложной геометрии и больше шагов leapfrog на траекторию.
Прогрев#
Первая часть запуска, прогрев, уходит на адаптацию и отбрасывается. В Pyro, вслед за Stan, прогрев начинается с буфера из 75 итераций, в котором адаптируется только размер шага, продолжается окнами по 25, 50, 100, … итераций, в конце каждого из которых матрица масс заново оценивается по состояниям цепи, и заканчивается буфером из 50 итераций, который подстраивает размер шага под окончательную матрицу масс. Если прогрев слишком короток для такого расписания, два буфера сокращаются до 15% и 10% его длины. После прогрева переходное ядро (kernel) замораживается. Ядро, которое продолжало бы адаптироваться, уже не задавало бы фиксированную цепь Маркова, и её стационарное распределение больше не было бы гарантировано.
Каждый запуск сопровождают две диагностики. Расходимости отмечают траектории, ошибка энергии которых взорвалась; они сигнализируют об областях высокой кривизны, которые цепь не может исследовать с данным размером шага, и устойчиво повторяющиеся расходимости означают смещённые оценки (Betancourt, 2017, раздел 6.2). Эффективный размер выборки и расщеплённая (split) статистика по нескольким цепям измеряют перемешивание, как в курсе теории вероятностей.
Запуск сэмплеров в Pyro#
Библиотеки вероятностного программирования прячут всё это за двумя объектами: переходным ядром (HMC или NUTS), которое делает один переход, и MCMC, который запускает прогрев и сэмплирование. Плотность можно задать моделью — программой, которая вызывает pyro.sample:
import torch
import pyro
import pyro.distributions as dist
from pyro.infer import MCMC, NUTS
Sigma = torch.tensor([[1.0, 0.95], [0.95, 1.0]])
def model():
pyro.sample("x", dist.MultivariateNormal(torch.zeros(2), covariance_matrix=Sigma))
mcmc = MCMC(NUTS(model), num_samples=1000, warmup_steps=500)
mcmc.run()
x = mcmc.get_samples()["x"] # тензор формы (1000, 2)
mcmc.summary() # среднее, sd, квантили, n_eff и r_hat по каждой координате
По модели Pyro строит потенциал — отрицательный логарифм совместной плотности, в котором каждая переменная с ограничениями отображается в переменную без ограничений, а к логарифму плотности добавляется логарифм якобиана этого отображения, так что leapfrog движется по всему . Настройки по умолчанию — те, что описаны выше: step_size — лишь начальное , которое двойственное усреднение подстраивает под target_accept_prob=0.8; во время прогрева адаптируется диагональная матрица масс (adapt_mass_matrix=True, full_mass=False); NUTS использует мультиномиальное сэмплирование и max_tree_depth=10; по умолчанию warmup_steps равно num_samples. Для обычного HMC вызов HMC(model, step_size=0.1, num_steps=10) фиксирует длину траектории , и пересчитывается как целая часть при каждой адаптации размера шага.
Для модели, основанной на энергии, потенциал — сама энергия, и его можно передать напрямую:
energy = ... # обученная сеть E_theta: тензор формы (2,) -> скаляр
def potential(params): # U(x) = E_theta(x); нормировочная константа не нужна
return energy(params["x"])
mcmc = MCMC(NUTS(potential_fn=potential), num_samples=1000, warmup_steps=500,
initial_params={"x": torch.zeros(2)})
mcmc.run()
С potential_fn нет модели, из которой можно было бы взять начальную точку, поэтому initial_params обязателен. Градиенты вычисляет автоматическое дифференцирование; каждый шаг leapfrog — один прямой и один обратный проход сети.
Что изменилось#
| Сэмплер | Предложение | Что нужно | Шаг принятия | Настраивается на | Шагов на независимый сэмпл при координатах | Отказывает, когда |
|---|---|---|---|---|---|---|
| Выборка с отклонением | независимый сэмпл из | с точностью до константы, граница | оставить с вероятностью | наилучшее | около , часто экспоненциально по | нет плотной огибающей |
| Случайное блуждание Метрополиса | отношения значений | доля принятых | порядка | вытянутые или многомерные целевые распределения | ||
| MALA | отношения и score | отношение Метрополиса–Гастингса с в обе стороны | доля принятых | порядка | жёсткие направления, лёгкие хвосты | |
| HMC | шагов leapfrog из нового импульса | отношения и score | доля принятых ; и вручную | порядка шагов leapfrog | неудачное , расходимости | |
| NUTS | траектория, удваиваемая до разворота | отношения и score | состояние траектории с весом | двойственным усреднением; при прогреве | как у HMC, с , выбираемым на каждой итерации | расходимости, несколько мод |
Ограничения#
- Переход между модами может быть крайне медленным. Ничто не запрещает перепрыгнуть область нулевой плотности: выборка с отклонением даёт независимые точки, а предложение случайного блуждания или MALA может оказаться по ту сторону провала, не заходя в него. Но такое предложение должно дотянуться до другой моды за один шаг, а с шагом, настроенным на локальную ширину, этого почти никогда не происходит. HMC движется по непрерывной траектории, энергия на которой почти постоянна, поэтому не может пройти через область почти нулевой плотности, где потенциал намного выше, чем позволяет его энергия. Поэтому на целевом распределении с разделёнными модами цепь обычно остаётся в той моде, которую нашла, как курс теории вероятностей показывает для случайного блуждания; HMC и NUTS — не исключение (Neal, 2011, раздел 4.2). Эту проблему решают методы темперирования и отжига (tempering, annealing) ценой дополнительных вычислений.
- Нужны градиенты. MALA, HMC и NUTS требуют дифференцируемого на непрерывном пространстве. Дискретные переменные приходится суммировать (маргинализировать) или обновлять другими шагами, а переменным с ограничениями нужна замена переменных.
- Один размер шага на всё пространство. Области высокой кривизны, например горлышку «воронки» иерархической модели, нужен шаг меньше, чем остальному пространству; глобальный либо тратит градиенты впустую в других местах, либо порождает расходимости в этой области.
- Гарантии асимптотические. Стационарность, длину прогрева и перемешивание можно проверить только диагностиками, которые обнаруживают некоторые сбои, но никогда не все.
- Каждый градиент — проход по сети. Для модели, основанной на энергии, каждый шаг leapfrog или Ланжевена — прямой и обратный проход через , а обучению нужны новые сэмплы после каждого обновления параметров. Цепи, доведённые до сходимости, там непозволительно дороги — с этого и начинается следующая заметка.
Итоги#
- Ненормированная плотность даёт отношения и score без ; все сэмплеры этой заметки используют только их.
- Выборке с отклонением нужна граница , и она принимает долю предложений; алгоритму Метрополиса–Гастингса нужны только отношения, но случайное блуждание диффундирует: порядка шагов на независимый сэмпл при оптимальной доле принятых .
- MALA предлагает один шаг Эйлера для диффузии Ланжевена, , и исправляет его несимметричным отношением Метрополиса–Гастингса; его шаг масштабируется как , а оптимальная доля принятых равна . На логарифм его отношения равен .
- HMC добавляет импульс и следует уравнениям Гамильтона для с интегратором leapfrog. Leapfrog сохраняет объём и обратим, поэтому вероятность принятия равна без якобиана; его ошибка энергии остаётся ограниченной, тогда как у Эйлера энергия на гауссиане умножается на за шаг.
- Шаг HMC должен оставаться ниже примерно удвоенного наименьшего стандартного отклонения, масштабируется как и оптимален при доле принятых ; длина траектории должна избегать и поведения случайного блуждания, и резонанса; матрица масс, близкая к обратной ковариации, делает целевое распределение изотропным.
- NUTS удваивает траекторию в случайных направлениях до разворота, или , выбирает следующее состояние из всей траектории (сэмплированием срезами или мультиномиальным) и во время прогрева настраивает двойственным усреднением, а также матрицу масс.
- В Pyro всё это запускает
MCMC(NUTS(model), num_samples, warmup_steps); для модели, основанной на энергии,NUTS(potential_fn=...)принимает энергию в качестве потенциала.
Ноутбук#
Ноутбук о MCMC из репозитория HSE-LAMBDA Deep Generative Models реализует пять сэмплеров на одном целевом распределении — одномерном (ячейки нумеруются с 1, считая все ячейки подряд, включая текстовые). Сохранённых выходов у него нет, поэтому он документирует процедуры, а не результаты.
- Ячейка 1: введение. Pyro как библиотека вероятностного программирования на PyTorch и список сэмплеров: выборка с отклонением, Метрополис–Гастингс, MALA, HMC и NUTS.
- Ячейки 2–3: подготовка. Импорт
torch,pyro,pyro.distributions,pyro.infer.mcmc, matplotlib и seaborn, начальное значение генератора (seed) 42 и вспомогательная функцияtime_sampling, которая замеряет время работы сэмплера. - Ячейка 4: выборка с отклонением, теория. Граница , доказательство того, что принятые точки имеют плотность , доля принятых при геометрически распределённом числе попыток со средним , оптимальное , а также достоинства и ограничения, включая экспоненциальный рост с размерностью.
- Ячейки 5–6: выборка с отклонением, код. Целевое распределение , предлагающее (
dist.Normal(0, 2), масштаб 2), , 1000 сэмплов, по одному предложению за раз, и гистограмма с ядерной оценкой плотности. - Ячейка 7: Метрополис–Гастингс, теория. Отношение принятия, эргодичность и детальный баланс, отбрасывание начального участка цепи (burn-in), влияние ширины предложения и предложение случайного блуждания с .
- Ячейки 8–9: Метрополис–Гастингс, код. 1000 шагов из с симметричным отношением ; гистограмма.
- Ячейка 10: MALA, теория. Диффузия Ланжевена, предложение и несимметричное отношение, почему MALA превосходит случайное блуждание, и советы по выбору шага. Шаг в ячейке — стандартное отклонение: её предложение совпадает с предложением этой заметки при .
- Ячейки 11–12: MALA, код. Градиенты через autograd в текущей и предложенной точках, плотности прямого и обратного предложений, проверка принятия,
step_size = 0.1, 1000 сэмплов из ; гистограмма. - Ячейка 13: HMC, теория. Положение, импульс, с , уравнения Гамильтона, шаг leapfrog, вероятность принятия и влияние и .
- Ячейки 14–15: HMC в Pyro. Модель с одной случайной переменной (site)
x ~ Normal(0, 1),mcmc.HMC(hmc_model, step_size=0.1, num_steps=10),MCMC(..., num_samples=500, warmup_steps=100), сэмплы изget_samples()["x"]; гистограмма. - Ячейка 16: NUTS, теория. Почему трудно задать, разворот, удвоение траектории, адаптация размера шага двойственным усреднением во время прогрева.
- Ячейки 17–18: NUTS в Pyro. Та же модель с
mcmc.NUTS(model),MCMC(nuts_kernel, num_samples=500, warmup_steps=100); гистограмма. - Ячейка 19: итоги и сравнительная таблица пяти методов, которую заменяет таблица из раздела «Что изменилось» выше.
Ошибки и неточности, с исправлениями:
- Ячейка 5: не ограничивает . Отношение равно , его максимум 2 достигается при , и оно превышает 1.5 при . Там больше 1, каждое предложение принимается, и принятые точки имеют плотность, пропорциональную , а не : это нормальное распределение со срезанной вершиной, с плотностью в нуле вместо , дисперсией вместо 1 и долей принятых вместо , которую предсказала бы теория. Правильная константа — , с долей принятых .
- Ячейка 4: предложение для тяжёлых хвостов. Нормальное предлагающее распределение не может покрыть целевое с тяжёлыми хвостами: тогда не ограничено в хвостах. Хвосты предлагающего распределения должны быть не легче, чем у целевого (например, распределение Стьюдента). Замечание ячейки о том, что можно не нормировать, верно, но тогда в границе заменяется на , а доля принятых равна , а не .
- Ячейки 7–8: шаг случайного блуждания. Рекомендованная доля принятых 25–50% смешивает два результата: оптимум равен в высокой размерности и около в одномерном случае. При на стационарная доля принятых равна , так что цепь делает мелкие, сильно коррелированные шаги; даёт . Утверждение, что алгоритм Метрополиса–Гастингса работает для мультимодальных целевых распределений, вводит в заблуждение: для них он корректен, но может так и не перейти из одной моды в другую. Кроме того, ячейка 8 вычисляет отношение как частное значений
exp(log_prob); разности логарифмов плотностей избавляют от переполнения и от обращения в 0 при потере точности (underflow) на других целевых распределениях. - Ячейки 10–11: шаг MALA слишком мал.
step_size = 0.1означает . На предложение — это плюс шум со стандартным отклонением , практически каждое предложение принимается, а интегральное время автокорреляции равно шагам, так что 1000 шагов из стоят двух-трёх независимых сэмплов, и гистограмма не может походить на . Для этого одномерного целевого распределенияstep_sizeот 1 до 1.4 принимает 79–92% предложений и даёт примерно от 370 до 780 эффективных сэмплов на 1000 шагов. Эмпирическое правило 50% принятых соответствует оптимуму для высокой размерности. «RMSprop MALA» — не устоявшийся метод: предобусловливание в духе RMSprop встречается в предобусловленной стохастической градиентной динамике Ланжевена (preconditioned SGLD; Li et al., 2016), в которой нет шага принятия, а предобусловленный MALA с поправкой Метрополиса — это MALA на римановом многообразии из работы Girolami and Calderhead (2011). - Ячейка 13: сохранение энергии. Ячейка объясняет высокую долю принятых тем, что гамильтонова динамика сохраняет объём и энергию. Точная динамика принималась бы всегда; leapfrog точно сохраняет объём и обратимость, но энергию — лишь приближённо, и вероятность принятия меньше 1 измеряет его ошибку энергии.
- Ячейка 14: настройки HMC перекрываются адаптацией.
HMCв Pyro во время прогрева адаптирует размер шага двойственным усреднением подtarget_accept_prob=0.8и диагональную матрицу масс; обе адаптации включены по умолчанию. Поэтомуstep_size=0.1, num_steps=10фиксирует лишь длину траектории и начальный шаг; после прогрева — целая часть для адаптированного . Чтобы запустить HMC ровно с этими значениями, нужно передатьadapt_step_size=Falseиadapt_mass_matrix=False. - Ячейка 16: как NUTS выбирает следующее состояние. Ячейка описывает принятие или отклонение конечной точки траектории по Метрополису. У NUTS такого шага нет: он выбирает следующее состояние среди состояний траектории — сэмплированием срезами в исходном алгоритме и мультиномиальным сэмплированием в Pyro по умолчанию (
use_multinomial_sampling=True). Каждое удвоение продлевает траекторию в одном случайно выбранном направлении, а не в обоих. «Доля принятых 60–90%» — это целевое значение адаптации , по умолчанию 0.8, а не свойство метода. - Ячейка 19: сравнительная таблица. Её диапазоны долей принятых — эмпирические правила; асимптотически оптимальные значения равны , и , выборка с отклонением принимает ровно , а доля принятых NUTS равна тому , которое задано. Ни один сэмплер из таблицы не справляется с хорошо разделёнными модами, а NUTS — выбор по умолчанию только для непрерывных дифференцируемых целевых распределений.
- Все ячейки: одно целевое распределение. На одномерном пять сэмплеров выглядят одинаково. Коррелированная двумерная гауссиана с рисунка 2 их различает.
Дальше#
Сэмплеры этой заметки предполагают фиксированное целевое распределение и достаточно времени, чтобы сойтись. Модели, основанной на энергии, после каждого обновления нужны сэмплы из её собственной плотности, чтобы оценить градиент , и доводить цепи до сходимости она себе позволить не может. Следующая заметка выводит этот градиент с его негативной фазой (negative phase), которой нужны сэмплы из модели, и обучает модели, основанные на энергии, с помощью коротких цепей Ланжевена, персистентных цепей и буфера воспроизведения (replay buffer). В ней разобраны и два родственника этих сэмплеров, которые там используются: стохастическая градиентная динамика Ланжевена и выборка по значимости с отжигом (annealed importance sampling), которая оценивает нормировочную константу, чтобы сообщить правдоподобие.
Литература#
- R. M. Neal. MCMC Using Hamiltonian Dynamics. In S. Brooks, A. Gelman, G. Jones, X.-L. Meng (eds.), Handbook of Markov Chain Monte Carlo, Chapter 5, Chapman & Hall/CRC, 2011. Разделы 2.2–2.3 (свойства динамики, leapfrog), 3.1–3.2 (алгоритм HMC и его инвариантность), 4.1–4.2 и 4.4 (линейные преобразования, настройка, масштабирование с размерностью), 5.2 (метод Ланжевена как один шаг leapfrog).
- M. D. Hoffman, A. Gelman. The No-U-Turn Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo. Journal of Machine Learning Research, 15(47), 1593–1623, 2014. arXiv:1111.4246. Разделы 3.1 (критерий разворота, удвоение, сэмплирование срезами), 3.2 (двойственное усреднение), 4.4 (выбор ).
- M. Betancourt. A Conceptual Introduction to Hamiltonian Monte Carlo. arXiv, 2017. Разделы 4.2 (евклидово-гауссовы кинетические энергии, матрица масс), 4.3 (время интегрирования), 6.2 (расходимости), приложения A.2.2 и A.5 (мультиномиальное сэмплирование, текущая версия NUTS в Stan).
- G. O. Roberts, R. L. Tweedie. Exponential Convergence of Langevin Distributions and Their Discrete Approximations. Bernoulli, 2(4), 341–363, 1996.
- G. O. Roberts, J. S. Rosenthal. Optimal Scaling of Discrete Approximations to Langevin Diffusions. Journal of the Royal Statistical Society: Series B, 60(1), 255–268, 1998.
- G. O. Roberts, A. Gelman, W. R. Gilks. Weak Convergence and Optimal Scaling of Random Walk Metropolis Algorithms. The Annals of Applied Probability, 7(1), 110–120, 1997.
- A. Beskos, N. Pillai, G. Roberts, J.-M. Sanz-Serna, A. Stuart. Optimal Tuning of the Hybrid Monte Carlo Algorithm. Bernoulli, 19(5A), 1501–1534, 2013. arXiv:1001.4460.
- M. Girolami, B. Calderhead. Riemann Manifold Langevin and Hamiltonian Monte Carlo Methods. Journal of the Royal Statistical Society: Series B, 73(2), 123–214, 2011.
- C. Li, C. Chen, D. Carlson, L. Carin. Preconditioned Stochastic Gradient Langevin Dynamics for Deep Neural Networks. AAAI, 2016. arXiv:1512.07666.
- C. J. Geyer. Practical Markov Chain Monte Carlo. Statistical Science, 7(4), 473–483, 1992.
- Документация Pyro: MCMC, HMC and NUTS.
- HSE-LAMBDA, репозиторий курса Deep Generative Models:
MCMC.ipynb.