46 DDPM (Diffusion)
Контекст
GAN (#20) давали резкие картинки, но капризны (нестабильность, mode collapse). Хо, Джейн, Аббель делают диффузию практичной и качественной.
Идея и механизм
Forward (фиксированный, без обучения): за T шагов постепенно добавляем гауссов шум, пока не останется чистый шум. Reverse (обучаемый): сеть учится пошагово ОБРАЩАТЬ это. Генерация: стартуем из чистого шума и итеративно денойзим до картинки.
теория вероятностей От вариационной границы к простому MSE по шуму
Forward. Добавление шума замкнуто на любой шаг (свойство гауссиан): можно сразу получить xt из x0:
где ᾱt = ∏s≤t(1−βs). Reverse. Учим pθ(xt−1 | xt). Полная вариационная нижняя граница (ELBO) громоздка, но авторы показывают, что она сводится к удивительно простому виду — предсказывать добавленный шум:
То есть сеть εθ на зашумлённой 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)
Почему это важно
Дало генерацию качества GAN БЕЗ нестабильности и с полным покрытием мод (разнообразием) → диффузия стала доминирующей парадигмой генерации изображений (и аудио, видео, молекул). Прямой фундамент Stable Diffusion (#47), DALL·E 2, Imagen.
Связи
Та же задача (генерация изображений), противоположный подход: вместо состязания двух сетей — обучение одной сети расшумлять. Диффузия решила фирменные болезни GAN (нестабильность, mode collapse) и вытеснила его в генерации картинок к началу 2020-х.
DDPM работает в пикселях — дорого. Stable Diffusion переносит ту же математику в компактное латентное пространство, делая text-to-image доступным на потребительских GPU. Прямое практическое продолжение.
Обе — итеративная генерация, но по-разному: WaveNet авторегрессионно по одному сэмплу, диффузия — параллельно по всей картинке, но за много шагов денойзинга. Диффузия частично лечит медленность последовательной генерации (хотя сама требует десятков шагов).
Вопросы пытливого ума
Почему предсказывать шум, а не сразу чистую картинку?
Математически эквивалентно (зная шум и xt, можно выразить x0), но численно ε-prediction даёт лучше обусловленную задачу: цель имеет единичную дисперсию на всех шагах, градиенты стабильнее. Эмпирически предсказание шума обучается заметно лучше прямого предсказания картинки — удачный выбор параметризации.
Диффузия требует десятки-сотни шагов денойзинга — это не убивает скорость?
Да, это главная цена против GAN (один проход). Поэтому появились ускорители: DDIM (детерминированный сэмплинг за меньше шагов), дистилляция в малошаговые/одношаговые модели, consistency models. Так что «много шагов» — реальная слабость, активно решаемая; качество и устойчивость диффузии перевесили медленность.
Откуда вообще взялась идея — это придумали с нуля в 2020-м?
Нет: теоретическая основа — неравновесная термодинамика (Sohl-Dickstein, 2015), а корни уходят в score matching и stochastic differential equations. Заслуга DDPM — сделать подход практичным: упрощение до ε-prediction и MSE-лосса превратило красивую, но громоздкую теорию в рабочий рецепт SOTA-качества.
Что читать в оригинале
Читать целиком — математика (forward как marginal, упрощение до ε-prediction) важна и красива; лучший способ понять, почему «учить денойзер» = «учить генеративную модель».