Diffusion model учит обращать не один огромный прыжок от шума к изображению, а длинную последовательность малых поправок. Прямой процесс известен точно; сеть приближает, какой шум был добавлен на каждом уровне.

Фотография растворяется по расписанию

Пусть x0x_0 — изображение. На шаге tt добавляется Gaussian noise:

q(xtxt1)=N(1βtxt1,βtI).q(x_t\mid x_{t-1}) =\mathcal N( \sqrt{1-\beta_t}\,x_{t-1}, \beta_tI).

Обозначим αt=1βt\alpha_t=1-\beta_t и αˉt=s=1tαs\bar\alpha_t=\prod_{s=1}^t\alpha_s. Благодаря сумме Gaussian можно сразу получить любой уровень:

xt=αˉtx0+1αˉtε,εN(0,I).x_t= \sqrt{\bar\alpha_t}\,x_0+ \sqrt{1-\bar\alpha_t}\,\varepsilon, \qquad \varepsilon\sim\mathcal N(0,I).

Первое слагаемое — сохранившийся сигнал, второе — шум. При большом TT и малом αˉT\bar\alpha_T распределение xTx_T близко к стандартному Gaussian.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Изображение на пяти уровнях diffusion и график signal to noise ratio
Рис. 86.1. Signal-to-noise задаёт видимые стадии

Верхняя лента показывает один x0x_0 при выбранных tt, нижний график — SNRt=αˉt/(1αˉt)\mathrm{SNR}_t=\bar\alpha_t/(1-\bar\alpha_t). Вертикали связывают вид изображения с точками schedule, а не с равными визуальными интервалами.

Сеть предсказывает добавленный шум

Выбираем случайные x0x_0, tt и ε\varepsilon, строим xtx_t, затем минимизируем

Lsimple=Eεεθ(xt,t)22.\mathcal L_{\mathrm{simple}} =\mathbb E \left\| \varepsilon- \varepsilon_\theta(x_t,t) \right\|_2^2.

Сеть получает embedding времени, потому что одна и та же текстура при слабом и сильном шуме требует разных поправок. Предсказание noise связано с score:

xtlogqt(xt)εθ(xt,t)1αˉt.\nabla_{x_t}\log q_t(x_t) \approx -\frac{\varepsilon_\theta(x_t,t)} {\sqrt{1-\bar\alpha_t}}.

Score указывает направление роста плотности noisy data. Denoising — движение от менее вероятной шумной точки к более вероятной структуре.

Обратный шаг

Обратную цепь моделируют

pθ(xt1xt)=N(μθ(xt,t),Σt).p_\theta(x_{t-1}\mid x_t) =\mathcal N( \mu_\theta(x_t,t), \Sigma_t).

При noise-prediction среднее выражается через εθ\varepsilon_\theta:

μθ(xt,t)=1αt(xtβt1αˉtεθ(xt,t)).\mu_\theta(x_t,t) =\frac1{\sqrt{\alpha_t}} \left( x_t- \frac{\beta_t}{\sqrt{1-\bar\alpha_t}} \varepsilon_\theta(x_t,t) \right).

На каждом шаге добавляют случайность, кроме часто последнего. Начинают с xTN(0,I)x_T\sim\mathcal N(0,I) и идут T,T1,,1T,T-1,\ldots,1.

Ошибки накапливаются, но каждый шаг локален. Уменьшить число шагов можно DDIM или современными ODE/SDE solvers; ускорение требует проверять качество и diversity.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Спектры и изображения на обратных diffusion шагах
Рис. 86.2. Обратная траектория уточняет частоты по очереди

Для четырёх tt показаны sample и радиальный спектр мощности. Низкие частоты и глобальная компоновка стабилизируются раньше, высокочастотные детали позже. Стрелки подписаны величиной предсказанной noise correction.

Лаборатория обращения шума

Noise schedule, сигнал и обратная траектория

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

Сравните linear и cosine schedules по SNR, а не только по номеру шага. При schedule, который слишком быстро уничтожает сигнал, большая часть tt почти неразличима и обучение тратит бюджет на чистый шум.

Запустите sampling с разным числом шагов. Отмечайте, когда появляется глобальная форма, цвет и мелкая текстура. Один удачный seed не достаточен: сравнивайте распределение метрик.

Условная генерация и guidance

Условие cc — текст, класс или маска — входит в denoiser. Classifier-free guidance комбинирует условный и безусловный прогноз:

ε^=εθ(xt,t,)+w[εθ(xt,t,c)εθ(xt,t,)].\widehat\varepsilon= \varepsilon_\theta(x_t,t,\varnothing) +w\left[ \varepsilon_\theta(x_t,t,c) -\varepsilon_\theta(x_t,t,\varnothing) \right].

w>1w>1 усиливает соответствие условию, но часто уменьшает diversity и создаёт пересыщенные артефакты. Guidance scale — knob precision–recall, не «качество».

Для обучения часть условий случайно заменяют на null, чтобы одна сеть умела оба режима.

Latent diffusion

Работать в пикселях дорого. VAE кодирует изображение в меньший latent z0z_0, diffusion идёт там, затем decoder возвращает пиксели. Сжатие снижает пространственный размер и вычисления.

Цена: детали, потерянные VAE, diffusion восстановить не может. При оценке надо разделять reconstruction ceiling autoencoder-а и качество generative prior.

Text condition обычно подаётся через cross-attention, используя представления, родственные контрастивным text encoders.

Непрерывный взгляд

При малых шагах forward diffusion описывается stochastic differential equation:

dx=f(x,t)dt+g(t)dWt.dx=f(x,t)\,dt+g(t)\,dW_t.

Reverse-time SDE содержит score xlogpt(x)\nabla_x\log p_t(x). Существует probability flow ODE с теми же маргинальными распределениями, что позволяет deterministic sampling и likelihood estimates при дополнительных вычислениях.

Этот мост связывает случайные блуждания урока 66 с генерацией: броуновский шум разрушает данные, выученное поле score направляет обратное движение.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Двумерные distributions forward diffusion and reverse score vector field
Рис. 86.3. Score обращает рассеяние распределения

Столбцы показывают ptp_t от двух мод до почти Gaussian. В обратных панелях стрелки score направлены к областям высокой плотности; sample paths расходятся к разным модам. Цвет фона — log-density.

CIFAR-10: что измерять

CIFAR-10 мал и позволяет обучить компактный U-Net. Сравните:

  • loss по tt и SNR;
  • FID и precision/recall;
  • class coverage замороженным classifier;
  • sampling time;
  • качество при 10, 25, 50, 100 шагах;
  • nearest train neighbors;
  • diversity при одном condition.

FID зависит от feature extractor и sample size. Для честности real-statistics и число samples одинаковы. Лучший checkpoint выбирается по validation protocol, не по test FID после десятков попыток.

Мини-исследование: ошибка по времени

Uniform sampling tt даёт одинаковое число примеров каждому шагу, но их difficulty и вклад различаются. После обучения вычислите

Et=Eεεθ(xt,t)2E_t= \mathbb E\|\varepsilon-\varepsilon_\theta(x_t,t)\|^2

по bins SNR. Нарисуйте EtE_t, norm predicted noise и reconstruction x^0\widehat x_0. Высокий MSE на почти чистых шагах может быть визуально важнее той же ошибки в почти полном шуме.

Попробуйте loss weighting по SNR и снова сравните. Не выбирайте weighting по одному FID: покажите, какие временные диапазоны улучшились и как изменились precision/recall. Если ранние обратные шаги ошибаются, глобальная композиция может уйти; поздние ошибки чаще портят texture.

Проведите intervention: замените prediction сети истинным noise только на выбранном диапазоне tt и завершите sampling. Изменение итогового качества даёт причинную оценку важности шагов, пусть и на synthetic oracle. Это продолжает ритм проверки внимания вмешательством.

Мини-исследование: stochasticity и разнообразие

Зафиксируйте один xTx_T и condition, затем запускайте stochastic sampler с разными внутренними noise seeds. Сравните outputs. В deterministic DDIM при фиксированных настройках результат один; stochastic reverse chain создаёт семейство.

Измерьте text/class alignment, pairwise diversity и nearest-neighbor distance. Увеличивая guidance, постройте Pareto-кривую alignment–diversity. Отметьте область, где score растёт, а samples начинают повторяться.

Мини-исследование: ускорение без несопоставимых seed

Для samplers на 10, 25 и 100 шагов используйте одинаковые initial xTx_T. Тогда outputs образуют paired сравнения. Вычислите perceptual distance каждого ускоренного результата до 100-шагового reference и человеческое preference на рандомизированных парах.

Покажите время отдельно для batch 1 и batch 64. Latency пользователя и throughput сервера отвечают на разные вопросы. Связь со scaling и стоимостью инференса здесь прямая: лучший sampler выбирается на frontier качества и цены.

Мини-исследование: восстановление известного x0x_0

Обычная генерация не имеет эталона для конкретного noise. Создайте контролируемый тест: возьмите реальные x0x_0, зашумите до выбранного tt по известному ε\varepsilon, затем запустите reverse только с этого уровня. Измерьте reconstruction против tt.

При малом tt задача почти реставрационная, при большом исходная индивидуальность исчезает и модель создаёт другой правдоподобный объект. Нарисуйте PSNR/LPIPS и class consistency. Не требуйте pixel match там, где forward process уничтожил информацию.

Сравните stochastic и deterministic reverse. Первый даёт распределение возможных восстановлений, второй — один путь. Для каждого tt покажите variation между samples и расстояние до исходника. Так становится видна граница между denoising и generation.

Мини-исследование: условие, которое конфликтует с изображением

При image-to-image diffusion подайте зашумлённое изображение кошки и condition собака. Меняйте starting noise level и guidance. На слабом шуме сохраняется исходная структура, на сильном условие получает власть. Измерьте identity/perceptual preservation и condition score.

Этот опыт делает два коэффициента интерфейса осмысленными: noise strength управляет количеством сохранённого evidence, guidance — давлением condition. Оба могут быть переоптимизированы. Связь с inpainting и контрактом маски прямая: пользователь должен понимать границу допустимого изменения.

Численная точность обратной цепи

Сравните float32 и mixed precision на одинаковых initial noises. Малые ошибки каждого шага могут разойтись в stochastic trajectory, поэтому pixel equality не ожидается. Сравнивайте распределительные метрики и paired perceptual distance.

Зафиксируйте library, scheduler configuration и random generator. Название 50 steps недостаточно: разные timesteps, solver order и eta дают разные процессы. Reproducibility требует полной sampler-конфигурации.

Наконец, проверьте memorization не только nearest neighbor-ом. Возьмите редкие training images, измерьте conditional extraction rate при близких prompts и сравните с test images той же редкости. Exact совпадение легко найти hash-ом, частичное — crop-aware features.

Если модель воспроизводит training object, причина может лежать в дубликатах корпуса, чрезмерных эпохах или узком condition. Этот аудит соединяет diffusion с дедупликацией предобучения.

Генерация как обращение шума

Diffusion раскладывает генерацию на известное зашумление и выученное обращение. Closed-form q(xtx0)q(x_t\mid x_0) делает обучение простым, score связывает denoising с градиентом плотности, guidance меняет соответствие и diversity. Schedule и sampler являются частью модели результата.

Задачи