В четвёртой части «Путешествий Гулливера» разумные лошади знакомятся с человеком. Башмаки их особенно волнуют: зачем это существо носит на ногах отдельные съёмные ноги? Они ощупывают обувь, переговариваются, строят предположения. Человечество ещё не успело представиться, а его ботинки уже проходят философскую экспертизу.

Смотрим на схему генерации: сначала цветная рябь, потом из неё проступает лошадь. В сапогах. Диффузионные модели нейросетей создают изображения через последовательность преобразований шумного состояния. Классическую вероятностную диффузионную модель DDPM обучают на картинках с известным добавленным шумом: она учится его оценивать. Для генерации берут новый случайный шум и по обратной цепочке получают новую картинку.

Разберём оба направления на двух числах. Хватит калькулятора; устанавливать программу и обучать свою модель не нужно. В конце станет ясно, почему «убрать шум» ещё не означает «узнать, что было на фотографии».

Лошадь, которой раньше не было

Допустим, в субботу вы с дочкой придумываете картинку. Рыжая лошадь гуляет после дождя, на передних ногах зелёные сапоги. Дочка настаивает: сапоги должны быть огромными, иначе в лужу неинтересно. Вы добавляете в описание ромашки. Семейный художественный совет заканчивает работу и передаёт дело вычислениям.

Объясняя дочке процесс, вы рисуете цепочку: сначала рябь, затем коричневое пятно, ноги, трава, морда. «А она там всё время сидела?» — спрашивает дочка. В самом деле: будто из цветного снега откапывают готовую лошадь. Животное терпеливо ждало сапог, а мы мешали ему выйти.

При генерации с нуля готового исходного рисунка ещё нет. Есть начальный шум и обученная модель. Способ строить связные формы она освоила заранее. В текущей попытке получается новая картинка — с другим поворотом головы и своими травинками.

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

Прямой процесс: сначала устраиваем рисунку непогоду

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

Направление такое:

Известный рисунок → рисунок с помехами → сильные помехи → почти один шум.

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

Мы сами организовали непогоду и сохранили сведения о ней. Теперь можно попросить модель оценить добавленный шум, сравнить её ответ с известным и по ошибке поправить параметры. Начинается обучение.

В DDPM есть и короткий путь к упражнению: формула сразу даёт зашумлённое состояние выбранного уровня, без последовательного вычисления всех предыдущих. На ней построим наш расчёт. В первичной работе DDPM это формула 4.

Попросим помощника идти рядом

Если буквы в формулах сразу отбивают интерес, откройте текстовый чат DeepSeek. Можно продолжить и в ChatGPT или Claude, которыми уже пользуетесь. Вставьте в поле сообщения такую просьбу:

Хочу понять диффузионную модель на двух числах. Исходная пара [0,2; 0,8], выбранная добавка шума [0,5; −0,5], коэффициенты смешивания 0,8 и 0,6. Формула: новое = 0,8 × исходное + 0,6 × шум. Давай по одному действию и жди моего ответа. Сначала попроси меня посчитать первое число. Если ошибусь, покажи, где, и дай попробовать снова. Пока не показывай весь готовый расчёт и не переходи к программированию.

Первый полезный ответ — просьба вычислить 0,8 × 0,2 + 0,6 × 0,5. Посчитайте сами и отправьте результат. Так у вас появится собственная первая строка, которую можно проверить. Если помощник выдал всё сразу, попросите вернуться к одному действию.

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

Два числа вместо целой картинки

Возьмём исходный объект x₀ = [0,2; 0,8]. Добавку шума сами выберем равной ε = [0,5; −0,5]. Её значения заданы явно; случайную выборку в нашем упражнении не проводим.

Нужны ещё два коэффициента. В формуле DDPM это квадратные корни из накопленного коэффициента ᾱ и из 1 − ᾱ. Выбираем ᾱ = 0,64, получаем √0,64 = 0,8 и √0,36 = 0,6. Мы специально взяли числа, с которыми удобно считать.

Теперь зашумлённая пара:

xₜ = 0,8 × x₀ + 0,6 × ε.

Индекс 0 отмечает исходник, t — выбранный уровень зашумления, буква ε — шум. Для каждой позиции отдельно умножаем исходное число на 0,8, добавку на 0,6 и складываем.

Что считаем Первая позиция Вторая позиция
Исходное значение 0,2 0,8
Вклад исходника: умножаем на 0,8 0,16 0,64
Выбранный шум 0,5 −0,5
Вклад шума: умножаем на 0,6 0,30 −0,30
Складываем оба вклада 0,46 0,34

Получили xₜ = [0,46; 0,34]. Второе значение уменьшилось: там добавка отрицательная. У настоящего изображения чисел гораздо больше; мы оставили две позиции, чтобы ни одна операция не спряталась в толпе.

Коэффициенты не следует читать как «80% картинки и 60% шума» в смеси красок. Их сумма равна 1,4, зато квадраты складываются в единицу: 0,8² + 0,6² = 1. Так устроена выбранная формула гауссовского зашумления.

Мы вынули ответ из кармана

На минуту получим преимущество, которого нет у обученной модели: возьмём точный шум. Вычтем его вклад из нашей зашумлённой пары, затем разделим остаток на коэффициент исходника:

x₀ = (xₜ − 0,6 × ε) / 0,8.

Первая позиция: (0,46 − 0,30) / 0,8 = 0,2. Вторая: (0,34 − (−0,30)) / 0,8 = 0,8. Исходная пара вернулась. Можно бежать спасать испорченные фотографии?

Мы только что достали ответ из собственного кармана. Шум известен потому, что добавляли его сами. Модель получает зашумлённое состояние и должна выдать оценку неизвестной добавки. В её кармане лежат обученные параметры. Записки «к этой лошади сегодня подмешали вот такие числа» там нет.

Теперь подставим две другие оценки: почти верную [0,4; −0,4] и совсем простую [0; 0]. Считаем по тому же правилу.

Какую оценку шума подставили Первая восстановленная позиция Вторая восстановленная позиция
Точную [0,5; −0,5] 0,2 0,8
Близкую [0,4; −0,4] 0,275 0,725
Нулевую [0; 0] 0,575 0,425

В средней строке первая позиция равна (0,46 − 0,6 × 0,4) / 0,8 = 0,275. Видно, как неточная оценка шума сдвигает результат. У нулевой оценки ответ тоже получается ровный, с тремя знаками после запятой. Такой ответ легко напечатать на бланке и заверить печатью. До исходных значений печать его не довезёт.

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

На тренировке ошибку есть с чем сравнить

Вернёмся на сторону обучения. Берут исходное изображение, выбирают уровень и случайный шум, получают зашумлённое состояние. Модель видит это состояние и номер уровня, предсказывает шум. Предсказание сравнивают с добавкой, которую действительно использовали. По ошибке обновляют параметры и повторяют упражнение на других примерах.

На разных уровнях задача разная. Почти целая морда и коричневая пыль дают разную опору. Номер уровня сообщает, при какой степени зашумления сейчас требуется оценка. В разобранном DDPM для разных уровней используют общие параметры модели; номер уровня поступает ей как дополнительная информация.

Так возникает навык, который пригодится при генерации. Во время исполнения вашей просьбы модель уже обучена. Она применяет параметры к текущему состоянию и условиям запроса.

Здесь легко спутать два счётчика. Шаг создания картинки относится к обратной цепочке. Эпоха обучения — к проходу по учебным примерам. Если генератор выполнил двадцать переходов, он от этого не прошёл двадцать раз весь учебный набор. Разложить второй счёт отдельно помогает статья об эпохах, пачках и шагах обучения.

Диффузионные модели нейросетей: новая лошадь выходит из ряби

Теперь у модели за плечами обучение. Для новой генерации берут новое начальное шумное состояние. Модель оценивает, как его менять на текущем уровне, алгоритм получает следующий уровень и снова обращается к модели. Постепенно возникает связное изображение:

Новый шум → промежуточное состояние → другое промежуточное состояние → новая картинка.

Лошадь из учебного рисунка в эту цепочку не прячут. Когда дочка спрашивает, сидела ли она в ряби с самого начала, можно ответить: «Мы дали начало и пожелание, а рисунок складывается по ходу».

У базового DDPM текст вообще не обязателен. Генерация по описанию требует модели, которая поддерживает такое условие. Например, текст влияет на предлагаемые преобразования на этапах цепочки. Для соответствующей условной модели слова «рыжая лошадь в зелёных сапогах» помогают направлять построение картинки.

Три вещи делают разную работу. Условие задаёт, к чему стремиться. Шум даёт исходную случайность. Обученные параметры позволяют строить изображения с освоенными закономерностями. Изменить описание, взять другое начальное состояние и заново обучить параметры — три отдельных действия.

Промежуточный кадр может ещё менять и крупные очертания, и детали. На первой кляксе рано решать, что у лошади характер дедушки. Дождитесь результата, затем посмотрите, остались ли в нём ваш замысел, четыре ноги и два сапога.

Подробно оба направления разобраны в учебнике Яндекса. Мы держимся классической схемы: у других моделей и способов генерации могут отличаться представление изображения, предсказываемая величина и выбор переходов.

У новой картинки и старой фотографии разные вопросы

Дочке понравилась лошадь, которая высоко поднимает передние ноги: сапоги будто ей велики. Вы можете оставить именно этот смешной вариант. До генерации такой картинки в семейном альбоме не было, и искать единственно верную прошлую лошадь незачем.

Теперь представим другой лист на столе — старый снимок, где повреждена часть лица. Тут уже хочется сохранить конкретного человека. Удачная дорисовка может выглядеть убедительно, но вопрос «похоже ли на нашего дедушку?» потребует сохранившихся снимков и знакомых черт. Механизм построения правдоподобного изображения сам по себе такой справки не выдаёт.

Наша пара показывает причину без фотографии: одинаковое зашумлённое состояние [0,46; 0,34] получилось бы из разных исходников при разных добавках. Например, нулевой шум вместе с исходником [0,575; 0,425] тоже даёт эти числа после умножения на 0,8. По одному результату смешивания мы не узнали, какую из этих историй выбрали.

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

Разумные лошади Свифта могут составить по башмаку прекрасный портрет его хозяина. Дописать ему привычки, любимую лужу и тяжёлое детство. Где он ходил вчера, всё-таки придётся спросить у Гулливера.

Вопросы и ответы

Диффузионная модель — любая нейросеть для картинок?

Это определённое семейство генеративных моделей; изображения создают и другими способами. Наш расчёт объясняет DDPM. По одному слову «нейросеть» устройство сервиса не определить.

Почему нельзя одним действием вычесть весь шум?

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

Шаг генерации — то же самое, что эпоха?

Шаг генерации меняет текущее состояние создаваемого результата. Эпоха относится к проходу по обучающему набору. Двадцать шагов генерации не означают двадцать эпох обучения.

Больше шагов всегда означает лучший рисунок?

Число шагов выбирают вместе с моделью и алгоритмом переходов. Само число не объясняет, почему сапоги оказались на ушах. Для своей картинки проверьте предметы, композицию и детали, затем меняйте подходящий параметр или описание.

Любой чат показывает промежуточные состояния?

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

Заберите объяснение себе

Закройте таблицы и попросите помощника:

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

Если в ответе опять смешались тренировка и создание картинки, вернитесь к двум цепочкам. Если смысл ясен, а в калькуляторе вышло другое число, пришлите помощнику свою строку целиком: так он сможет найти потерянный минус. Это две разные заминки, и помощь для них нужна разная.

Останется ваш небольшой результат: пара [0,46; 0,34], три обратных расчёта и объяснение, почему только один из них вернул заданный исходник. Для следующего разговора о картинках этого уже хватает. А если хочется самим перейти от понимания к рисунку, попробуйте придумать аватарку по описанию и сохранить выбранный файл.

Свой непонятный фрагмент урока или замысел картинки можно принести в практику первых задач с ИИ. В «Первопроходцах» можно спросить обычными словами, показать попытку, разобраться и развить собственную идею. Для этого у вас уже есть точный вопрос и пройденный маленький путь.

А на семейном рисунке лошадь всё-таки получила огромные сапоги. Дочка довольна. Философская комиссия из страны Гулливера, вероятно, попросит прислать обувь отдельно.