Механизм совершенно не похож на языковые модели и при этом очень изящный: научить сеть убирать шум, а потом попросить убрать шум из чистого шума.
Как научить сеть рисовать? Прямая постановка безнадёжна: что считать правильным ответом на «нарисуй плату»? Правильных картинок бесконечно много.
Обходной путь оказался гениально простым. Берём настоящую картинку и портим её шумом — постепенно, за много шагов, пока не останется чистый шум. Теперь у нас есть бесконечно много пар «чуть более зашумлённое → чуть менее зашумлённое», и правильный ответ для каждой известен точно.
фото платы → +шум → +шум → +шум → ... → сплошной шум
шаг 0 шаг 1 шаг 2 шаг 3 шаг 1000
обучение: по картинке на шаге N предсказать добавленный шум
Обучили. Теперь запускаем в обратную сторону: берём случайный шум и просим сеть шаг за шагом убирать из него «шум». Из ничего проступает изображение.
Как проявка фотографии: сначала мутное пятно, постепенно проступают контуры, потом детали. Только здесь на плёнке изначально ничего не было — изображение рождается из того, что сеть «считает» правдоподобным при удалении шума.
Картинка 1024×1024 — это три миллиона чисел. Прогонять их через сеть сотню раз было бы неподъёмно.
Решение: работать не с картинкой, а с её сжатым представлением. Отдельная сеть-кодировщик сжимает изображение в компактный массив в десятки раз меньше, весь процесс удаления шума происходит там, а в конце декодер разворачивает результат обратно в картинку.
текст «плата с вздутым конденсатором» ↓ текстовый кодировщик векторы смысла (глава 06) ↓ случайный шум в сжатом пространстве ↓ ← сюда через внимание (глава 08) подмешивается текст шаг 1: убрали часть шума шаг 2: убрали ещё ... шаг 25: чистое сжатое представление ↓ декодер готовая картинка
Именно переход в сжатое пространство сделал генерацию изображений доступной для домашнего железа. Без него нужны были бы серверные карты. Отсюда же понятно, почему генерация в большом разрешении дорожает нелинейно — сжатое представление тоже растёт.
Ваше описание превращается в векторы (ровно как в главе 06), и на каждом шаге удаления шума сеть смотрит на эти векторы через внимание — механизм из главы 08, только между картинкой и текстом.
То есть сеть на каждом шаге спрашивает себя: «какой шум надо убрать, чтобы получившееся было похоже вот на это описание». Постепенно накапливаясь, эти решения и приводят к нужному изображению.
Текстовый кодировщик понимает описание как «мешок признаков» гораздо лучше, чем как структуру. Поэтому модели плохо даются точные пространственные отношения («красный куб слева от синего шара»), счёт («ровно пять конденсаторов») и текст на картинке. Свежие модели стали заметно лучше, но природа ограничения та же.
| Параметр | Что делает | Практика |
|---|---|---|
| Шаги | Сколько раз убирать шум | 20–30 обычно достаточно. Больше — почти нет разницы, только дольше |
| Сила следования тексту | Насколько жёстко держаться описания | Слишком мало — игнорирует запрос. Слишком много — пережжённые цвета и артефакты |
| Сэмплер | Алгоритм, каким именно убирается шум | Влияет на стиль и скорость. Поменяйте — увидите разницу, единственно верного нет |
| Seed | Начальный шум | Тот же seed и те же настройки — та же картинка. Записывайте удачные |
| Разрешение | Размер результата | Модель обучалась на определённом размере; сильно отклоняться — получать искажения |
| Негативный запрос | Чего не должно быть | Работает как отталкивание от описанного |
Генерация полностью детерминирована: одинаковые входные данные дают одинаковый результат. Это значит, что вы можете менять один параметр за раз и честно сравнивать. Без фиксации seed любое сравнение настроек бессмысленно — вы сравниваете разные случайные шумы.
| Поколение | Особенности | Требования |
|---|---|---|
| Ранние (SD 1.x) | Лёгкие, огромная экосистема дополнений, качество по нынешним меркам слабое | Идут почти на всём |
| Средние (SDXL и родственные) | Хорошее качество, много готовых стилей и адаптеров | Комфортно на ваших 16 ГБ |
| Новые (крупные модели вроде Flux) | Заметно лучше с текстом и композицией | Тяжелее; на 16 ГБ нужны сжатые варианты |
У моделей изображений условия использования различаются сильнее, чем у языковых: часть свободна для коммерции, часть разрешает только некоммерческое использование, часть требует отдельной лицензии. Если планируете использовать результаты в своих продуктах — это надо прочитать до того, как вы на модели что-то построили.
| Языковая | Диффузионная | |
|---|---|---|
| Что предсказывает | Следующий токен | Шум, который надо убрать |
| Как получается результат | Слева направо, по одному | Целиком, за несколько проходов уточнения |
| Можно ли вернуться и исправить | Нет | Да — каждый шаг уточняет всю картинку |
| Повторяемость | Зависит от температуры | Полная при фиксированном seed |
| Размер | Миллиарды параметров | Обычно заметно меньше |
Практика на вашем железе: что ставить, что реально влезет в 16 ГБ и чего ожидать по скорости.
Бесплатная книга · tariel.ge · версии инструментов и команды проверяйте в документации проектов
Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.