Noise Schedule
noise schedule — соответствие времени процесса и уровня шума
Noise schedule задаёт, какой уровень сигнала и шума соответствует каждому моменту диффузионного процесса. При генерации sampler идёт по выбранным точкам этой шкалы, но правило перехода и само расписание — не одно и то же.
Коротко
Noise schedule — это шкала уровней шума во времени. Она связывает момент
tс тем, сколько исходного сигнала и случайного шума содержит состояние модели. При генерации выбирается последовательность точек на этой шкале, а sampler определяет, как переходить между ними.
У термина есть два близких контекста. В обучении расписание описывает, как зашумляются данные. В генерации им могут называть последовательность t или sigma, по которой идёт обратный процесс. Эти последовательности связаны, но не всегда совпадают буквально: генерация часто использует меньше точек и другую дискретизацию.
Что задаёт расписание при обучении
В классическом DDPM прямой процесс понемногу добавляет к изображению гауссов шум. На шаге t величина β_t задаёт дисперсию новой порции шума:
x_t = sqrt(1 - β_t) · x_(t-1) + sqrt(β_t) · ε
Здесь ε — случайный гауссов шум. Удобно ввести:
α_t = 1 - β_t
ᾱ_t = α_1 · α_2 · ... · α_t
Тогда состояние в любой момент можно получить сразу из чистого примера x_0:
x_t = sqrt(ᾱ_t) · x_0 + sqrt(1 - ᾱ_t) · ε
Первая часть сохраняет сигнал, вторая добавляет шум. Последовательность β_t, а значит и ᾱ_t, определяет, как быстро изображение теряет информацию. Эту конструкцию описывает работа DDPM.
Это не обязательно видимый «снег» на пикселях. Многие модели работают в latent-пространстве, и шум добавляется к скрытому представлению. Фотопластины на инфографике — лишь понятная метафора изменения отношения сигнал/шум.
Beta, sigma и SNR говорят об одной шкале с разных сторон
Расписание можно записать несколькими способами:
β_t— сколько новой дисперсии добавляется на дискретном шаге;ᾱ_t— какая доля исходного сигнала сохранилась;σ_t— масштаб шума в выбранной параметризации;SNR_t— отношение мощности сигнала к мощности шума;logSNR_t— логарифмическая форма того же отношения.
Поэтому noise schedule не всегда является «списком sigma». Два кода могут описывать близкий процесс разными переменными и нумерацией времени. Сравнивать отдельные числа без формулы преобразования рискованно.
Высокий SNR означает, что состояние ещё хорошо хранит исходный сигнал. Низкий SNR — что преобладает шум. В некоторых соглашениях большое значение t соответствует большему шуму, в других непрерывное время или sigma ориентированы иначе. Направление массива лучше проверять по документации, а не угадывать по индексу.
Schedule, steps и sampler — разные части
Инфографика разделяет их на три короткие строки:
| Понятие | На какой вопрос отвечает |
|---|---|
| Schedule | Какие уровни шума существуют и где они находятся во времени? |
| Steps | Сколько точек обратного пути используется в этом запуске? |
| Sampler / solver | По какому численному правилу перейти между соседними выбранными точками? |
Допустим, модель обучалась на большой дискретной шкале времени. Для генерации не обязательно посещать каждую её точку. Scheduler может выбрать более короткую последовательность, а solver — оценивать переходы по прогнозам модели.
Число steps тоже не всегда равно числу обращений к нейросети. Одному алгоритму достаточно одного прогноза на переход, другому нужны дополнительные оценки. Для скорости и стоимости точнее смотреть на число вычислений модели — NFE, если инструмент его показывает.
Почему слова schedule и scheduler путаются
Единого бытового словаря нет. В одной программе scheduler означает весь объект, который хранит временную сетку и выполняет обновление sample. В другой schedule — отдельный список sigma, а sampler выбирается отдельно. Третья программа объединяет оба названия в один пресет.
Поэтому название из выпадающего списка не всегда переносится в другой интерфейс один к одному. Важно выяснить, что скрывается внутри:
- только последовательность уровней;
- только правило численного решения;
- сочетание обоих компонентов;
- дополнительные настройки вроде spacing, prediction type или добавочного шума.
Именно из-за этого две программы с одинаковыми словами «sampler» и «steps» могут дать разные результаты при одном seed.
Формы расписаний
У расписания нет единственного обязательного вида. На практике встречаются, например:
- линейное изменение
β_t; - кривая, заданная через cosine-профиль
ᾱ_t; - равномерные точки по времени;
- равномерные точки по sigma или logSNR;
- нелинейные дискретизации, которые плотнее размещают точки в выбранной части шкалы.
Cosine schedule было подробно исследовано в Improved Denoising Diffusion Probabilistic Models: авторы показали, что форма убывания сигнала влияет на то, сколько полезной информации остаётся на разных шагах обучения.
Названия вроде linear, cosine или Karras описывают математическую идею или способ расстановки точек, а не готовый рейтинг качества. Одинаковое имя в двух реализациях тоже не гарантирует одинаковые границы, количество точек и преобразование времени.
Расписание обучения и сетка генерации должны понимать друг друга
Модель учится делать прогноз при определённых уровнях шума и в определённой параметризации цели. Это может быть прогноз шума, чистого sample, velocity или другой величины. Scheduler при генерации должен правильно интерпретировать этот прогноз.
Для совместимости важны:
- шкала времени и её конечные точки;
- тип прогнозируемой величины;
- преобразование между
t,sigma,alphaи SNR; - начальный уровень шума;
- порядок и spacing выбранных точек;
- правило solver и его предположения о процессе.
Простая замена schedule иногда работает, потому что библиотека корректно преобразует конфигурацию. Иногда она создаёт несогласованный процесс. Поэтому конфигурация scheduler — часть описания модели, а не случайный декоративный пресет.
Отдельный пример — terminal SNR. В работе Common Diffusion Noise Schedules and Sample Steps are Flawed показано, что ненулевой остаточный сигнал в конечной точке и старт sampling не с последнего timestep создают рассогласование между обучением и генерацией. Это не означает, что одну универсальную галочку можно безопасно включить для любой готовой модели: предложенные изменения связаны также с prediction type и способом sampling.
Что ещё влияет на обучение на разных уровнях шума
Одна кривая не описывает всю тренировку. Важны ещё как минимум две вещи:
- Распределение timestep. Одни уровни могут выбираться чаще других.
- Вес loss. Ошибки на разных SNR могут иметь разный вклад в итоговый градиент.
Две тренировки с одинаковым noise schedule, но разным sampling timestep или weighting loss получают разную учебную нагрузку. Поэтому вывод «эта модель обучалась на cosine, значит любой cosine scheduler будет лучшим» слишком сильный.
Почему один seed даёт другую картинку
Seed воспроизводит начальную случайность при совпадающем вычислительном пути. Если изменить временную сетку, модель получает запросы на других уровнях шума, а solver проходит по другой траектории. При стохастическом sampler может измениться и то, где добавляется новая случайность.
Поэтому тот же seed после смены schedule не обязан сохранять композицию. Это не ошибка воспроизводимости: изменился сам алгоритм генерации.
Для сравнения расписаний полезна небольшая сетка из нескольких seed и разных сюжетов. Один кадр легко оказывается удачным случайно. Параметры модели, prompt, sampler и число вычислений при таком сравнении остаются одинаковыми — насколько это позволяет интерфейс.
С чем часто путают
- Noise schedule и количество шума в исходной картинке. Schedule описывает весь путь, а не один параметр denoise strength.
- Schedule и sampler. Первый задаёт уровни, второй — правило перехода.
- Steps и training timesteps. Короткая генерация может использовать небольшое подмножество большой обучающей шкалы.
- Sigma и номер шага. Sigma — уровень в выбранной параметризации; индекс — лишь позиция в массиве.
- Scheduler config и веса модели. Конфигурация обычно не является обученными весами, но должна соответствовать тому, как веса учились делать прогноз.
- Noise schedule и learning-rate schedule. Первое относится к уровню шума в данных, второе — к размеру обновления параметров при обучении.
Частые вопросы
Какое расписание лучше?
Универсального ответа нет. Результат зависит от обучения модели, prediction type, solver, числа вычислений и задачи. Практичной отправной точкой служит конфигурация, опубликованная вместе с моделью.
Чем schedule отличается от sigmas?
Sigmas — один из способов представить или дискретизировать уровни шума. В конкретном инструменте список sigmas может и быть sampling schedule. Но в теории расписание также задают через beta, alpha, SNR или непрерывное время.
Больше steps исправляет плохое расписание?
Не обязательно. Дополнительные точки уменьшают шаг численного решения, но не исправляют неверные конечные условия, несовместимый prediction type или ошибочное преобразование времени.
Schedule влияет на скорость?
При одинаковом числе обращений к модели сама форма списка обычно почти не меняет стоимость. Но два пресета могут скрывать разные solver, дополнительные оценки или другое число фактических вычислений, поэтому сравнивать лучше по NFE и времени всего запуска.
Можно ли нарисовать своё расписание?
Да, если инструмент принимает пользовательские timesteps или sigmas и выбранный solver совместим с ними. Произвольный монотонный список не гарантирует корректный результат: важны границы, направление, параметризация и обучение модели.
Главное
Noise schedule связывает время диффузионного процесса с уровнем сигнала и шума. В обучении оно задаёт зашумление примеров; при генерации scheduler выбирает совместимую последовательность уровней, а sampler или solver выполняет переходы.
Кривая, число шагов и правило перехода — три разных настройки. Их полезно оценивать вместе с конфигурацией обучения, потому что совместимость важнее названия «лучшего» schedule.