Эпоха 6 · Генеративка и системы · 2020

46 DDPM (Diffusion)

Denoising Diffusion Probabilistic Models · Ho, Jain & Abbeel · UC Berkeley · NeurIPS
🟥 читать целиком~2–3 чоригинал ↗
Суть за 20 секунд. Учим сеть пошагово «расшумлять» данные: forward-процесс портит картинку шумом, reverse — обращает это. Лосс сводится к простому MSE между добавленным и предсказанным шумом. Качество GAN без его нестабильности. Запуск эры diffusion.

Контекст

GAN (#20) давали резкие картинки, но капризны (нестабильность, mode collapse). Хо, Джейн, Аббель делают диффузию практичной и качественной.

Идея и механизм

Forward (фиксированный, без обучения): за T шагов постепенно добавляем гауссов шум, пока не останется чистый шум. Reverse (обучаемый): сеть учится пошагово ОБРАЩАТЬ это. Генерация: стартуем из чистого шума и итеративно денойзим до картинки.

теория вероятностей От вариационной границы к простому MSE по шуму

Forward. Добавление шума замкнуто на любой шаг (свойство гауссиан): можно сразу получить xt из x0:

xt = √ ᾱt  · x0 + √ 1−ᾱt  · ε,   ε ∼ N(0, I)

где ᾱt = ∏s≤t(1−βs). Reverse. Учим pθ(xt−1 | xt). Полная вариационная нижняя граница (ELBO) громоздка, но авторы показывают, что она сводится к удивительно простому виду — предсказывать добавленный шум:

Lsimple = Et, x0, ε ‖ ε − εθ(xt, t) ‖²

То есть сеть εθ на зашумлённой xt и шаге t предсказывает, какой шум подмешали — обучение это обычный MSE. Красота в том, что сложная генеративная задача превратилась в «угадай шум».

PyTorch Шаг обучения диффузии
import torch

def diffusion_loss(x0, model, abar, T):
    t   = torch.randint(0, T, (len(x0),))
    eps = torch.randn_like(x0)
    a   = abar[t].view(-1, 1, 1, 1)
    xt  = a.sqrt() * x0 + (1 - a).sqrt() * eps   # зашумляем за один шаг
    return ((eps - model(xt, t)) ** 2).mean()    # предсказать шум (MSE)
x₀ xₜ шум forward: добавляем шум → ← reverse: сеть расшумляет (обучаемо) генерация:из шума → картинка
Forward портит картинку до шума по фиксированному правилу; обучаемый reverse идёт обратно. Сгенерировать = стартовать из шума и денойзить.
Аналогия. Представьте, что вы много раз смотрели, как чёткая фотография постепенно растворяется в «снеге» помех. Если научиться каждый маленький шаг этого распада обращать — убирать чуть-чуть шума, — то, начав с чистого «снега», можно шаг за шагом проявить из него осмысленную картинку. Диффузия учится именно этому микро-расшумлению.

Почему это важно

Дало генерацию качества GAN БЕЗ нестабильности и с полным покрытием мод (разнообразием) → диффузия стала доминирующей парадигмой генерации изображений (и аудио, видео, молекул). Прямой фундамент Stable Diffusion (#47), DALL·E 2, Imagen.

Связи

↔ преемник20. GAN

Та же задача (генерация изображений), противоположный подход: вместо состязания двух сетей — обучение одной сети расшумлять. Диффузия решила фирменные болезни GAN (нестабильность, mode collapse) и вытеснила его в генерации картинок к началу 2020-х.

→ ведёт к47. Stable Diffusion

DDPM работает в пикселях — дорого. Stable Diffusion переносит ту же математику в компактное латентное пространство, делая text-to-image доступным на потребительских GPU. Прямое практическое продолжение.

↔ перекликается30. WaveNet

Обе — итеративная генерация, но по-разному: WaveNet авторегрессионно по одному сэмплу, диффузия — параллельно по всей картинке, но за много шагов денойзинга. Диффузия частично лечит медленность последовательной генерации (хотя сама требует десятков шагов).

Вопросы пытливого ума

Почему предсказывать шум, а не сразу чистую картинку?

Математически эквивалентно (зная шум и xt, можно выразить x0), но численно ε-prediction даёт лучше обусловленную задачу: цель имеет единичную дисперсию на всех шагах, градиенты стабильнее. Эмпирически предсказание шума обучается заметно лучше прямого предсказания картинки — удачный выбор параметризации.

Диффузия требует десятки-сотни шагов денойзинга — это не убивает скорость?

Да, это главная цена против GAN (один проход). Поэтому появились ускорители: DDIM (детерминированный сэмплинг за меньше шагов), дистилляция в малошаговые/одношаговые модели, consistency models. Так что «много шагов» — реальная слабость, активно решаемая; качество и устойчивость диффузии перевесили медленность.

Откуда вообще взялась идея — это придумали с нуля в 2020-м?

Нет: теоретическая основа — неравновесная термодинамика (Sohl-Dickstein, 2015), а корни уходят в score matching и stochastic differential equations. Заслуга DDPM — сделать подход практичным: упрощение до ε-prediction и MSE-лосса превратило красивую, но громоздкую теорию в рабочий рецепт SOTA-качества.

Что читать в оригинале

Читать целиком — математика (forward как marginal, упрощение до ε-prediction) важна и красива; лучший способ понять, почему «учить денойзер» = «учить генеративную модель».