Latent Space
latent space — внутреннее представление данных в модели
Latent space — внутреннее пространство представлений, с которым работает модель. В latent diffusion изображение обычно кодируется в компактный пространственный тензор, denoiser меняет его за несколько шагов, а декодер возвращает пиксели. Шум и текстовый conditioning при этом остаются отдельными сигналами, а форма latent зависит от архитектуры.
Коротко
Latent space — пространство внутренних представлений модели. В генерации изображений словом latent чаще называют компактный тензор, который кодирует структуру кадра в форме, удобной для нейросети. Это не готовая картинка, не текстовый embedding и не сам случайный шум.
В latent diffusion основная работа происходит не с RGB-пикселями полного разрешения. VAE переводит изображение в более компактное представление, denoiser меняет его на разных уровнях шума, а VAE decoder собирает из результата изображение.
Слово space не означает, что внутри обязательно есть наглядная карта с осями «цвет», «стиль» и «улыбка». Координаты и каналы выучены совместно и обычно не имеют простых человеческих названий.
Что называют latent space
Скрытой, или латентной, называют переменную, которая не наблюдается напрямую, но помогает модели описывать данные. В вариационном автоэнкодере encoder сопоставляет объекту распределение скрытых переменных, а decoder восстанавливает из выборки приближение исходного объекта.
У термина есть два близких значения:
- latent representation — конкретное внутреннее представление одного объекта;
- latent space — множество представлений, которые допускает выбранная модель.
В разговоре их часто сокращают до слова «латент». Значение определяется контекстом: это может быть компактное представление изображения, аудио, видео, трёхмерной сцены или другого типа данных.
Latent в генерации изображений
У image VAE latent обычно остаётся пространственным: у него есть высота, ширина и несколько выученных каналов. Поэтому точнее представлять его как многослойную карту, а не как один длинный вектор.
Упрощённый путь изображения выглядит так:
пиксели → VAE Encode → spatial latent → VAE Decode → пиксели
Encoder уменьшает пространственный размер и переводит локальные фрагменты изображения в признаки. Decoder выполняет обратное преобразование, но не извлекает спрятанные пиксели один к одному: он реконструирует изображение из доступной информации.
Отсюда появляется компромисс. Сильное сжатие экономит вычисления, но декодеру сложнее сохранить мелкий текст, тонкие линии и едва заметные фактуры. Слабое сжатие оставляет больше данных, но увеличивает тензор и стоимость работы denoiser.
Что делает latent diffusion
Latent Diffusion Models перенесли диффузионный процесс из пространства пикселей в выученное представление автоэнкодера. Благодаря этому denoiser работает с меньшей пространственной сеткой, а не с каждым RGB-значением исходного кадра.
Для text-to-image схема состоит из нескольких независимых потоков:
- Задаётся форма пустого latent-контейнера.
- Генератор создаёт шум той же формы по seed.
- Текстовый encoder превращает промпт в conditioning.
- Denoiser последовательно меняет зашумлённый latent с учётом conditioning.
- VAE decoder переводит итоговый latent в пиксели.
Conditioning не превращается в тот же тензор, что и изображение. Это отдельный сигнал, который модель получает вместе с текущим noisy latent и уровнем шума.
Для image-to-image путь начинается иначе: исходное изображение сначала кодируется VAE. Затем к его latent добавляется шум выбранного уровня, после чего sampling строит новую версию. Так сохраняется часть пространственной структуры, хотя буквальное совпадение пикселей не обещается.
Пустой latent — не случайный шум
В ComfyUI узел Empty Latent Image задаёт форму и batch для будущих samples. Название может создать впечатление, будто узел уже генерирует шум, но это разные операции.
В обычном KSampler шум создаётся по seed внутри sampling-пути. В модульной схеме для него есть отдельный объект NOISE, например от RandomNoise. Благодаря такому разделению один и тот же контейнер можно использовать без добавления нового шума, продолжить прерванный schedule или подать encoded latent от VAE.
Это различие особенно заметно в KSampler Advanced, где параметры add_noise и диапазон шагов управляются отдельно. Пустая форма, случайные samples и noisy latent — три разных состояния.
Почему нет одного размера latent
Форма внутреннего представления является частью архитектуры. Для разных моделей меняются:
- пространственный коэффициент сжатия;
- число каналов;
- scale и shift, применяемые к значениям;
- число измерений — изображение, последовательность, видео;
- packing и порядок осей;
- статистика, на которой обучен decoder.
У пространственного image latent приблизительное соотношение можно записать так:
latent height ≈ image height / spatial downscale
latent width ≈ image width / spatial downscale
Число каналов и точные правила берутся из формата конкретной модели. В актуальном коде ComfyUI класс LatentFormat хранит эти параметры отдельно для разных семейств. Там встречаются двухмерные, трёхмерные и одномерные представления, разные коэффициенты масштаба и разные способы подготовки входа.
Поэтому число элементов в тензоре не стоит превращать в универсальный коэффициент ускорения. Реальная нагрузка зависит также от ширины denoiser, attention, batch, precision, реализации VAE и способа packing.
Почему latent разных моделей несовместимы
Два тензора одинаковой формы ещё не говорят на одном внутреннем языке. Их энкодеры могли выучить разные признаки, использовать разные масштабы и иначе распределять информацию по каналам.
Совместимость требует совпадения всего контракта:
- формы и порядка измерений;
- нормализации, scale и shift;
- способа packing;
- VAE или другого кодека;
- ожиданий denoiser и decoder.
Если подать latent от одной системы в неподходящий decoder, результатом обычно станет шум, сильные искажения или ошибка формы. Даже VAE с тем же числом каналов не становится автоматически взаимозаменяемым.
Каналы не подписаны человеческими признаками
Иногда latent объясняют как набор отдельных слоёв: один отвечает за цвет, другой за контраст, третий за форму. Это удобный рисунок, но не точное описание.
Признаки распределены. Один канал может участвовать сразу в нескольких свойствах, а нужная деталь определяется сочетанием значений в разных каналах и соседних позициях. Их роль также меняется по слоям denoiser и зависит от обучения VAE.
Быстрый RGB-preview latent строится через приближённую проекцию каналов. Он помогает увидеть общую композицию во время sampling, но не заменяет полный decoder и не раскрывает «настоящие цвета» каждого канала.
Latent и текстовый embedding
Оба объекта являются внутренними представлениями, но служат разным задачам.
- Image latent хранит пространственное состояние генерируемого или закодированного кадра.
- Text embedding и conditioning описывают текстовый сигнал и служебные параметры, которыми направляют denoiser.
Фраза «у модели два latent space» возможна в широком математическом смысле, но в workflow она стирает важную границу. В ComfyUI эти данные имеют разные типы — LATENT и CONDITIONING — и подключаются к разным входам.
CLIP, T5 и другие text encoder тоже создают embeddings. Их длина, размерность и pooled-представления зависят от архитектуры; эти числа не определяют форму image latent.
Можно ли двигаться по latent space
Интерполяция между двумя представлениями вычисляет промежуточные значения. Она действительно может дать плавную последовательность, если decoder разумно восстанавливает весь путь между концами.
Но слово «плавная» требует уточнения:
- числовое изменение может быть плавным, а объект — двоиться или ломаться;
- прямая линия способна пройти через область, на которой модель почти не обучалась;
- линейная интерполяция и сферическая интерполяция дают разные траектории;
- смешивание decoded images, VAE latents, стартового шума и text conditioning — разные операции;
- независимое декодирование кадров не создаёт временную согласованность.
Поэтому latent interpolation не является универсальным способом сделать видео. Для устойчивого движения обычно нужны временная модель, связанный noise, optical constraints или другие механизмы, которые согласуют соседние кадры.
Seed и расстояние в пространстве
Близкие номера seed не означают близкие точки. Seed инициализирует псевдослучайный генератор; значения 123 и 124 обычно создают независимые массивы шума.
«Соседнюю вариацию» получают не прибавлением единицы, а управляемым смешиванием шума, conditioning или latent при фиксированном workflow. И даже тогда близость по обычной евклидовой метрике не гарантирует одинаковое восприятие: полезная геометрия зависит от того, как пространство выучено.
Latent upscale
Latent upscale увеличивает пространственную сетку внутреннего представления до следующей sampling-стадии. После изменения размера denoiser может заново согласовать формы и добавить детали, а decoder переводит результат в пиксели.
Операция не восстанавливает информацию, которой не было в исходном latent. Она создаёт больше позиций для следующего прохода модели. Качество зависит от метода масштабирования, denoise, модели, VAE и того, насколько новое разрешение соответствует её обучению.
Обычный pixel upscale решает другую задачу: увеличивает уже декодированное изображение. Он сохраняет существующий кадр предсказуемее, тогда как повторный sampling способен заметнее его переосмыслить.
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 decoder или специальный приближённый preview.
Empty Latent Image создаёт шум?
Нет. Узел задаёт пустые samples, форму и batch. Шум по seed создаёт sampling-слой или отдельный noise-узел.
Чем latent diffusion отличается от pixel diffusion?
Местом основного диффузионного процесса. Latent diffusion работает в представлении кодека и декодирует результат в конце. Pixel diffusion применяет процесс непосредственно к пиксельному или близкому к нему пространству.
Можно ли перенести latent из одной модели в другую?
Только если модели явно разделяют совместимый формат, нормализацию и decoder. Совпадения разрешения и числа каналов недостаточно.
Интерполяция двух latent всегда даёт красивый промежуточный кадр?
Нет. Числа меняются непрерывно, но decoder может показать двоение, потерю формы или другие переходные артефакты. Результат зависит от концов, траектории и обученного пространства.
Почему decoded image отличается от исходника после VAE Encode и Decode?
VAE является кодеком с потерями. Часть высокочастотной информации и точных цветов меняется при сжатии и реконструкции. Масштаб отличий зависит от конкретного VAE и изображения.
Главное
Latent space — внутреннее пространство представлений, а image latent — конкретное состояние кадра в этом пространстве. В latent diffusion VAE связывает пиксели с компактным пространственным тензором, denoiser работает с его зашумлёнными версиями, а текст приходит отдельным conditioning-сигналом.
Форма, число каналов и масштаб latent принадлежат архитектуре. Его оси не обязаны иметь понятные названия, соседние seed не являются соседними точками, а интерполяция не гарантирует смысловой или временной плавности. Такая точность делает схему проще: пиксели, latent, noise и conditioning перестают выглядеть как четыре названия одного объекта.