28 / 33 · Диффузионные модели
Score matching и динамика Ланжевена
Учить градиент логарифма плотности вместо самой плотности: функция score, score matching Хюваринена, его срезанная и денойзинговая версии, сэмплирование динамикой Ланжевена, почему одного уровня шума мало и как score, зависящий от уровня шума, вместе с отжигом приводят к той же модели, что и DDPM.
DDPM: обратный процесс и целевая функция обучения · Многомерные гауссовские распределения
На этой странице 13
Заметка о DDPM пришла к модели, оценив сверху правдоподобие цепочки зашумления и упрощая оценку, пока она не стала регрессией на шум. Эта заметка приходит к той же модели с другой стороны. Вместо плотности учится её градиент — score (функция score); вместо декодера сэмплы получаются движением по score с небольшим добавленным шумом — динамикой Ланжевена (Langevin dynamics). Два пути встречаются: сеть, предсказывающая шум в DDPM, с точностью до известного множителя и есть score зашумлённых данных.
Обозначения. — плотность данных на , — её score; — модель. — данные после добавления гауссова шума масштаба . — след якобиана .
Зачем нужен score#
Многие модели задают плотность лишь с точностью до константы, как модели, основанные на энергии (energy-based models), из одной из предыдущих заметок: с энергией и нормировкой , которую в большой размерности не вычислить. Методу максимального правдоподобия нужны и её градиент. Score — нет:
зависит от , но не от , поэтому исчезает. Score гауссианы равен : вектор, указывающий обратно к среднему и тем длиннее, чем дальше точка. В общем случае score указывает в сторону большей плотности и несёт всю информацию о там, где положительна и гладка на связной области, например на всём : две такие плотности с одинаковым score всюду отличаются постоянным множителем, который фиксирует нормировка. На двух разделённых компонентах score задаёт каждую часть лишь с точностью до своей константы и ничего не говорит о том, как масса делится между ними; гауссовское сглаживание снимает проблему, потому что зашумлённая плотность положительна на всём . Поэтому, когда score параметризован через энергию, , его подгонка обучает модель, основанную на энергии, без её нормировочной константы и без сэмплов из модели (модели, основанные на энергии). Произвольная сеть — другой объект: векторное поле, якобиан которого не обязан быть симметричным, так что оно не обязано быть градиентом какой-либо скалярной функции. Это приближённый score, за которым не стоит никакая энергия, и именно так его используют диффузионные модели.
Подгонка score: трюк Хюваринена#
Естественная функция потерь — дивергенция Фишера (Fisher divergence), средний квадрат расстояния между двумя score по данным:
Ей нужен истинный score, который неизвестен. Hyvärinen (2005) убирает его интегрированием по частям. В одном измерении раскроем квадрат; перекрёстное слагаемое равно
где использовано и предположено, что на бесконечности. Квадрат истинного score от не зависит. В измерениях тот же шаг по каждой координате даёт
математическое ожидание по данным, в которое входит только модель.
Разобранный пример. Подгоним гауссов score с к данным . Тогда , а целевая функция — . Приравнивание производной по к нулю даёт ; производная по даёт , так что . Score matching восстанавливает выборочные среднее и дисперсию — оценки максимального правдоподобия для гауссианы, — ни разу не коснувшись нормировочной константы.
Цена — слагаемое со следом. Для сети величина требует обратных проходов, по одному на диагональный элемент якобиана: годится для , невозможно для изображения с .
Две целевые функции подешевле#
Срезанный score matching (sliced score matching, Song et al., 2019) проецирует на случайные направления с :
В среднем по это целевая функция выше, потому что и . Одно произведение якобиана на вектор заменяет обратных проходов.
Денойзинговый score matching (denoising score matching, Vincent, 2011) обходится в функции потерь без производных модели по входу — без якобиана и без следа, — подгоняя score зашумлённых данных; градиент по параметрам для обучения по-прежнему нужен, как для любой функции потерь. Возьмём и возмутим его любым ядром с известным score; зашумлённые данные имеют плотность . Целевая функция
отличается от дивергенции Фишера относительно лишь на константу (Song and Ermon, 2019, формула 2). Раскроем оба квадрата. Слагаемые имеют одинаковое математическое ожидание, слагаемые без — константы, а перекрёстные слагаемые совпадают, потому что , так что
Обычно ядро гауссовское, с , что даёт плотность из обозначений. Его score равен , и целевая функция принимает вид
Почему это работает, можно увидеть и по-другому: регрессия с квадратичной ошибкой учит условное среднее, минимизатор — , и это условное среднее в точности равно — факт, известный как формула Твиди (Tweedie’s formula).
Разобранный пример. Данные и . Тогда , а его score равен . Напрямую: и совместно гауссовы с , так что и : цель регрессии в среднем — score зашумлённых данных.
Цена денойзингового score matching в том, что он оценивает score , а не . Малое держит их близкими, но делает цели большими и шумными; большое размывает данные. Выход, о котором ниже, — использовать сразу много значений .
Сэмплирование динамикой Ланжевена#
Имея score, динамика Ланжевена порождает сэмплы:
Снос поднимается по плотности, шум не даёт цепочке схлопнуться в моды. При малом шаге и большом числе шагов распределение приближается к ; при условиях регулярности оно становится в точности равным , когда , а число шагов неограниченно растёт (Song and Ermon, 2019, §2.2, со ссылкой на Welling and Teh, 2011). Без шума обновление — градиентный подъём по , и он заканчивается в моде, а не в сэмпле.
Разобранный пример. Для score , и обновление — . Его стационарная дисперсия удовлетворяет , так что
При цепочка устанавливается на дисперсии 1.026 вместо 1, при — на 1.143. Смещение от дискретизации имеет порядок , и меньшие шаги покупают точность ценой большего числа шагов; поправка Метрополиса–Гастингса убрала бы смещение, но потребовала бы вычислять плотность, а ведь score нужен был именно затем, чтобы этого избежать.
Уменьшение шага по ходу цепочки. Смещение исчезает и тогда, когда размер шага убывает вдоль цепочки, но только если он убывает медленно. Welling and Teh (2011), формула 2, требуют
например, с . Первое условие позволяет цепочке уйти от старта на любое расстояние; второе заставляет шаги, а с ними и ошибку дискретизации, стремиться к нулю. Геометрическое убывание нарушает первое условие: сумма шагов равна , и цепочка замирает, не успев перемешаться. В гауссовском примере начальная точка сохраняется в с множителем . При и сумма шагов не больше , и после десяти шагов множитель всё ещё равен : цепочка едва сдвинулась со старта.
Температура. Некоторые сэмплеры масштабируют шум температурой , . Поскольку , это обычный сэмплер для плотности, пропорциональной , с шагом . Поэтому температура ниже концентрирует сэмплы около мод. В гауссовском примере стационарная дисперсия становится равной : при и это , близко к дисперсии распределения .
Почему одного уровня шума мало#
Две проблемы появляются, как только данные сложнее одного сгустка (Song and Ermon, 2019).
Score неизвестен там, где нет данных. Score matching взвешивает ошибку плотностью , так что в областях низкой плотности выученный score почти не обучен, и цепочка, стартовавшая там, — а там стартует любая цепочка из шума, — следует произвольным стрелкам. Когда данные лежат около маломерного многообразия, как изображения, почти всё пространство — такая область, а score самих данных вне многообразия даже не определён.
Динамика Ланжевена не умеет балансировать разделённые моды. Возьмём . Около каждой моды score — это score одной гауссианы, и от весов он не зависит; веса проявляются только в промежутке, где score в равен , но плотность там около , и цепочки туда редко заходят. Цепочка падает в ближайшую к старту моду и остаётся в ней. С точным score 4000 цепочек, стартовавших равномерно на , после 2000 шагов размера 0.05 оказываются в левой моде в доле 0.52 — близко к доле стартовавших слева, а не к истинным 0.8.
Шум помогает с обеими проблемами. Зашумлённая плотность всюду положительна, так что её score определён всюду, а при большом зашумлённые обучающие точки разбросаны по гораздо более широкой области, и сеть обучается там, где начинаются цепочки из шума; обучается она, впрочем, только там, куда действительно попадают зашумлённые сэмплы. При большом плотность к тому же заполняет промежуток между модами, так что веса становятся видимыми для цепочки. Насколько это помогает, зависит от выбора: уровни шума должны перекрываться, каждому нужно достаточно шагов подходящего размера, а обученный score добавляет собственную ошибку аппроксимации. В примере со смесью ниже используется точный score.
Шум заполняет пустоту между модами
Score, зависящий от уровня шума, и отжиг#
Song and Ermon (2019) обучают одну сеть сразу для многих уровней шума. Выбирается геометрическая последовательность , сеть получает уровень на вход (noise-conditional score network, NCSN), и минимизируется взвешенная сумма денойзинговых целевых функций:
Вес делает слагаемые сравнимыми: цель имеет размер , так что каждое взвешенное слагаемое порядка единицы. Сэмплирование, отжиг динамики Ланжевена (annealed Langevin dynamics), делает несколько шагов Ланжевена на самом большом уровне шума, где цепочка движется свободно, затем продолжает со следующего уровня с того места, где остановилась, и так до самого малого, с размерами шага , уменьшающимися вместе с шумом. Для изображений в статье уровней от до , 100 шагов на уровень и .
Обучение держится на двух деталях. Сеть видит уровень. В NCSN Song and Ermon у каждого слоя нормализации есть обучаемые масштаб и сдвиг для каждого уровня — условная нормализация по экземпляру (conditional instance normalization; прил. A.1). В небольшой полносвязной сети уровень может просто выбирать обучаемый вектор, который прибавляется к каждому скрытому слою, . Диффузионные сети получают свой шаг теми же способами (заметка о DDPM). Один уровень на пример. Сумма по уровням состоит из слагаемых, и для взвешенных функций потерь уровней . Поэтому среднее выбранных функций потерь по уровням, по одному случайному уровню на обучающий пример, — несмещённая оценка , то есть целевой функции с точностью до постоянного множителя , который масштабирует градиент, но не сдвигает минимум (чтобы оценить сам , нужно умножить на ), — так же, как случайный шаг в DDPM. Например, четыре геометрических уровня от до — это : , , и . Рисунок ниже показывает поля, которые такой сети нужно выучить на этих четырёх уровнях.
Поле score на четырёх уровнях шума
В примере со смесью отжиг по десяти уровням от до , по 100 шагов на уровне, с точным score каждого заканчивается долей 0.79 цепочек в левой моде против истинных 0.8.
Без шума Ланжевен теряет веса мод
Та же модель, что DDPM#
DDPM обучает сеть предсказывать шум в (прямой процесс). Score этого ядра возмущения равен
так что денойзинговый score matching на уровне регрессирует на . Запись превращает функцию потерь DSM в , а вес , дисперсия шума, — это взвешивание выше. Целевая функция DDPM — денойзинговый score matching, зависящий от уровня шума, с дисперсией шума в роли веса, а шаг сэмплирования DDPM — шаг в духе Ланжевена с выученным score. Song et al. (2021) делают это соответствие точным в непрерывном времени: обе модели дискретизируют стохастическое дифференциальное уравнение, добавляющее шум, а генерация проходит его обращение во времени, в снос которого входит score .
Что изменилось#
| Правдоподобие (VAE, потоки) | Score matching | |
|---|---|---|
| Что учится | плотность или её оценка | градиент логарифма плотности |
| Нормировочная константа | нужна или обходится архитектурой | не нужна никогда |
| Обучающий сигнал | логарифм правдоподобия или ELBO | дивергенция Фишера через след, случайные проекции или денойзинг |
| Сэмплирование | один проход декодера | много шагов Ланжевена |
| Слабое место | архитектура ограничивает модель | области без данных и разделённые моды, смягчается уровнями шума |
Ограничения#
- Много шагов сэмплирования. Отжиг Ланжевена делает от сотен до тысяч вычислений сети на сэмпл; более быстрые сэмплеры — предмет дальнейших работ.
- Смещение от дискретизации. Нескорректированная динамика Ланжевена с конечным шагом сэмплирует немного не то распределение, как показывает дисперсия 1.026 вместо 1. Убывающий шаг убирает смещение, только если сумма шагов по-прежнему бесконечна.
- Расписание шума — проектное решение. Самый большой уровень должен перекрывать расстояния между модами, самый малый — быть ниже важных деталей, а соседние уровни — перекрываться.
- Правдоподобия бесплатно нет. Модель score не даёт напрямую; его можно вычислить через ОДУ потока вероятности из Song et al. (2021) ценой её решения.
Итоги#
- Score не зависит от нормировочной константы и там, где положительна на связной области, определяет с точностью до неё.
- Интегрирование по частям Хюваринена превращает дивергенцию Фишера в ; срезанный score matching оценивает след случайными проекциями; денойзинговый score matching регрессирует на score ядра возмущения, для гауссовского шума, и учит score зашумлённых данных.
- Динамика Ланжевена сэмплирует с помощью score; размер шага меняет смещение на число шагов, сумма убывающих шагов должна быть бесконечной, а температура даёт сэмплы из вместо .
- Один уровень шума не справляется в пустых областях и между модами; score, зависящий от уровня шума, вместе с отжигом смягчает и то, и другое, если уровни и размеры шагов подходят к данным. Сеть получает уровень в каждом слое и обучается с одним случайным уровнем на пример.
- Предсказание шума в DDPM — это денойзинговый score matching, зависящий от уровня шума: .
Ноутбук#
Ноутбук о score matching из репозитория HSE-LAMBDA Deep Generative Models работает с двумерным «швейцарским рулетом» (Swiss roll) и основан на руководстве по диффузионным моделям ACIDS-IRCAM (ячейка 1; номера ячеек считают все ячейки, включая текстовые, начиная с 1). Сохранённых выходов ячеек в нём нет, поэтому он описывает процедуру, а не результаты.
- Ячейка 5: 10 000 точек швейцарского рулета с шумом 0.5; первая и третья координаты делятся на 10.
- Ячейки 7–12: стандартный score matching с двухслойной сетью на Softplus, точный якобиан, собранный одним обратным проходом на каждую выходную координату, и 2000 шагов Adam по полному батчу.
- Ячейки 13–14:
plot_gradientsрисует score стрелками на сетке над , перемасштабируя каждую до — это правило длины рисунка с полем score, — чтобы огромные значения score вдали от данных оставались читаемыми. Ячейки 19, 23, 27 и 32–33 используют тот же график. - Ячейки 15–19: градиентный подъём по score (20 шагов по ) против динамики Ланжевена (10 шагов, начиная с и умножая на 0.9 после каждого шага), оба из фиксированной точки ; в тексте сказано, что старт берётся из . Ячейка 17 ссылается на Welling and Teh (2011) как на источник сходимости динамики Ланжевена. У
sample_langevin(ячейка 18) есть аргументtemperature, по умолчанию 1, который масштабирует шум. Геометрическое убывание шага в этой функции нарушает условие : десять шагов в сумме дают , так что цепочка едва сдвигается со старта. - Ячейки 20–23: срезанный score matching на первых 1000 точках. Случайные направления нормируются до единичной длины, так что , и оба слагаемых усредняются по координатам: слагаемое с якобианом становится с математическим ожиданием , а второе слагаемое — средним вместо с математическим ожиданием . Оба несут одинаковый множитель , так что целевая функция пропорциональна целевой функции Хюваринена и имеет тот же минимизатор.
- Ячейки 24–27: денойзинговый score matching. Текстовая ячейка 24 даёт общую целевую функцию для любого ядра возмущения и лишь затем гауссовскую; код использует и 5000 шагов. При таком уровне шума цели имеют размер , а точки вне рулета почти не получают обучающего сигнала — это и есть сбой, который мотивирует следующие ячейки.
- Ячейки 28–33: сеть, зависящая от уровня шума, с четырьмя уровнями , , и и функцией потерь с весом (
anneal_power = 2).ConditionalLinearприбавляет обучаемый вектор уровня —nn.Embedding(4, 128), инициализированный равномерно на , — к выходу каждого из двух скрытых линейных слоёв; это аддитивный вариант, описанный выше. Каждый из 5000 шагов по полному батчу выбирает один уровень на точку черезtorch.randint. Ячейка 32 рисует выученное поле score на каждом уровне. Отжиг динамики Ланжевена не реализован, а последний график приписывает каждой точке сетки случайный уровень шума, так что его стрелки смешивают четыре разных поля.
Дальше#
Диффузионные и score-модели работают в пространстве пикселей: каждый шаг обратной цепочки обрабатывает всё изображение, а большая часть его битов описывает детали, которых никто не замечает. Следующая заметка проводит тот же процесс в латентном пространстве автоэнкодера и добавляет обусловливание, превращающее его в генерацию изображений по тексту.
Литература#
- A. Hyvärinen. Estimation of Non-Normalized Statistical Models by Score Matching. Journal of Machine Learning Research, 6, 2005.
- P. Vincent. A Connection Between Score Matching and Denoising Autoencoders. Neural Computation, 23(7), 2011.
- Y. Song, S. Garg, J. Shi, S. Ermon. Sliced Score Matching: A Scalable Approach to Density and Score Estimation. UAI, 2019.
- Y. Song, S. Ermon. Generative Modeling by Estimating Gradients of the Data Distribution. NeurIPS, 2019. Сети score, зависящие от уровня шума, и отжиг динамики Ланжевена.
- Y. Song, J. Sohl-Dickstein, D. P. Kingma, A. Kumar, S. Ermon, B. Poole. Score-Based Generative Modeling through Stochastic Differential Equations. ICLR, 2021.
- B. Efron. Tweedie’s Formula and Selection Bias. Journal of the American Statistical Association, 106(496), 2011.
- M. Welling, Y. W. Teh. Bayesian Learning via Stochastic Gradient Langevin Dynamics. ICML, 2011. Формула 2 (условия на размер шага).
- G. O. Roberts, R. L. Tweedie. Exponential Convergence of Langevin Distributions and Their Discrete Approximations. Bernoulli, 2(4), 1996.