Эпоха 5 · Эра LLM · 2021

40 CLIP

Learning Transferable Visual Models From Natural Language Supervision · Radford, Kim и др. · OpenAI · ICML
🟧 оригинал выборочно~1.5–2 чоригинал ↗
Суть за 20 секунд. Учим два энкодера (картинка и текст) на 400M веб-пар контрастивно: сближаем правильные пары, разводим неправильные. Получаем общее эмбеддинг-пространство → zero-shot классификация по текстовым промптам. Естественный язык как гибкий супервизор.

Контекст

Классификаторы зрения учились на фиксированном наборе классов с дорогой ручной разметкой и не переносились на новые. OpenAI связывает зрение и язык.

Идея и механизм

Два энкодера — для изображения и для текста — учатся СОВМЕСТНО на 400 млн веб-пар (картинка, подпись) контрастивно: в батче максимизируем сходство правильных пар и минимизируем для всех неправильных. Формируется общее эмбеддинг-пространство, где близки семантически соответствующие картинки и тексты.

теория вероятностей Контрастивный лосс (InfoNCE) и zero-shot

В батче из N пар энкодеры дают эмбеддинги картинок Ii и текстов Tj (L2-нормированные). Матрица сходств Sij = Ii·Tj/τ. Симметричный контрастивный лосс делает диагональ (правильные пары) большой, а вне диагонали — малой:

L = ½ [CE(softmaxrow(S), I) + CE(softmaxcol(S), I)]

где метки — это тождество (i-я картинка соответствует i-му тексту). Каждая правильная пара притягивается, N−1 неправильных в той же строке/столбце отталкиваются.

Zero-shot. Чтобы классифицировать картинку, сравниваем её эмбеддинг с эмбеддингами текстов «a photo of a {class}» и берём ближайший — никакого дообучения на этих классах. Так фиксированный набор меток заменяется любым текстовым описанием.

PyTorch Контрастивный лосс CLIP
import torch, torch.nn.functional as F

def clip_loss(img_emb, txt_emb, tau=0.07):
    I = F.normalize(img_emb, dim=-1)
    T = F.normalize(txt_emb, dim=-1)
    logits = I @ T.T / tau              # (N, N) сходства
    labels = torch.arange(len(I))       # диагональ = правильные пары
    return (F.cross_entropy(logits, labels) +
            F.cross_entropy(logits.T, labels)) / 2
картинка текст энкодер энкодер общее правильная пара→ близко (зелёное)
Картинка и её подпись отображаются в одно пространство и притягиваются; чужие пары — отталкиваются. Так язык становится супервизором для зрения.
Аналогия. Учить ребёнка не по карточкам с фиксированными ярлыками («это №347 в каталоге»), а показывая картинки и проговаривая подписи живым языком. Тогда он сможет узнать и то, чего в каталоге не было: услышав новое описание, найдёт подходящую картинку. CLIP так же не привязан к списку классов — понимает любой текст.

Почему это важно

Естественный язык как гибкий супервизор вместо фиксированных меток; CLIP сравнялся с ResNet-50 на ImageNet zero-shot. CLIP-энкодеры легли в основу text-to-image (DALL·E 2, conditioning Stable Diffusion) и мультимодальных систем.

Связи

← опирается на34. BERT

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

← наследует15. ImageNet

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

→ ведёт к47. Stable Diffusion

Общее текст-картиночное пространство CLIP — это механизм, которым text-to-image понимает запрос: conditioning в Stable Diffusion опирается на текстовые эмбеддинги CLIP-типа. Без связи язык↔зрение генерация «по описанию» была бы невозможна.

Вопросы пытливого ума

Почему контрастивное обучение масштабируется лучше, чем предсказание подписей?

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

Zero-shot чувствителен к формулировке промпта («a photo of a …») — это надёжно?

Не очень. Качество заметно зависит от шаблона: «a photo of a {class}» работает лучше голого слова, а ансамбль из многих шаблонов ещё лучше. Это тот же prompt engineering, что и в LLM. CLIP мощен, но его zero-shot — хрупкий интерфейс, требующий подбора формулировок.

400M веб-пар — что с предвзятостью и шумом?

Серьёзная проблема. Веб-подписи шумны и тенденциозны; CLIP наследует социальные стереотипы и плохо работает на редких/неевропейских концептах. Известны тревожные провалы классификации людей. Поэтому состав и происхождение данных CLIP — предмет критики, а сам он — пример того, как масштаб даёт мощь, но и тиражирует предубеждения интернета.

Что читать в оригинале

Читать ключевое — контрастивная схема и zero-shot prompt; огромный eval-свип пролистать.