中文翻译暂不可用,显示俄语原文。
Что такое SigLIP и чем отличается от CLIP?
Краткий тезис
SigLIP (Sigmoid Loss for Language-Image Pre-training) — это улучшенная версия CLIP, предложенная Google DeepMind в 2023 году. Главное отличие — замена контрастивного loss (softmax-based) на sigmoid loss, что позволяет обучаться на больших батчах без необходимости в явных отрицательных примерах внутри батча. SigLIP демонстрирует прирост качества 2–5% на стандартных бенчмарках (ImageNet zero-shot, retrieval) и лучше масштабируется до миллиардов пар изображение-текст.
1. Термин: CLIP и контрастивное обучение
CLIP (Contrastive Language-Image Pre-training, OpenAI 2021) — это модель, которая учит совместные эмбеддинги изображений и текста с помощью контрастивного loss. Идея: для каждой пары (изображение, текст) из батча размера N модель должна максимизировать сходство правильной пары (N положительных) и минимизировать сходство с остальными N²–N неправильными парами (отрицательные). Используется softmax-based loss|contrastive loss (InfoNCE):
L = - (1/N) * sum_i log( exp(sim(I_i, T_i)/τ) / sum_j exp(sim(I_i, T_j)/τ) )
Здесь sim — косинусное сходство, τ — temperature. Этот loss требует, чтобы все отрицательные пары в батче были «хорошими» отрицательными примерами. Если батч маленький, отрицательных примеров мало, и обучение неэффективно. Поэтому CLIP обучают с огромными батчами (32k–64k), что требует много памяти.
2. Проблемы CLIP
- Зависимость от размера батча: при малом батче (например, 256) отрицательных примеров недостаточно, loss плохо работает.
- Необходимость hard negatives: softmax loss чувствителен к «лёгким» отрицательным примерам; если в батче нет сложных негативов, градиенты слабые.
- Вычислительная сложность: матрица сходства N×N требует O(N²) памяти, что ограничивает масштабирование.
- Несимметричность: loss не симметричен относительно модальностей (текст-изображение vs изображение-текст), хотя на практике используют симметричную версию.
3. SigLIP: sigmoid loss
SigLIP (Sigmoid Loss for Language-Image Pre-training) заменяет softmax на sigmoid loss, который формулируется как бинарная классификация для каждой пары (i, j):
L = - (1/N) * sum_i sum_j [ y_ij * log(σ(z_ij)) + (1 - y_ij) * log(1 - σ(z_ij)) ]
где:
z_ij = sim(I_i, T_j) * τ + b— логит с temperatureτи biasb.y_ij = 1, если i == j (правильная пара), иначе 0.σ— сигмоидная функция.
На практике используют упрощённую форму (как в статье):
L = - (1/N) * sum_i [ log(σ(z_ii)) + sum_{j≠i} log(σ(-z_ij)) ]
где z_ij = sim(I_i, T_j) * τ + b. Bias b помогает сбалансировать положительные и отрицательные пары.
Ключевое отличие: sigmoid loss не требует нормировки по всем парам в батче (нет softmax по строкам/столбцам). Каждая пара рассматривается независимо. Это позволяет:
- Обучаться с любым размером батча (даже 1).
- Не нужно хранить полную матрицу N×N — можно вычислять loss по частям.
- Легко масштабировать до миллионов пар.
4. Преимущества SigLIP перед CLIP
| Характеристика | CLIP (softmax loss) | SigLIP (sigmoid loss) |
|---|---|---|
| Зависимость от размера батча | Сильная (нужен большой батч) | Слабая (работает при любом батче) |
| Память | O(N²) для матрицы сходства | O(N) при последовательном вычислении |
| Необходимость hard negatives | Важны для эффективного обучения | Менее критична (каждая пара учится отдельно) |
| Масштабируемость | Ограничена размером батча | Легко масштабируется до миллиардов пар |
| Качество zero-shot | Высокое | На 2–5% выше на ImageNet, retrieval |
| Симметричность | Обычно используют симметричный loss | Естественно симметричен (сумма по i и j) |
Дополнительные улучшения в SigLIP:
- Bias term
b— позволяет модели игнорировать «лёгкие» отрицательные пары, фокусируясь на сложных. - Температура
τ— обучается отдельно, что стабилизирует тренировку. - LiT (Locked-image Tuning) — в некоторых вариантах SigLIP используют предобученный image encoder (замороженный) и обучают только text encoder, что ускоряет обучение.
5. Архитектурные детали
SigLIP использует те же архитектуры энкодеров, что и CLIP: Vision Transformer (ViT) для изображений и Transformer для текста. Однако в статье SigLIP авторы экспериментировали с разными размерами: ViT-B/16, ViT-L/14, ViT-H/14. Также они применили LiT (Locked-image Tuning): предобученный image encoder (например, на JFT-3B) замораживается, а text encoder обучается с нуля. Это позволяет достичь высокого качества при меньших вычислительных затратах.
Формула sigmoid loss в коде (PyTorch-like):
import torch
import torch.nn.functional as F
def siglip_loss(image_embeds, text_embeds, tau=1.0, bias=0.0):
# image_embeds, text_embeds: (N, D) нормализованные
logits = torch.matmul(image_embeds, text_embeds.T) * tau + bias # (N, N)
labels = torch.eye(N, device=logits.device) # диагональ = 1
# бинарная кросс-энтропия
loss = F.binary_cross_entropy_with_logits(logits, labels)
return loss
На практике используют симметричную версию (сумма loss по изображениям и текстам) или асимметричную — в статье показано, что симметричная даёт лучший результат.
6. Результаты на бенчмарках
SigLIP превосходит CLIP на большинстве стандартных бенчмарков:
| Бенчмарк | CLIP ViT-L/14 | SigLIP ViT-L/14 (LiT) |
|---|---|---|
| ImageNet zero-shot top-1 | 76.2% | 78.5% |
| ImageNet zero-shot top-5 | 93.6% | 94.8% |
| Flickr30k text→image R@1 | 85.4% | 88.1% |
| COCO text→image R@1 | 58.4% | 61.2% |
| VTAB (average) | 72.3% | 75.1% |
Прирост составляет 2–5 процентных пункта. Особенно заметно улучшение на retrieval-задачах (Flickr30k, COCO).
7. Когда использовать SigLIP вместо CLIP
- Если у вас ограниченные ресурсы (маленький батч) — SigLIP работает эффективно при батче 256, в то время как CLIP требует 32k+.
- Если вы хотите масштабировать обучение на миллиарды пар — sigmoid loss легко распараллеливается.
- Если важна точность на zero-shot и retrieval — SigLIP даёт стабильный прирост.
- Если вы используете предобученный image encoder (LiT) — SigLIP с LiT обучается быстрее и качественнее, чем CLIP с нуля.
Однако CLIP остаётся стандартом де-факто, имеет больше готовых весов и инструментов (OpenCLIP, HuggingFace). SigLIP пока менее распространён, но его веса доступны в официальном репозитории Google.
8. Связь с RAG и мультимодальными системами
SigLIP может использоваться как эмбеддер для изображений в мультимодальном RAG. Например, для поиска изображений по текстовому запросу (text-to-image retrieval) или для обогащения контекста LLM визуальной информацией. Поскольку SigLIP даёт более качественные эмбеддинги, чем CLIP, retrieval в таких системах становится точнее.
Пет-проект для закрепления
Задача: Обучить небольшую модель SigLIP-like на датасете Flickr30k и сравнить с CLIP.
Инструменты: PyTorch, HuggingFace Transformers, datasets (Flickr30k), torchmetrics.
Шаги:
- Загрузить Flickr30k (или использовать COCO).
- Взять предобученный ViT-B/16 (например, из timm) и текстовый BERT-base.
- Реализовать sigmoid loss (как в коде выше).
- Обучить модель на 10 эпох с батчем 128 (на одном GPU).
- Оценить recall@1 на тестовой части Flickr30k.
- Сравнить с CLIP (можно взять готовый open_clip ViT-B/16).
Ожидаемый результат: SigLIP покажет recall@1 на 2-3% выше, чем CLIP при том же размере батча. Вы увидите, что sigmoid loss стабильнее сходится.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 536 | Что такое CLIP и как он работает? |
| 538 | Как использовать мультимодальные эмбеддинги в RAG? |
| 520 | Какие loss функции используются в contrastive learning? |
| 530 | Как оценивать качество эмбеддингов для retrieval? |
| 500 | Что такое Vision Transformer (ViT)? |
| 510 | Что такое LiT (Locked-image Tuning)? |
Навигация
- Предыдущий: 536
- Следующий: 538
- Индекс: 00. Индекс разборов