Что такое Q-Former в BLIP-2 и зачем он нужен?

Краткий тезис

Q-Former (Query Transformer) — это лёгкий трансформер, который выступает мостом между замороженным vision encoder (ViT) и замороженным LLM (например, OPT или FlanT5). Он использует небольшое количество обучаемых query tokens, которые через cross-attention извлекают из визуальных признаков только релевантную информацию и подают её в LLM. Это позволяет адаптировать любую большую языковую модель к мультимодальным задачам без её дорогостоящего fine-tuning, сохраняя при этом высокое качество понимания изображений.


1. Термин: Q-Former и его место в BLIP-2

BLIP-2 — это мультимодальная модель, предназначенная для задач vision-language (подпись к изображению, VQA, диалог по изображению). Её ключевая инновация — Q-Former, который решает проблему «замороженного LLM»: как передать визуальную информацию в большую языковую модель, не трогая её веса.

Q-Former — это небольшой трансформер (обычно 100–200 млн параметров), который состоит из двух модулей:

  • Self-attention между query tokens (обучаемые векторы).
  • Cross-attention между query tokens и замороженными признаками из vision encoder (обычно ViT-L/14).

Q-Former не изменяет ни ViT, ни LLM — он учится «переводить» визуальные признаки в последовательность эмбеддингов, понятных LLM.


2. Зачем нужен Q-Former: проблема «замороженного LLM»

До BLIP-2 существовало два подхода к мультимодальности:

  1. Fine-tuning LLM на парах изображение-текст — дорого (нужны огромные ресурсы) и теряет общие знания LLM.
  2. Adapter-методы (LoRA, Prefix Tuning) — требуют доступа к градиентам LLM и всё равно частично изменяют модель.

Проблема LLM становятся всё больше (сотни миллиардов параметров), их fine-tuning становится непрактичным. Нужен способ «подключить» визуальный канал без изменения LLM.

Решение Q-Former он учится генерировать фиксированное количество query tokens (например, 32), которые «запрашивают» у ViT нужную информацию. Эти токены затем подаются в LLM как часть промпта. LLM остаётся полностью замороженной, а Q-Former — единственная обучаемая часть.


3. Архитектура Q-Former

Архитектура Q-Former состоит из трёх ключевых компонентов:

КомпонентОписание
Query tokensНабор обучаемых эмбеддингов (обычно 32–64). Инициализируются случайно и в процессе обучения учатся «запрашивать» у ViT релевантные признаки.
Self-attentionПозволяет query tokens обмениваться информацией между собой, формируя согласованное представление.
Cross-attentionКаждый query token «смотрит» на выходные признаки ViT (последний слой) и извлекает из них нужные фрагменты.

Формула cross-attention (упрощённо):

Q = query_tokens * W_Q
K = visual_features * W_K
V = visual_features * W_V
attention = softmax(Q * K^T / sqrt(d)) * V

Где visual_features — выход ViT размером (H*W, d), query_tokens(N, d). Результат — (N, d).

Важно Q-Former не использует позиционные эмбеддинги для query tokens — они сами учатся «знать», где искать.


4. Двухэтапное обучение BLIP-2

Обучение BLIP-2 проходит в два этапа, и Q-Former играет центральную роль на обоих.

Stage 1: Vision-Language Representation Learning

Stage 2: Vision-to-Language Generation Learning

  • Цель Научить Q-Former генерировать эмбеддинги, которые LLM может интерпретировать как текст.
  • Процесс Выход Q-Former (query tokens) подаётся в замороженный LLM через linear projection (или через дополнительный слой). LLM обучается генерировать текст, используя эти токены как префикс.
  • Задача Language modeling loss (предсказание следующего токена).

Итог LLM никогда не видит сырые пиксели — только «переведённые» Q-Former признаки.


5. Как Q-Former извлекает информацию из изображения

Механизм извлечения можно представить как вопросно-ответный процесс:

  • Query tokens — это «вопросы»: «Что изображено?», «Какого цвета объект?», «Где находится?».
  • Cross-attention — это «ответы» от ViT: каждый query токен выбирает из визуальных признаков те, которые максимально релевантны его «вопросу».

Пример: Для задачи VQA (Visual Question Answering) query tokens могут специализироваться: один токен отвечает за объекты, другой — за отношения, третий — за текст на изображении.

Кодовая иллюстрация (упрощённый forward):

class QFormer(nn.Module):
    def __init__(self, num_queries=32, d_model=768):
        super().__init__()
        self.query_tokens = nn.Parameter(torch.randn(1, num_queries, d_model))
        self.self_attn = nn.MultiheadAttention(d_model, num_heads=8)
        self.cross_attn = nn.MultiheadAttention(d_model, num_heads=8)
        self.ffn = nn.Sequential(
            nn.Linear(d_model, d_model * 4),
            nn.GELU(),
            nn.Linear(d_model * 4, d_model)
        )
        self.norm = nn.LayerNorm(d_model)

    def forward(self, visual_features):
        # visual_features: (B, H*W, d)
        queries = self.query_tokens.expand(visual_features.size(0), -1, -1)
        # Self-attention
        queries = queries + self.self_attn(queries, queries, queries)[0]
        queries = self.norm(queries)
        # Cross-attention: queries attend to visual features
        queries = queries + self.cross_attn(queries, visual_features, visual_features)[0]
        queries = self.norm(queries)
        # FFN
        queries = queries + self.ffn(queries)
        return queries  # (B, num_queries, d)

6. Преимущества Q-Former

ПреимуществоОписание
ЭффективностьОбучается всего ~200M параметров, LLM и ViT заморожены. Fine-tuning LLM потребовал бы в 10–100 раз больше ресурсов.
МодульностьМожно заменить LLM на любой другой (OPT, FlanT5, LLaMA) без переобучения Q-Former — достаточно Stage 2.
Сохранение знаний LLMLLM не модифицируется, её общие знания (логика, факты) остаются нетронутыми.
Фиксированная длинаQ-Former всегда выдаёт одинаковое число токенов (например, 32), что упрощает интеграцию с LLM.

7. Сравнение с альтернативами

МетодИзменяет LLM?Число обучаемых параметровКачество на VQAГибкость
Fine-tuning LLMДа>1BВысокоеНизкая (нужен полный fine-tune)
LoRAДа (адаптеры)~1% от LLMСреднееСредняя (зависит от ранга)
Flamingo (gated cross-attn)Нет~1.2B (доп. слои)ВысокоеНизкая (специфичная архитектура)
Q-Former (BLIP-2)Нет~200MВысокоеВысокая (любой LLM)

Вывод Q-Former обеспечивает лучшее соотношение эффективность/качество среди методов, не изменяющих LLM.


8. Применение Q-Former в Agentic RAG

В контексте Agentic RAG (агентные системы поиска и генерации) Q-Former может использоваться для:

  • Извлечения информации из изображений в мультимодальных документах (схемы, графики, скриншоты).
  • Генерации текстового описания изображения, которое затем подаётся в RAG-пайплайн как дополнительный контекст.
  • Ответа на вопросы по изображению (VQA) в составе агента, который обращается к визуальным базам знаний.

Пример: Агент получает запрос «Какая архитектура нейросети изображена на схеме?». Он вызывает vision encoder + Q-Former, получает текстовое описание (например, «ResNet с 50 слоями»), затем использует это описание для поиска в текстовой базе знаний.


9. Ограничения и недостатки

  • Зависимость от ViT Качество Q-Former ограничено качеством vision encoder. Если ViT плохо распознаёт мелкие детали, Q-Former не сможет их извлечь.
  • Фиксированное число query tokens Для сложных изображений 32 токенов может не хватить; для простых — избыточно.
  • Двухэтапное обучение Требует больших датасетов (LAION-400M, COCO) и вычислительных ресурсов (хотя меньше, чем fine-tuning LLM).
  • Отсутствие пространственного понимания Query tokens не имеют явной привязки к координатам на изображении, что может снижать точность в задачах детекции.

10. Современные развития

После BLIP-2 появились модели, использующие похожие идеи:

  • Qwen-VL — использует Q-Former для связи ViT с LLM Qwen.
  • CogVLM — использует глубокую cross-attention между визуальными и текстовыми токенами на всех слоях LLM (более мощный, но требует изменения LLM).
  • LLaVA — использует простой linear projection вместо Q-Former, но требует fine-tuning LLM (LoRA).

Тенденция Q-Former остаётся популярным выбором для задач, где LLM нельзя трогать (проприетарные модели, API).


Пет-проект для закрепления

Задача Реализовать упрощённую версию Q-Former для генерации подписей к изображениям (image captioning) с замороженным GPT-2.

Инструменты PyTorch, Hugging Face Transformers, torchvision (ResNet-50 как vision encoder).

Шаги:

  1. Загрузите предобученный ResNet-50 (заморозить) и GPT-2 (заморозить).
  2. Реализуйте Q-Former с 16 query tokens, cross-attention к признакам ResNet (последний слой).
  3. Создайте датасет (COCO или Flickr30k) с парами изображение-подпись.
  4. Обучите Q-Former на задачу генерации: выход Q-Former подаётся как префикс в GPT-2, loss — cross-entropy на тексте подписи.
  5. Оцените качество (BLEU, CIDEr) на тестовой выборке.

Ожидаемый результат Модель генерирует осмысленные подписи, хотя GPT-2 не был дообучен. Сравните с вариантом без Q-Former (только ResNet + linear projection) — Q-Former должен дать прирост.


Связь с другими вопросами

ВопросТема
365Что такое мультимодальный RAG и как он работает?
366Как архитектура Agentic RAG поддерживает работу с изображениями?
368Что такое Visual Question Answering (VQA) и как его реализовать?
369Как интегрировать изображения в RAG-пайплайн?
370Какую роль играет vision encoder в мультимодальных системах?

Навигация