Генерация картинок: как это работает

Ты пишешь «рыжая кошка-космонавт пьёт молоко на Луне» — и через несколько секунд получаешь картинку, которой никогда не существовало. Сейчас разберёмся, как программа умудряется это сделать.
Эмбеддинг — представление слова или объекта в виде точки в многомерном пространстве, где похожие смыслы лежат рядом. Именно эмбеддинги связывают твой текст с тем, что окажется на картинке.

Наверняка ты уже видел в ленте странные, красивые или смешные изображения с подписью «сгенерировано нейросетью». Замок из мороженого, твой любимый герой в стиле старого аниме, кот в костюме рыцаря. Кто-то просто написал словами, что хочет увидеть, — и программа это нарисовала. Без художника, без фотошопа, за пару секунд.

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

Зачем тебе это понимать

Генерация картинок — это уже не игрушка для гиков. Ей делают обложки для проектов, аватарки, иллюстрации к рефератам, концепты для игр, мемы. Скорее всего, ты и сам скоро что-нибудь сгенерируешь — а может, уже.

Но есть разница между тем, кто просто тыкает кнопку и удивляется результату, и тем, кто понимает, что происходит внутри. Второй пишет запросы точнее, не ждёт от программы невозможного и сразу замечает подвох — например, что «фотография» на самом деле нарисована и доверять ей как доказательству нельзя.

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

Главная идея: скульптор, который убирает лишнее из тумана

Представь, что ты лепишь из глины наоборот. Обычный скульптор берёт кусок и добавляет детали. А теперь вообрази скульптора, перед которым стоит глыба случайного тумана — бесформенное облако шума, как «снег» на старом телевизоре без сигнала. Его задача — на каждом шаге чуть-чуть убирать лишнее, проявляя из тумана нужную фигуру. Шаг за шагом туман редеет, и из него постепенно проступает кошка. Или собака. Или кошка-космонавт.

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

Картинка не рисуется штрих за штрихом, как карандашом. Она проявляется из случайного шума — как фотография в ванночке с проявителем у старых фотографов.

Как машину этому научили: зубрёжка наоборот

Откуда программа знает, какой именно шум убирать? Её этому научили — на огромном количестве примеров. Вспомни наш сквозной пример: задачу «отличить кошку от собаки». Раньше мы учили модель смотреть на картинку и говорить, кто на ней. Здесь почти то же самое, только вывернутое наизнанку.

Во время обучения брали настоящие фотографии (с подписями вроде «кошка», «собака») и специально портили их шумом — чуть-чуть, потом сильнее, потом совсем в кашу. А модель тренировали делать обратное: по испорченной картинке угадывать, как убрать шум и вернуть исходную. Сделай так миллионы раз с миллионами картинок — и модель выучивает, как выглядит «расшумлённая» кошка, собака, дерево, лицо. Это снова обучение с учителем: показали испорченный пример и правильный ответ (чистую картинку), модель подстроила свои веса.

Теперь, когда обучение закончено, ей дают чистый случайный шум — и просят «убрать шум» так, будто под ним пряталась настоящая картинка. Под шумом ничего не пряталось, но модель этого не знает: она честно делает то, чему училась, и проявляет правдоподобное изображение из ничего.

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

Уровень шумаЧто видит модельЧему она учится
СлабыйПочти чёткая кошка, лёгкая рябьПодчистить мелкие детали — усы, шерсть
СреднийРазмытое пятно, угадывается силуэтВернуть форму тела, ушей, позу
СильныйПочти сплошная каша из точекПонять, что вообще тут пряталось животное

Когда все три уровня выучены, генерация — это просто обратный путь по этой таблице: от каши к силуэту, от силуэта к деталям. Модель не помнит конкретную фотографию из обучения — она запомнила общие правила, как «кошачесть» проступает сквозь шум. Поэтому она и рисует новых кошек, которых никогда не было, а не копирует старые. Это важно: генератор не достаёт готовую картинку из памяти, как из папки, а каждый раз собирает новую по выученным закономерностям. Иногда, правда, на сложных или редких запросах он может выдать что-то слишком похожее на конкретный обучающий пример — это отдельная больная тема про авторские права, к которой относятся всерьёз.

А при чём тут текст? Связываем запрос и картинку

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

Напомню идею: каждое слово можно превратить в точку в многомерном пространстве, где похожие по смыслу слова лежат рядом. «Кошка» и «котёнок» близко, «кошка» и «трактор» далеко. Так вот, картинки можно превращать в точки в том же самом пространстве. И тогда у слова «кошка» и у фотографии кошки получаются близкие эмбеддинги. Программу специально обучили на парах «картинка + её подпись», чтобы текст и изображение про одно и то же оказывались рядом.

Дальше всё складывается. Ты пишешь запрос — его превращают в эмбеддинг (точку смысла). Эту точку отдают нашему скульптору как подсказку: «убирай шум не куда попало, а в сторону вот этого смысла». На каждом шаге расшумления модель подглядывает на эмбеддинг твоего текста и тянет картинку ближе к нему. Хочешь космонавта — добавится скафандр, хочешь на Луне — появится серый грунт и чёрное небо.

Эмбеддинг текста — это компас. Шум — это глыба. Модель на каждом шаге сверяется с компасом и откалывает лишнее в нужную сторону.

Тот же самый сквозной пример, но глубже

Смотри, как наша «кошка против собаки» прошла весь курс. Сначала это был набор признаков (форма ушей, длина морды). Потом — нейросеть, которая по картинке выдаёт ответ. Потом — эмбеддинги, где кошка и собака стали точками. И вот теперь та же пара работает в обратную сторону: по слову «кошка» (точке-эмбеддингу) модель выращивает картинку кошки из шума. Одна и та же идея, просто повёрнутая другой стороной — от ответа к рисунку.

Разберём на примерах

Курс концептуальный, поэтому код здесь — это маленькие наглядные модельки на JavaScript, которые показывают идею. Они не настоящие нейросети, а упрощённые иллюстрации механизма.

Пример 1. Как из шума постепенно «проявляется» картинка

Представим картинку как одно число — «насколько она похожа на кошку», от 0 (чистый шум) до 1 (идеальная кошка). На старте у нас случайный шум, далёкий от цели. На каждом шаге модель чуть-чуть приближает картинку к цели — убирает часть «расстояния до кошки».

// 0 = сплошной шум, 1 = идеальная картинка кошки
let картинка = 0.05;           // старт: почти чистый шум
const цель = 1.0;              // куда тянемся
const шагов = 6;

for (let шаг = 1; шаг <= шагов; шаг++) {
  // на каждом шаге убираем половину оставшегося "тумана"
  картинка = картинка + (цель - картинка) * 0.5;
  console.log("Шаг " + шаг + ": похожесть на кошку = " + картинка.toFixed(3));
}

console.log("Готово! Из шума проявилась картинка.");

Вывод:

Шаг 1: похожесть на кошку = 0.525
Шаг 2: похожесть на кошку = 0.763
Шаг 3: похожесть на кошку = 0.881
Шаг 4: похожесть на кошку = 0.941
Шаг 5: похожесть на кошку = 0.970
Шаг 6: похожесть на кошку = 0.985
Готово! Из шума проявилась картинка.

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

Пример 2. Текст-компас задаёт, что именно проявить

Теперь добавим текстовый запрос. Пусть эмбеддинг запроса задаёт цель, к которой тянется шум. Сменим запрос — сменится цель, и из того же шума проявится другое.

// Очень упрощённо: эмбеддинг запроса = число-"цель"
const цели = {
  "кошка": 0.30,
  "собака": 0.80,
  "кошка-космонавт": 0.55
};

function генерировать(запрос) {
  let картинка = 0.00;              // один и тот же стартовый шум
  const цель = цели[запрос];
  for (let шаг = 0; шаг < 5; шаг++) {
    картинка = картинка + (цель - картинка) * 0.6; // тянемся к цели запроса
  }
  return картинка.toFixed(3);
}

console.log("Запрос 'кошка'           -> " + генерировать("кошка"));
console.log("Запрос 'собака'          -> " + генерировать("собака"));
console.log("Запрос 'кошка-космонавт' -> " + генерировать("кошка-космонавт"));

Вывод:

Запрос 'кошка'           -> 0.297
Запрос 'собака'          -> 0.792
Запрос 'кошка-космонавт' -> 0.545

Стартовый шум один и тот же (0.00), а результат разный — потому что разный текст задал разную цель. Вот почему два человека с одинаковым запросом, но разным начальным шумом получат похожие, но не одинаковые картинки: смысл (компас) общий, а стартовый туман у каждого свой.

Пример 3. Почему похожие запросы дают похожие картинки

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

// Эмбеддинг = точка-число. Чем ближе числа, тем ближе смысл.
const эмбеддинг = {
  "кошка": 0.30,
  "котёнок": 0.34,
  "трактор": 0.95
};

function расстояние(a, b) {
  return Math.abs(эмбеддинг[a] - эмбеддинг[b]).toFixed(2);
}

console.log("кошка vs котёнок: " + расстояние("кошка", "котёнок"));
console.log("кошка vs трактор: " + расстояние("кошка", "трактор"));

Вывод:

кошка vs котёнок: 0.04
кошка vs трактор: 0.65

Запросы «кошка» и «котёнок» почти совпадают по смыслу — и картинки выйдут похожими. А «трактор» далеко, и проявится совсем другое. Та же логика эмбеддингов, что и в тексте, только теперь она рулит рисунком.

Частые ошибки и подводные камни

Когда начнёшь генерировать сам, ты быстро наткнёшься на странности. Вот почему они возникают.

Что ломаетсяПочему так
Кривые руки, лишние или слипшиеся пальцыМодель не считает пальцы и не знает анатомию. Она лишь воспроизводит частые узоры из обучающих картинок, а руки в разных позах сложны и редки — вот и путается.
Текст на картинке — бессмысленные закорючкиДля модели буквы — это просто узор пикселей, а не символы со смыслом. Она «рисует что-то буквоподобное», не умея писать.
Игнорирует часть запроса («забыл» один объект)Чем длиннее и сложнее запрос, тем труднее уместить все смыслы в один компас-эмбеддинг. Что-то перевешивает, что-то теряется.
«Фотореалистичное» фото на самом деле выдуманоЭто не снимок реальности, а сгенерированный узор. Такая картинка не доказывает, что событие было — отсюда и проблема дипфейков.
Странные объекты, которых не просилиМодель тянет картинку к среднему по похожим примерам. Если в обучающих данных рядом с твоим запросом часто было что-то ещё, оно может «прилипнуть».

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

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

Чем люди реально пользуются — и где предел

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

В чём генераторы хорошиВ чём почти всегда плохи
Атмосфера, настроение, стиль, цветТочный счёт: «ровно три кошки» легко превращается в две или четыре
Фантазийные сочетания («кошка-космонавт»)Читаемый текст и логотипы внутри картинки
Быстрые черновики идей и концептовАнатомия: руки, зубы, отражения в зеркале
Вариации одной идеи десяткамиСтрогая фактическая точность (это не справочник)

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

Поэтому относись к генератору как к талантливому, но рассеянному художнику-стажёру. Ему отлично даются наброски, настроение и «нарисуй мне что-то в духе». Но проверять за ним детали, считать пальцы и не доверять «фотографиям» как доказательствам — твоя работа.

Мини-проект: спланируй идеальный запрос

Кода тут не будет — будет тренировка мышления, которая реально улучшит твои картинки. Возьми любую идею (например, наш сквозной герой — кошка-космонавт) и собери для неё структурированный запрос по частям:

  1. Главный объект. Кто или что в центре? («рыжая кошка в скафандре»)
  2. Действие и место. Что делает, где находится? («пьёт молоко, сидит на поверхности Луны»)
  3. Стиль. Как нарисовать? («в стиле детской книжной иллюстрации» / «как кадр из аниме» / «цифровая живопись»)
  4. Детали атмосферы. Свет, настроение, цвета? («мягкий свет звёзд, тёплые цвета, уютно»)

Теперь усложни задание для себя: попробуй мысленно предсказать, где модель споткнётся. Есть ли в твоём запросе руки, которые надо рисовать? Текст или надписи? Слишком много объектов сразу? Если да — упрости или раздели на несколько картинок. Запиши свой финальный запрос и рядом — список «рискованных мест». Если у тебя есть доступ к любому генератору, проверь догадки на практике: что получилось так, как ждал, а что поехало?

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

Итоги

  • Картинка не рисуется штрихами, а проявляется из случайного шума: модель много раз подряд убирает лишнее, пока из хаоса не выйдет изображение.
  • Этому модель научили наоборот — портя настоящие фото шумом и тренируясь восстанавливать их. Это всё то же обучение с учителем, меняющее веса.
  • Твой текст превращается в эмбеддинг — точку смысла, которая работает как компас и задаёт, что именно проявить из шума.
  • Близкие по смыслу запросы дают похожие картинки, потому что у них близкие эмбеддинги — ровно как со словами.
  • Генератор воспроизводит узоры, а не понимает сцену: отсюда кривые руки, нечитаемый текст и то, что «фото» может быть полностью выдуманным.

Ты прошёл с нашими кошкой и собакой весь путь: от набора признаков до выращивания картинки из шума по текстовому запросу. Дальше в разделе про ИИ-инструменты мы разберём другие штуки, которыми ты можешь пользоваться уже сегодня, — и научимся выжимать из них максимум, понимая, как они устроены изнутри. Идём дальше.

Проверьте себя
1. С чего генератор картинок начинает создание изображения?
AС чистого белого листа, на котором рисует штрих за штрихом
BСо случайного шума, из которого постепенно убирает лишнее
CС готовой фотографии из интернета, которую слегка меняет
DС наброска, который заранее сделал человек
2. Как именно модель научилась убирать шум и получать осмысленную картинку?
AЕй вручную прописали правила, как рисовать каждый объект
BНастоящие картинки специально портили шумом, а модель тренировали восстанавливать их
CОна копирует картинки из поиска по запросу
DОна вообще не училась, а просто угадывает случайно
3. Какую роль играет твой текстовый запрос при генерации картинки?
AНикакой — картинка всегда случайная
BОн превращается в эмбеддинг-компас, который задаёт, в какую сторону убирать шум
CОн напрямую рисуется буквами поверх картинки
DОн выбирает готовое изображение из базы
4. Почему запросы «кошка» и «котёнок» дают похожие картинки?
AПотому что это одно и то же слово
BПотому что у близких по смыслу слов близкие эмбеддинги, а значит близкие цели
CПотому что модель путает буквы
DЭто случайное совпадение, обычно картинки разные
5. Почему у сгенерированных людей часто кривые руки или лишние пальцы?
AМодель специально шутит над пользователем
BМодель не понимает анатомию и не считает пальцы, а лишь воспроизводит частые визуальные узоры
CЭто баг конкретного приложения, который скоро уберут навсегда
DТак выглядят все настоящие фотографии рук
6. Что важно помнить про реалистичную картинку, сгенерированную ИИ?
AРаз выглядит как фото — значит событие точно было
BЭто сгенерированный узор, и он не доказывает, что изображённое реально (отсюда дипфейки)
CТакие картинки нельзя отличить от текста
DИИ не умеет делать реалистичные изображения