Прямой процесс: зашумление

Урок объясняет первую половину диффузии — как из готовой картинки постепенно делают шум.

Прямой процесс (forward / зашумление) — постепенное добавление случайного шума к изображению, шаг за шагом, пока от картинки не останется ничего, кроме шума.

Зачем портить картинку

Звучит странно: чтобы научить модель создавать картинки, мы сначала учимся их разрушать. Но в этом и трюк. Прямой процесс — это не цель, а способ нагенерировать обучающие примеры: пары «чуть зашумлённая картинка» и «шум, который мы добавили». На таких парах модель потом научится действовать в обратную сторону.

Шаг за шагом к чистому шуму

На каждом шаге к картинке подмешивают немного гауссова шума. После одного шага она почти не меняется, после десяти — становится «зернистой», после сотен — превращается в бессмысленную рябь, неотличимую от случайного набора чисел. Схематично:

шаг 0    шаг 50    шаг 200   шаг 1000
[кот] -> [кот.] -> [к..t] -> [######]
чисто    немного   сильно    чистый
         шумно     шумно     шум
import random
random.seed(0)
signal = [10, 20, 30, 40]   # «картинка» из 4 чисел
print("Шаг 0:", signal)
for step in [1, 2, 3]:
    signal = [round(v + random.gauss(0, 8), 1) for v in signal]
    print("Шаг", step, ":", signal)

Вывод:

Шаг 0: [10, 20, 30, 40]
Шаг 1: [22.4, 23.1, 30.8, 40.4]
Шаг 2: [21.7, 16.5, 41.0, 36.3]
Шаг 3: [26.2, 21.1, 49.6, 35.8]

С каждым шагом исходный «сигнал» всё сильнее тонет в случайных колебаниях. Если шагов много, в итоге останется почти чистый шум.

Как работает под капотом

Математически прямой процесс — это фиксированная, заранее заданная последовательность: на каждом шаге картинка чуть «гасится» и к ней добавляется порция шума по известному расписанию (его называют noise schedule). Здесь нет обучения — всё детерминировано. Важное свойство: можно сразу получить картинку зашумлённой на любой шаг, не прогоняя все промежуточные. Это сильно ускоряет обучение.

Частые ошибки

  • Думать, что прямой процесс — часть генерации. Нет: при генерации он не используется, он нужен только для подготовки обучающих данных.
  • Считать, что шум добавляется «весь сразу». Он добавляется порциями по расписанию; именно постепенность делает обратную задачу решаемой.
  • Путать гауссов шум с «помехами на фото». Это математически чистый случайный шум, а не артефакт камеры.

Расписание шума

Сколько именно шума добавлять на каждом шаге, задаёт расписание (noise schedule). В начале шум подмешивают понемногу, ближе к концу — больше, чтобы к финалу картинка полностью растворилась. От формы этого расписания зависит, насколько «равномерно» сложно модели учиться на разных уровнях шума. Это инженерная деталь, но именно она во многом определяет итоговое качество модели.

Заметьте важную асимметрию: прямой процесс прост и не требует никакого интеллекта — это просто добавление случайных чисел по формуле. Вся сложность вынесена в обратный процесс, который и приходится учить нейросетью. Такое разделение «простое разрушение — сложное восстановление» и есть инженерная находка диффузии: мы превращаем неразрешимую задачу генерации в разрешимую задачу обращения известного процесса.

Итог

  • Прямой процесс пошагово превращает картинку в чистый шум, добавляя гауссов шум по расписанию.
  • Он не обучается и нужен лишь для подготовки обучающих пар «зашумлённое → добавленный шум».
  • Можно сразу зашумить картинку на любой шаг, не проходя все промежуточные.
Проверьте себя
1. Для чего нужен прямой процесс (зашумление)?
AЧтобы напрямую генерировать новые картинки
BЧтобы готовить обучающие пары: зашумлённая картинка и добавленный шум
CЧтобы сжать картинку в латентный код
DЧтобы ускорить декодер
2. Какое утверждение о прямом процессе верно?
AОн обучается на данных
BОн добавляет шум постепенно по заранее заданному расписанию
CОн превращает шум в картинку
DОн используется при генерации изображений