Latent Space

latent space — внутреннее представление данных в модели

Раздел
Генеративные модели
Обновлено
22.10.26

Латентное пространство — внутреннее представление данных в модели. В латентной диффузии генерация идёт в компактном числовом массиве, а декодер превращает его в пиксели. Разберём этот путь на изображении.

Коротко

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

В latent diffusion основная работа происходит не с RGB-пикселями полного разрешения. При редактировании VAE кодирует исходник в компактное представление. Модель меняет латент на разных уровнях шума, а декодер VAE собирает из результата изображение. При генерации по тексту этап кодирования исходника не нужен.

Слово space не означает, что внутри обязательно есть наглядная карта с осями «цвет», «стиль» и «улыбка». Координаты и каналы выучены совместно и обычно не имеют простых человеческих названий.

Что называют latent space

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

У термина есть два близких значения:

  • Латентное представление (latent representation) — конкретное внутреннее представление одного объекта;
  • Латентное пространство (latent space) — множество представлений, которые допускает выбранная модель.

В других архитектурах латентной переменной могут называть и случайный вход генератора. Здесь дальше речь именно о представлении изображения в латентной диффузии.

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

Latent в генерации изображений

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

Упрощённый путь изображения выглядит так:

пиксели → VAE Encode → пространственный латент → VAE Decode → пиксели

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

Отсюда появляется компромисс. Сильное сжатие экономит вычисления, но декодеру сложнее сохранить мелкий текст, тонкие линии и едва заметные фактуры. Слабое сжатие оставляет больше данных, но увеличивает тензор и стоимость работы denoiser.

Что делает latent diffusion

Latent Diffusion Models перенесли диффузионный процесс из пространства пикселей в выученное представление автоэнкодера. Благодаря этому основная модель (denoiser) работает с меньшей пространственной сеткой, а не с каждым RGB-значением исходного кадра.

При генерации по тексту изображение и текстовое условие проходят разные этапы:

  1. Задаётся форма пустого latent-контейнера.
  2. Генератор создаёт шум той же формы по seed.
  3. Текстовый энкодер превращает промпт в числовое условие — conditioning.
  4. Модель удаления шума — denoiser — последовательно меняет зашумлённый латент с учётом этого условия.
  5. Декодер VAE переводит итоговый латент в пиксели.

В обычной схеме Stable Diffusion текстовое условие поступает отдельно от тензора изображения. Это отдельный сигнал, который модель получает вместе с текущим noisy latent и уровнем шума.

Для image-to-image путь начинается иначе: исходное изображение сначала кодируется VAE. Затем к его latent добавляется шум выбранного уровня, после чего sampling строит новую версию. Так сохраняется часть пространственной структуры, хотя буквальное совпадение пикселей не обещается.

Пустой latent — не случайный шум

В ComfyUI узел Empty Latent Image создаёт нулевой тензор заданной формы для нужного числа изображений. Название может создать впечатление, будто узел уже генерирует шум, но это разные операции.

В обычном KSampler шум создаётся по seed внутри sampling-пути. В модульной схеме для него есть отдельный объект NOISE, например от RandomNoise. Благодаря такому разделению один и тот же контейнер можно использовать без добавления нового шума, продолжить прерванный маршрут генерации или подать закодированный латент от VAE.

Это различие особенно заметно в KSampler Advanced, где параметры add_noise и диапазон шагов управляются отдельно. Пустая форма, случайные samples и noisy latent — три разных состояния.

Почему нет одного размера latent

Форма внутреннего представления является частью архитектуры. Для разных моделей меняются:

  • пространственный коэффициент сжатия;
  • число каналов;
  • масштаб и сдвиг, применяемые к значениям;
  • число измерений — изображение, последовательность, видео;
  • упаковка данных и порядок осей;
  • статистика, на которой обучен decoder.

У пространственного image latent приблизительное соотношение можно записать так:

latent height ≈ image height / spatial downscale
latent width  ≈ image width  / spatial downscale

Число каналов и точные правила берутся из формата конкретной модели. В актуальном коде ComfyUI класс LatentFormat хранит эти параметры отдельно для разных семейств. Там встречаются двухмерные, трёхмерные и одномерные представления, разные коэффициенты масштаба и разные способы подготовки входа.

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

Когда латенты разных моделей несовместимы

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

Совместимость требует совпадения всех правил представления:

  • формы и порядка измерений;
  • нормализации, масштаба и сдвига;
  • способа упаковки;
  • VAE или другого кодека;
  • ожиданий denoiser и decoder.

Если подать latent от одной системы в неподходящий decoder, результатом обычно станет шум, сильные искажения или ошибка формы. Даже VAE с тем же числом каналов не становится автоматически взаимозаменяемым. Проверка этой части графа показана в разборе серой картинки и ошибок VAE в ComfyUI.

Каналы не подписаны человеческими признаками

Иногда latent объясняют как набор отдельных слоёв: один отвечает за цвет, другой за контраст, третий за форму. Это удобный рисунок, но не точное описание.

Признаки распределены. Один канал может участвовать сразу в нескольких свойствах, а нужная деталь определяется сочетанием значений в разных каналах и соседних позициях. Каналы VAE-латента при этом не стоит смешивать с каналами промежуточных слоёв основной генеративной модели: это разные представления.

Быстрое цветное превью латента получается из приближённого преобразования каналов. Оно показывает общую композицию во время генерации, но не заменяет полноценное декодирование и не раскрывает «настоящие цвета» каждого канала.

Latent и текстовый embedding

Оба объекта являются внутренними представлениями, но служат разным задачам.

  • Image latent хранит пространственное состояние генерируемого или закодированного кадра.
  • Текстовый эмбеддинг и conditioning описывают текстовый сигнал и служебные параметры, которыми направляют denoiser.

Фраза «у модели два latent space» возможна в широком математическом смысле, но в workflow она стирает важную границу. В ComfyUI эти данные имеют разные типы — LATENT и CONDITIONING — и подключаются к разным входам.

CLIP, T5 и другие текстовые энкодеры тоже создают embeddings. Их длина, размерность и объединённые представления всего текста зависят от архитектуры; эти числа не определяют форму image latent.

Можно ли двигаться по latent space

Интерполяция между двумя представлениями вычисляет промежуточные значения. Она действительно может дать плавную последовательность, если decoder разумно восстанавливает весь путь между концами.

Но слово «плавная» требует уточнения:

  • числовое изменение может быть плавным, а объект — двоиться или ломаться;
  • прямая линия способна пройти через область, на которой модель почти не обучалась;
  • линейная интерполяция и сферическая интерполяция дают разные траектории;
  • смешивание готовых изображений, VAE-латентов, стартового шума и текстовых условий — разные операции;
  • независимое декодирование кадров не создаёт временную согласованность.

Поэтому latent interpolation не является универсальным способом сделать видео. Для устойчивого движения обычно нужны модель с учётом времени, согласованный шум, контроль оптического потока или другие механизмы, которые согласуют соседние кадры. Как отдельная видеомодель работает с кадром и звуком, показано в разборах LTX и MiniMax H3.

Seed и расстояние в пространстве

Близкие номера seed не означают близкие точки. Seed инициализирует псевдослучайный генератор; значения 123 и 124 обычно создают сильно различающиеся массивы псевдослучайного шума.

«Соседнюю вариацию» получают не прибавлением единицы, а управляемым смешиванием шума, conditioning или latent при фиксированном workflow. И даже тогда близость по обычной евклидовой метрике не гарантирует одинаковое восприятие: полезная геометрия зависит от того, как пространство выучено.

Latent upscale

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

Операция не восстанавливает информацию, которой не было в исходном latent. Она создаёт больше позиций для следующего прохода модели. Качество зависит от метода масштабирования, denoise, модели, VAE и того, насколько новое разрешение соответствует её обучению.

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

Latent в ComfyUI

Тип LATENT в ComfyUI — не обязательно только тензор. Основное поле называется samples, но структура может содержать noise_mask, batch_index и другие данные, нужные следующим узлам.

Базовые операции выглядят так:

  • Empty Latent Image создаёт контейнер нужной формы;
  • VAE Encode переводит пиксели в latent samples;
  • KSampler или модульный sampler меняет latent по noise schedule;
  • VAE Decode берёт поле samples и возвращает IMAGE;
  • latent composite, crop и upscale меняют внутреннюю пространственную сетку.

Некоторые модели используют собственные empty-latent или encode/decode-узлы. Это не косметическое различие: универсальный четырёхканальный контейнер не подходит архитектуре только потому, что интерфейс называет оба выхода LATENT.

С чем часто путают

  • Latent и пиксели — latent требует совместимого decoder; пиксели уже имеют значения каналов изображения.
  • Latent и noise — noise можно добавить к latent, но это не одно и то же.
  • Latent и conditioning — первый хранит состояние генерируемых данных, второе направляет модель.
  • Latent и embedding — embedding является общим названием представления; в workflow так чаще называют выход энкодера условия.
  • Latent space и feature map — понятия пересекаются, но не являются синонимами во всех архитектурах.
  • Размер latent и качество — больше каналов или позиций само по себе не делает модель лучше.

Частые вопросы

Latent — это сжатая картинка?

В image VAE это полезное первое приближение. Точнее — выученное пространственное представление изображения. Оно компактнее пикселей, но decoder реконструирует кадр, а не распаковывает архив без потерь.

Почему latent нельзя открыть в Photoshop?

Photoshop ожидает пиксельные каналы с известной цветовой моделью. У latent другие каналы, масштаб и статистика. Нужен совместимый декодер VAE или специальный приближённый просмотр.

Empty Latent Image создаёт шум?

Нет. Узел задаёт нулевые значения, форму и число изображений в пакете. Шум по seed создаёт sampling-слой или отдельный noise-узел.

Чем latent diffusion отличается от pixel diffusion?

Местом основного диффузионного процесса. Latent diffusion работает в представлении кодека и декодирует результат в конце. Pixel diffusion применяет процесс непосредственно к пиксельному или близкому к нему пространству.

Можно ли перенести latent из одной модели в другую?

Только если модели явно разделяют совместимый формат, нормализацию и decoder. Совпадения разрешения и числа каналов недостаточно.

Интерполяция двух latent всегда даёт красивый промежуточный кадр?

Нет. Числа меняются непрерывно, но decoder может показать двоение, потерю формы или другие переходные артефакты. Результат зависит от концов, траектории и обученного пространства.

Почему изображение отличается от исходника после VAE Encode и Decode?

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

Главное

Latent space — внутреннее пространство представлений, а image latent — конкретное состояние кадра в этом пространстве. В latent diffusion VAE связывает пиксели с компактным пространственным тензором, denoiser работает с его зашумлёнными версиями, а текст приходит отдельным conditioning-сигналом.

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

Источники