# Преподаватель MIT объяснил работу Stable Diffusion и CLIP

Источник: https://www.youtube.com/watch?v=NQBhhRG-Pe4
Канал: MIT OpenCourseWare
Опубликовано: 07.01.2026

---

В Массачусетском технологическом институте (MIT) состоялась финальная лекция курса по глубокому обучению, полностью посвященная генеративным моделям класса Text-to-Image. Преподаватель подробно разобрал математические и архитектурные основы диффузионных алгоритмов, объяснил принципы работы мультимодального пространства CLIP и продемонстрировал практические инструменты для работы с компьютерным зрением. Материал охватывает эволюцию технологий от базового подавления шума до латентной диффузии и генерации видео.

## 🎭 От забавных генераций к технологическим прорывам
[[JUMP:0:16]]

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

Для демонстрации текущих возможностей технологии лектор привел несколько примеров генерации. Эксперимент с ChatGPT, которой был дан запрос на создание фотореалистичного изображения студентов на лекции по глубокому обучению, показал неплохой результат, хотя и с забавными анатомическими аномалиями: на картинке полностью отсутствовал преподаватель, а студенты сидели спиной друг к нему и смотрели в разные стороны. В то же время диффузионная модель Midjourney продемонстрировала поразительную точность при обработке сложного художественного промпта, сгенерировав колоритную итальянскую приморскую деревню в стиле Клода Моне.

Настоящим прорывом в индустрии, по словам профессора, стал релиз text-to-video модели Sora от компании OpenAI, состоявшийся 15 февраля. Модель способна создавать минутные видеоролики высокого качества на основе текстового описания. Профессор продемонстрировал генерацию по запросу об огромной приливной волне, обрушивающейся на исторический зал, в которой лавируют двое серферов. Тот факт, что подобного события никогда не происходило в истории, доказывает: нейросеть не просто извлекла готовые данные из обучающей выборки, а скомпилировала принципиально новый контент, пусть и допустив мелкие неточности — например, появление абсолютно сухого человека на заднем плане. 

Согласно техническому отчету OpenAI, Sora представляет собой текстово-обусловленную диффузионную модель, построенную на архитектуре трансформера (Transformer Architecture). Чтобы детально разобраться в логике подобных систем, лекционную программу разделили на два блока:

* Изучение базового механизма генерации чистых изображений из заданного класса данных.
* Разбор методов управления и кондиционирования (steering / conditioning) модели с помощью текстовых подсказок.

## 🔄 Обратить задачу вспять: как из шума рождается структура
[[JUMP:3:49]]

Предположим, перед разработчиком стоит задача создать модель, генерирующую изображения старинных университетских зданий (в качестве эталона профессор привел Килиан-Корт — знаменитый двор MIT). Первым шагом в машинном обучении всегда идет сбор данных. В данном случае обучающая выборка формировалась стандартным поисковым запросом в Google Images. 

Каждый раз, когда пользователь запрашивает изображение у обученной модели, система должна выдавать новый уникальный вариант (будь то Килиан-Корт или ротонда Университета Вирджинии), иначе процесс потеряет смысл. Достигается это за счет подачи на вход модели случайного шума. Под шумом понимается матрица, где значения всех пикселей выбраны абсолютно случайно. Модель использует эту случайную отправную точку для воссоздания структуры. Если сеть была обучена на архитектурных объектах, она выдаст здание, а не лабрадора-ретривера.

Идея обучения модели созданию чистых изображений из хаотичного набора чисел изначально казалась абсурдной и могла завести исследователей в тупик. Решением стал классический математический подход, описанный эвристическим методом в книге Джорджа Пойа «Как решить задачу» (How to Solve It), опубликованной более полувека назад: если не знаете, как решить задачу, переверните ее условие. 

Вместо того чтобы сразу превращать шум в картинку, ученые разработали «прямой процесс» (forward process) — контролируемое пошаговое зашумление исходного изображения. Взяв чистый снимок Килиан-Корт, к нему постепенно добавляют математический шум до тех пор, пока исходный объект не станет полностью неразличимым. 

### 🛠️ Практикум в Colab: механика зашумления изображения

Профессор наглядно продемонстрировал простоту реализации прямого процесса в среде Google Colab, используя всего одну строку кода на Python. Процедура зашумления выглядит следующим образом:

1.  Импортируются ключевые библиотеки: `NumPy` (как `np`) для математических матриц и `PIL` (Python Imaging Library) для базовых манипуляций с графикой.
2.  Загружается файл изображения (`killian.png`) и преобразуется в массив NumPy. Любая цветная картинка представляет собой три таблицы чисел (каналы Red, Green, Blue) со значениями пикселей от 0 до 255.
3.  Выполняется нормализация данных: все значения делятся на 255, чтобы перевести их в диапазон от 0 до 1. Размерность тестового изображения составила $411 \times 583 \times 3$ канала.
4.  Для каждого пикселя генерируется случайная величина из нормального (гауссовского) распределения со средним значением 0 и небольшим стандартным отклонением (например, 0.3) при помощи команды `np.random.normal`.
5.  Сгенерированный шум суммируется с массивом оригинального изображения. Из-за этого часть значений выходит за рамки диапазона (появляются отрицательные числа или значения больше 1).
6.  Применяется функция отсечения `np.clip`: значения меньше 0 приравниваются к 0, а значения больше 1 — к 1. 
7.  Этот процесс упаковывается в цикл, где стандартное отклонение последовательно увеличивается (0.3, 0.4, 0.5...), постепенно превращая фотографию в белый шум.

## 🧠 Архитектура обучения: пары X-Y и предсказание шума
[[JUMP:11:14]]

Имея инструмент зашумления, разработчики могут создать массив обучающих пар «вход-выход» ($x, y$) для нейросети. В этой схеме входным параметром ($x$) выступает сильно зашумленная версия картинки, а выходным целевым значением ($y$) — ее чуть более чистая предыдущая итерация. 

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

В качестве примера неочевидного использования пар «вход-выход» лектор привел алгоритм подсказок формул в Google Таблицах: система анализирует миллионы вариантов, где выделенный пользователями диапазон ячеек выступает как вход, а итоговая формула — как выход, обучаясь выдавать точные рекомендации. 

В диффузионных моделях сеть обучается функции деноизинга (очищения) методом стохастического градиентного спуска (SGD) или с помощью оптимизатора Adam. В процессе инференса (вывода) обученная модель берет чистый шум и циклически очищает его шаг за шагом, пока «из тумана» не проявится четкое изображение здания. 

На заре технологии для получения качественного результата требовалось совершить около 1000 микрошагов деноизинга. Современные оптимизированные алгоритмы справляются за 50–100 шагов, однако диффузионные вычисления все еще остаются более медленными и ресурсоемкими, чем генерация текста в LLM. Именно этим объясняется задержка при обработке запросов в коммерческих сервисах вроде Midjourney.

### 🖐️ Проблема «четырех пальцев» и внутренняя случайность

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

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

Random-фактор в генерациях обеспечивается не только случайным шумом на старте. Во время каждого шага деноизинга модель вычисляет среднее значение распределения и делает небольшую случайную выборку вокруг него, что добавляет вариативности итоговому результату. Использование псевдослучайных чисел (pseudorandomness) на практике никак не вредит качеству и не позволяет сети цепляться за скрытые математические закономерности генератора шума.

### 📈 Оптимизация: предсказание шума вместо очистки

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

$$x_{\text{less\_noisy}} = x_{\text{noisy}} - \text{noise}_{\text{predicted}}$$

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

## 📐 Анатомия U-Net: главная рабочая лошадка генерации изображений
[[JUMP:29:55]]

Для реализации задач класса Image-to-Image (где на вход подается матрица пикселей и на выходе ожидается матрица той же размерности) доминирующей архитектурой является нейросеть U-Net. Свое название она получила из-за U-образной структуры, разделенной на две симметричные части:

* **Левая половина (энкодер):** Представляет собой классическую сверточную нейросеть (CNN). Изображение проходит через последовательность сверточных блоков и слоев макс-пулинга (max pooling). На каждом этапе пространственное разрешение картинки уменьшается, но увеличивается глубина каналов. На выходе получается компактный, но глубокий 3D-объем (латентное представление).
* **Правая половина (декодер):** Зеркально разворачивает процесс. Она восстанавливает пространственное разрешение из глубокого латентного представления до исходного размера картинки с помощью операции обратной свертки (up-convolution / deconvolution / `conv2D transpose`).



Ключевым фактором эффективности U-Net выступают остаточные связи (residual connections / skip connections). Они напрямую соединяют слои левой части (энкодера) с соответствующими слоями правой части (декодера). Профессор отметил, что ограничение нейросети информацией только от одного предыдущего слоя снижает ее потенциал. Передача пространственных признаков с ранних этапов обработки позволяет декодеру точнее восстанавливать мелкие детали. 

Данная архитектура изначально создавалась для задач сегментации медицинских снимков, но сегодня она стала универсальным стандартом. U-Net незаменима везде, где требуется сохранить геометрию кадра: при колоризации черно-белых фото, увеличении разрешения (super-resolution) и в диффузионных моделях. Идея сквозных связей также активно используется в архитектурах ResNet, DenseNet и в трансформер-блоках (слои self-attention и LayerNorm).

## 🗺️ Мультимодальный мост: как CLIP связывает текст и пиксели
[[JUMP:36:53]]

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

Для реализации этой концепции компания OpenAI разработала модель CLIP (Contrastive Language-Image Pretraining). Конструктивно CLIP состоит из двух независимых блоков:

* **Текстовый энкодер:** 12-слойный трансформер с 8-головым вниманием (Transformer Causal Encoder Stack), генерирующий эмбеддинги для предсказания следующих слов.
* **Изобразительный энкодер:** Классическая нейросеть ResNet-50 со срезанным верхним классификационным слоем.

В процессе обучения CLIP на вход подается батч (набор) пар «картинка-описание». Обе нейросети переводят свои данные в эмбеддинги, после чего рассчитывается косинусное сходство (cosine similarity) для каждой возможной комбинации текста и графики в батче.



Матрица сходства содержит правильные пары строго по диагонали (зеленые ячейки). Задача функции потерь — максимизировать значения на диагонали и минимизировать все внедиагональные значения (красные ячейки). Если бы алгоритм наказывал только за несовпадение диагонали, произошел бы «коллапс модели» (model collapse), при котором оптимизатор занулил бы все веса для получения идеального косинусного сходства, равного единице, игнорируя входные данные. 

Модель CLIP была обучена на массиве из 400 миллионов пар изображений и текстов, собранных из интернета. Описания извлекались преимущественно из тегов `alt text` (альтернативный текст для доступности), которые авторы сайтов добавляют к картинкам. Такой текст более развернутый и подробный, чем стандартные лаконичные подписи, что дает модели больше семантической информации для обучения.

### 🎯 Вторичный супернавык: Zero-Shot классификация

Уникальным свойством CLIP является возможность организации бесконечно гибкой классификации изображений без необходимости дообучения (zero-shot classification). В стандартных системах добавление шестого класса к пяти имеющимся требует полной перестройки архитектуры и перезапуска обучения. 

С CLIP процесс выглядит иначе: пользователь загружает изображение и текстовый список из любого количества произвольных меток (например: «самолет», «машина», «собака»). Текстовые метки переводятся текстовым энкодером в эмбеддинги, картинка — изобразительным энкодером. Модель сопоставляет косинусное сходство вектора картинки со всеми векторами слов и выбирает вариант с наибольшим значением.

### 🏎️ Латентная диффузия и интеграция подсказок

Для внедрения текстового управления в диффузионный процесс эмбеддинг промпта, полученный от CLIP, конкатенируется (объединяется) с вектором зашумленного изображения и передается в U-Net. Поскольку текстовый вектор CLIP находится в том же концептуальном пространстве, что и целевые картинки, он выступает в роли «руля», направляя траекторию деноизинга к нужному распределению (например, в сторону весенних пейзажей Килиан-Корт).

Чтобы обойти жесткое ограничение по скорости вычислений в пространстве пикселей, была создана модель латентной диффузии (Latent Diffusion Model, LDM), лежащая в основе Stable Diffusion. Архитектура LDM включает важное усовершенствование:

1.  Исходное изображение сжимается энкодером в компактное латентное пространство (пространство эмбеддингов).
2.  Весь цикл зашумления и многошагового очищения (деноизинга) происходит внутри этого сжатого пространства, что требует в разы меньше вычислительных ресурсов и кардинально ускоряет процесс.
3.  CLIP-эмбеддинг текста вплетается в блоки U-Net напрямую через механизм перекрестного внимания (Cross-Attention) по принципу QKV (Query-Key-Value).
4.  Только на финальном этапе очищенный латентный вектор проходит через декодер изображений для развертывания в полноценную картинку высокого разрешения.

Область применения диффузии давно вышла за рамки создания контента ради забавы на сайтах вроде Lexica.art. Профессор упомянул, что аналогичные подходы (по аналогии со знаменитым алгоритмом AlphaFold для предсказания 3D-структуры белков из аминокислотных последовательностей) внедряются в биомедицинские науки для генерации сложных трехмерных белковых структур и проектирования лекарственных соединений.

## 🎬 Моделирование видео и гипотеза о физическом движке
[[JUMP:56:46]]

В кулуарах ИТ-сообщества ведутся активные споры о принципах работы систем генерации видео уровня OpenAI Sora. Главный вопрос: содержат ли они внутреннюю физическую структуру или они просто заучили внешнее проявление законов физики?

Поскольку OpenAI еще не опубликовала развернутый технический отчет, среди экспертов по компьютерному зрению сформировался консенсус: модель **не использует** встроенный физический движок (physics engine). Причина реалистичности кроется в колоссальном объеме обучающих данных, включающем терабайты геймплейных видеороликов из современных 3D-игр и симуляторов. Модель научилась достоверно имитировать физику как побочный эффект масштабного обучения, аналогично тому, как LLM осваивают логику и перевод без явных запрограммированных правил.

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

## 💻 Практическая магия Hugging Face: от Stable Diffusion до сегментации
[[JUMP:1:03:49]]

Финальная часть лекции была посвящена демонстрации возможностей библиотеки `diffusers` от экосистемы Hugging Face, которая предоставляет готовые инструменты для работы с диффузионными моделями из коробки.

Профессор продемонстрировал код развертывания пайплайна Stable Diffusion версии 1.4 (`StableDiffusionPipeline.from_pretrained`). Большинство современных моделей компьютерного зрения разработаны на базе фреймворка PyTorch. Для ускорения загрузки и экономии памяти веса модели были импортированы в оптимизированном формате половинной точности `FP16` (16-битные числа с плавающей запятой вместо стандартных 32-битных).

Задав фиксированный параметр `seed` для воспроизводимости результатов, лектор запустил генерацию по культовому промпту «фотография астронавта, скачущего на лошади». Модель успешно справилась за стандартные 50 шагов деноизинга. При изменении значения `seed` (меняющего стартовую матрицу шума) система выдала совершенно другого астронавта на другой лошади, подтвердив, что сеть не копирует данные из памяти. По просьбе аудитории был проведен успешный тест с кастомным промптом «профессор MIT верхом на лошади».

Дополнительно был продемонстрирован инструмент **негативного промптинга** (negative prompting), позволяющий исключать ненужные элементы из кадра за счет математического вычитания эмбеддингов. По запросу «лабрадор в стиле Вермеера» модель выдала пса в характерном синем платке. Добавление негативного промпта со словом `blue` перестроило траекторию диффузии, полностью удалив синие оттенки из финальной генерации без потери общего стиля картины. При увеличении числа шагов деноизинга с 50 до 1000 качество картинки и прорисовка микротекстур существенно возрастают, предотвращая накопление мелких ошибок.

### 👁️ Компьютерное зрение «из коробки»

Архитектура Hugging Face предлагает аналогичные простые решения с функцией `pipeline` для классических прикладных задач компьютерного зрения:

* **Классификация изображений (Image Classification):** Базовая модель без труда распознала на тестовом сложном снимке египетскую кошку с вероятностью 94%. Замена дефолтной модели на Microsoft ResNet (выбранную из более чем 10 400 доступных в хабе моделей) уточнила класс до «тигровой кошки» с той же уверенностью в 94%.
* **Детекция объектов (Object Detection):** Пайплайн автоматически локализует объекты в кадре и очерчивает их прямоугольными рамками (bounding boxes). Алгоритм безошибочно выделил на проверочном снимке кошку, диван и два пульта дистанционного управления.
* **Сегментация изображений (Image Segmentation):** Если вместо грубой рамки требуется определить точный контур объекта, применяется попиксельная маска (mask). Программа поочередно изолировала и подсветила идеальные контуры кошки и пультов. На масштабном объекте «диван» сегментация сработала хорошо, за исключением центральной части, где алгоритм слегка запутался в текстуре подушек.