COMRAD404 / GLOSSARY

CFG (Classifier-Free Guidance)

Classifier-Free Guidance

CFG (Classifier-Free Guidance) — способ направлять генерацию в diffusion-моделях без отдельного classifier. Ниже — простое объяснение, формула из Diffusers, роль guidance_scale, отличия и ограничения.

TL;DR

Метод guidance для diffusion-моделей, который смешивает безусловное и условное предсказания, чтобы сильнее привязывать результат к промпту без отдельного classifier.

CFG (Classifier-Free Guidance) — это способ управлять генерацией в diffusion-моделях без отдельного классификатора. Во время инференса он сочетает безусловное и зависящее от промпта предсказания, а параметр guidance_scale позволяет менять баланс между следованием запросу и разнообразием результата; в актуальной документации Hugging Face Diffusers по состоянию на 2026-08-14 это guider по умолчанию.

Английский термин: classifier-free guidance. Также встречается: CFG; Classifier-Free Diffusion Guidance — так называется оригинальная статья Ho и Salimans.

Простыми словами

Грубо говоря, CFG можно представить как работу с двумя черновиками одного и того же изображения. Первый черновик отвечает на вопрос «что модель сгенерировала бы вообще», а второй — «что она сгенерировала бы с учётом вашего текста». Дальше система усиливает разницу между ними настолько, насколько вы ей разрешите.

Если усиление маленькое, результат обычно свободнее и разнообразнее. Если усиление большое, модель сильнее тянется к промпту, но может «пережать» картинку. Именно поэтому CFG — не магическая кнопка качества, а регулятор направления.

Как это работает

Каноническое описание CFG дано в статье Classifier-Free Diffusion Guidance. В ней предлагается обучать условную и безусловную diffusion-модели и во время инференса комбинировать их score estimates, чтобы получать компромисс между качеством выборок и их разнообразием без отдельного classifier.

В практической реализации Diffusers та же идея часто выражается через предсказание шума. Для одного и того же шага денойзинга пайплайн получает два предсказания: безусловное и текстово-условное, после чего объединяет их по формуле из кода Stable Diffusion img2img.

latent x_t
├─ без условия ─────────────→ noise_pred_uncond
├─ с текстовым условием ───→ noise_pred_text
└─ разница ────────────────→ noise_pred_text - noise_pred_uncond

итоговое предсказание:
noise_pred = noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond)

Последовательность шагов выглядит так:

  1. Берётся одно и то же текущее состояние генерации.
  2. Считается безусловное предсказание noise_pred_uncond.
  3. Считается предсказание с текстовым условием noise_pred_text.
  4. Разница между ними умножается на guidance_scale.
  5. Полученное усиленное направление добавляется к безусловной базе.

В коде Diffusers для Stable Diffusion img2img это записано как noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond). Там же указано, что guidance_scale = 1 означает отсутствие classifier-free guidance. В API-документации Diffusers описано, что guidance_scale управляет силой CFG; в показанном примере guider создаётся со значением 7.5; более высокие значения улучшают следование промпту, но повышают риск пересыщения и снижения качества изображения.

Где применяется

  • В image generation пайплайнах на базе diffusion. Самый конкретный пример из источников — реализация Stable Diffusion img2img в Diffusers, где CFG встроен прямо в вычисление итогового предсказания шума.
  • В текущем modular workflow Diffusers. В документации указано, что classifier-free guidance — guider по умолчанию. Его можно проверить через get_component_spec("guider"), а при необходимости заменить через update_components().
  • При настройке степени следования промпту. На практике именно guidance_scale обычно становится первым регулятором, когда вы хотите понять, почему модель слишком вольно трактует текст или, наоборот, начинает давать пересыщённый результат.
  • В новых вариациях конкретных пайплайнов. На странице релизов Diffusers по состоянию на 2026-08-14 последним релизом был v0.39.0; в заметках были упомянуты CFG-related изменения, включая asymmetric classifier-free guidance для Ideogram 4 и связанные исправления. Это важный сигнал: общий термин один, но реализация может отличаться от пайплайна к пайплайну.

Практический пример

Ниже — простой сценарий, который позволяет увидеть, что делает CFG, не выходя за пределы подтверждённых источников. Он опирается на поведение guidance_scale, зафиксированное в документации и коде Diffusers.

noise_pred = noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond)
  1. Возьмите один и тот же входной пример в img2img и один и тот же текстовый промпт.
  2. Запустите генерацию с guidance_scale = 1. По документации и коду это режим без classifier-free guidance.
  3. Повторите запуск со значением 7.5 — именно такое значение используется в документированном примере guider API.
  4. Если нужно, попробуйте значение заметно выше. Сравнивайте не «красоту вообще», а два признака: насколько результат ближе к тексту и не появляется ли пересыщение или просадка качества.

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

Чем отличается от…

Термин Что это Главное отличие от CFG Практическая пометка
Classifier guidance Наведение с отдельным classifier CFG был предложен именно как способ обойтись без отдельного classifier Если в описании метода нужен внешний classifier, это уже не классический classifier-free guidance
guidance_scale Параметр силы наведения CFG — сам метод комбинирования предсказаний; guidance_scale — регулятор его силы guidance_scale = 1 означает отсутствие CFG; большие значения сильнее привязывают результат к промпту, но могут ухудшать изображение
Asymmetric CFG Поздняя вариация, упомянутая в релизах Diffusers Классический CFG задаётся канонической формулой из статьи и типовой реализацией в коде; asymmetric CFG — pipeline-specific вариант Точные детали нужно проверять в документации или коде конкретной модели

Если вы сравниваете более широкие классы генеративных подходов, полезно также посмотреть на GAN: это другой тип генеративной архитектуры, и CFG к нему напрямую не относится.

Ограничения и заблуждения

  • Заблуждение: «CFG — это отдельная модель». Нет. В текущих источниках это метод guidance и соответствующий guider, а не самостоятельный класс модели.
  • Заблуждение: «чем выше guidance_scale, тем лучше». Официальная документация Diffusers прямо предупреждает: большие значения улучшают следование промпту ценой риска saturation и снижения качества изображения.
  • Заблуждение: «CFG везде работает одинаково». В исходном пакете источников отдельно отмечено ограничение: точное поведение зависит от diffusion-, multimodal- и flow-matching-пайплайнов; некоторые новые модели используют asymmetric или иные модифицированные варианты guidance.
  • Ограничение по актуальности. Страница релизов динамическая. Если вам важны изменения после 2026-08-14, их нужно перепроверить по официальным заметкам Diffusers.

Редакционное ограничение: эта статья опирается на оригинальную работу Ho и Salimans, актуальную документацию Hugging Face Diffusers и один референсный pipeline-код. Другие библиотеки и модели могут использовать тот же термин, но реализовывать его иначе.

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

Связанные термины и инструменты

Источники

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

Что делает guidance_scale в CFG?

Это параметр силы classifier-free guidance. В документации Diffusers сказано, что он управляет степенью следования промпту: большие значения обычно усиливают adherence, но повышают риск saturation и потери качества.

guidance_scale = 1 — это отключённый CFG?

Да, именно так это описано в коде и docstring Stable Diffusion img2img pipeline в Diffusers: при guidance_scale = 1 classifier-free guidance не используется.

Нужен ли для CFG отдельный classifier?

Нет. В этом и состоит ключевая идея оригинальной статьи: получить guidance без отдельного classifier, комбинируя условное и безусловное предсказания.

Почему слишком высокий CFG может ухудшить изображение?

Потому что официальная документация Diffusers предупреждает о компромиссе: более высокие значения могут лучше привязывать результат к тексту, но при этом вызывать пересыщение и снижать качество изображения.

Одинаков ли CFG во всех пайплайнах?

Нет. Источники прямо указывают, что поведение зависит от конкретного diffusion-, multimodal- или flow-matching-пайплайна, а в релизах Diffusers уже встречаются модификации вроде asymmetric classifier-free guidance.

Источники

SOURCES

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

FAQ
Что делает guidance_scale в CFG?

Это параметр силы classifier-free guidance. В документации Diffusers сказано, что он управляет степенью следования промпту: большие значения обычно усиливают adherence, но повышают риск saturation и потери качества.

guidance_scale = 1 — это отключённый CFG?

Да. В коде и docstring Stable Diffusion img2img pipeline в Diffusers указано, что при guidance_scale = 1 classifier-free guidance не используется.

Нужен ли для CFG отдельный classifier?

Нет. Ключевая идея оригинальной статьи — получить guidance без отдельного classifier, комбинируя условное и безусловное предсказания.

Почему слишком высокий CFG может ухудшить изображение?

Официальная документация Diffusers предупреждает о компромиссе: более высокие значения могут лучше привязывать результат к тексту, но при этом вызывать пересыщение и снижать качество изображения.

Одинаков ли CFG во всех пайплайнах?

Нет. Поведение зависит от конкретного diffusion-, multimodal- или flow-matching-пайплайна; в релизах Diffusers уже упоминаются модификации вроде asymmetric classifier-free guidance.

Читайте также

LINKS