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)
Последовательность шагов выглядит так:
- Берётся одно и то же текущее состояние генерации.
- Считается безусловное предсказание
noise_pred_uncond. - Считается предсказание с текстовым условием
noise_pred_text. - Разница между ними умножается на
guidance_scale. - Полученное усиленное направление добавляется к безусловной базе.
В коде 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)
- Возьмите один и тот же входной пример в img2img и один и тот же текстовый промпт.
- Запустите генерацию с
guidance_scale = 1. По документации и коду это режим без classifier-free guidance. - Повторите запуск со значением
7.5— именно такое значение используется в документированном примере guider API. - Если нужно, попробуйте значение заметно выше. Сравнивайте не «красоту вообще», а два признака: насколько результат ближе к тексту и не появляется ли пересыщение или просадка качества.
Если вы хотите перебрать несколько значений подряд, такой эксперимент удобно сочетать с 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 и поведение модели.
Связанные термины и инструменты
- GAN (генеративно-состязательная сеть) — для сравнения разных классов генеративных моделей.
- Upscaling (апскейл) — частый следующий этап после генерации изображения.
- Batching (пакетная обработка) — полезно, если вы хотите быстро сравнить несколько значений
guidance_scale.
Источники
- Classifier-Free Diffusion Guidance
- Guiders · Hugging Face
- Guiders · Hugging Face
- diffusers/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py at main · huggingface/diffusers · GitHub
- Releases · huggingface/diffusers · GitHub
Вопросы и ответы
Что делает 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.