# Как научить ИИ видеть и слышать: секреты контрастивного обучения

Источник: https://www.youtube.com/watch?v=n5yiUW0wSzA
Канал: DeepLearning.AI
Опубликовано: 20.05.2024

---

Современный поиск стремительно эволюционирует от простого сопоставления текста к пониманию сложного мультимодального контента. В образовательном материале от DeepLearning.AI подробно разбирается концепция мультимодального поиска и систем Retrieval-Augmented Generation (RAG). На примере практических алгоритмов контрастивного обучения (Contrastive Representation Learning) авторы демонстрируют, как научить компьютер сопоставлять текстовые запросы, изображения, аудио и видеофайлы в едином векторном пространстве.

## 🌐 Эра мультимодальных данных: почему текстового поиска уже недостаточно
[[JUMP:0:01]]

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

Например, концепт «лев» может быть представлен фотографией животного, текстовым описанием «король джунглей», видеороликом с бегущим прайдом или звуком грозного рычания. Сочетание этих модальностей дает искусственному интеллекту гораздо более глубокое понимание контекста. Увидеть и услышать рычание льва одновременно производит куда более сильное и пугающее впечатление, чем просто молчаливое наблюдение за ним; именно синергия визуального и звукового рядов объясняет, почему он считается королем джунглей.



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

## 🗺️ Мультимодальные эмбеддинги и концепция единого векторного пространства
[[JUMP:2:39]]

Главным инструментом для работы компьютера с разнородными данными являются мультимодальные эмбеддинги (multimodal embeddings). Они позволяют проецировать информацию разных типов в единое векторное пространство (joint embedding space). В таком пространстве вектор изображения льва окажется в непосредственной близости от векторов текстового описания, аудиозаписи рычания или видео с бегущими львами. Подобные модели способны сохранять семантическое сходство как внутри одной модальности, так и между ними. Это означает, что близкие по смыслу объекты всегда будут иметь схожие векторы, тогда как совершенно разные концепты (например, «лев» и «музыкальная труба») окажутся на значительном удалении друг от друга.



Процесс построения таких систем начинается с использования специализированных моделей, каждая из которых умеет работать только с одной модальностью (текстом, изображениями или звуком). Ключевая задача инженеров заключается в том, чтобы унифицировать эти разрозненные модели. Независимо от исходного формата данных, одинаковые смысловые концепты на выходе должны формировать близкие друг к другу векторы. Эта цель достигается с помощью технологии контрастивного обучения (contrastive representation learning).

## 🔄 Механика контрастивного обучения: притяжение и отталкивание векторов
[[JUMP:4:13]]

Контрастивное обучение представляет собой универсальный процесс настройки эмбеддингов, применимый не только к мультимодальным системам. Его фундаментальная идея строится на использовании трех типов данных:

* **Якорь (Anchor)** — базовая точка отсчета, например, фраза «он чувствовал запах роз».
* **Положительный пример (Positive example)** — объект, семантически близкий к якорю, например, «поле благоухающих цветов».
* **Отрицательный пример (Negative example)** — концептуально далекий объект, например, «лев величественно зарычал».



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

Для математической реализации этого процесса применяется функция контрастивных потерь (contrastive loss function). Сначала кодировщики переводят данные в векторы, затем вычисляется расстояние между ними. Задача обучения — минимизировать дистанцию до положительного примера и максимизировать до отрицательного. При переходе к мультимодальности якорем может выступать видео с львами, а примерами — текст и картинки, что заставляет модель выравнивать разные модальности в общих координатах.

## 📈 От CLIP к ImageBind: масштабирование подходов и математика потерь
[[JUMP:6:23]]

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

Математически функция контрастивных потерь выглядит следующим образом. Используются функции кодирования: $f$ для перевода изображений в вектор $q$, и $G$ для перевода видео в вектор $k$. В числителе формулы находится показатель сходства между положительными примерами (например, фото льва и видео со львом), значение которого максимизируется. В знаменателе вычисляется сумма сходств со множеством отрицательных примеров (например, фото льва и котята на велосипеде), нормирующая результат в вероятность. Знак минус перед функцией потерь указывает на необходимость её минимизации, благодаря чему векторы схожих объектов сближаются, а разных — отдаляются. Модель ImageBind от Meta развила этот подход, применив его последовательно ко всем ключевым модальностям: аудио, тексту, видео и тепловым картам.

## 💻 Практическая реализация: пишем код для обучения модели на MNIST
[[JUMP:8:20]]

Практическая часть занятия посвящена обучению нейросети на классическом датасете MNIST (изображения рукописных цифр от 0 до 9) с последующей визуализацией векторного пространства. Для работы используются библиотека машинного обучения PyTorch, а также инструменты визуализации Plotly и UMAP. Каждая цифра в MNIST имеет метку класса. В контексте контрастивного обучения, если якорем выбрана цифра «5», то другая «5» будет положительным примером, а цифры «6» или «7» — отрицательными.

Логика разделения прописана в файле `mnist_dataset.py`:

* При совпадении класса якоря и сравниваемого объекта элемент заносится в список положительных примеров.
* При несовпадении — отправляется в список отрицательных объектов.

Поскольку в качестве метрики близости используется косинусное сходство (cosine similarity), идеальное расстояние для положительных пар приравнивается к 1, а для отрицательных — к 0. Обучающие данные подаются в нейросеть через PyTorch DataLoaders, где размер батча (batch size) можно варьировать для анализа скорости сходимости.

Архитектура используемой нейросети включает:

* Два сверточных слоя (convolutional layers) для извлечения визуальных признаков цифр.
* Два полносвязных линейных слоя (feed-forward linear layers) для преобразования признаков в финальные 64-мерные векторные представления.

## 🔬 Анализ результатов: PCA, UMAP и «эффект медузы»
[[JUMP:14:45]]

По умолчанию вычисления запускаются на CPU, но при наличии переключаются на GPU/CUDA. Для градиентного спуска настраивается оптимизатор, функция контрастивных потерь и планировщик (scheduler). Полный цикл обучения занимает около 2–3 минут на одну эпоху, поэтому авторы предлагают загрузить уже готовую модель, прошедшую 100 эпох. График функции потерь показывает, что кривая стабилизируется в районе 20-й эпохи, а основные изменения происходят на первых 5–10 этапах.

Поскольку человек не способен воспринимать 64-мерное пространство, применяется метод главных компонент (PCA) для снижения размерности до 3D. На интерактивном графике Plotly видно, что из-за использования косинусного сходства эмбеддинги цифр выстраиваются в форме лучей (спиц), расходящихся из центра, а не в виде округлых кластеров. Это объясняется тем, что косинусное расстояние учитывает угол между векторами, в отличие от евклидова, минимизирующего линейную близость. Из-за сильного сжатия с 64 до 3 измерений некоторые векторы (например, цифры 2 и 4) могут казаться смешанными под определенным углом обзора, но общая структура лучей сохраняется.



Для более точной двухмерной проекции применяется алгоритм UMAP с обязательным указанием параметра `metric='cosine'`. В результате точки группируются в отчетливые кластеры, напоминающие по форме медуз («jellyfish-like pattern»). По шутливому замечанию авторов, здесь глубокое обучение (deep learning) пересекается с глубоководным («deep sea»). Если же запустить UMAP с евклидовой метрикой по умолчанию, данные выстроятся в хаотичные переплетенные линии, напоминающие «теорию струн», что исказит реальную картину векторного пространства.

## 🔮 Итоги и перспективы мультимодального поиска
[[JUMP:22:03]]

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

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