中文翻译暂不可用,显示俄语原文。

Что такое 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 τ и bias b.
  • 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/14SigLIP ViT-L/14 (LiT)
ImageNet zero-shot top-176.2%78.5%
ImageNet zero-shot top-593.6%94.8%
Flickr30k textimage R@185.4%88.1%
COCO textimage R@158.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 и retrievalSigLIP даёт стабильный прирост.
  • Если вы используете предобученный 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.

Шаги:

  1. Загрузить Flickr30k (или использовать COCO).
  2. Взять предобученный ViT-B/16 (например, из timm) и текстовый BERT-base.
  3. Реализовать sigmoid loss (как в коде выше).
  4. Обучить модель на 10 эпох с батчем 128 (на одном GPU).
  5. Оценить recall@1 на тестовой части Flickr30k.
  6. Сравнить с 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)?

Навигация