Phase 12 - Lesson 03

De CLIP a BLIP-2 — Q-Former como Puente de Modalidad

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

CLIP alinea imagen y texto pero no puede generar subtítulos, responder preguntas o mantener una conversación. BLIP-2 (Salesforce, 2023) resolvió eso con un pequeño puente entrenable: 32 vectores de consulta (query vectors) aprendibles atienden a las características de un ViT congelado a través de atención cruzada (cross-attention), luego se insertan directamente en el flujo de entrada de un LLM congelado. Un puente de 188M parámetros conector un LLM de 11B a un ViT-g/14. Cada VLM basado en adaptador hasta 2026 — MiniGPT-4, InstructBLIP, los primos de LLaVA — es un descendiente. Esta lección analiza la arquitectura del Q-Former, explica su entrenamiento en dos etapas y construye una versión de juguete que alimenta tokens visuales en un decodificador de texto congelado.

Tipo: Construcción Idiomas: Python (stdlib, demostración de cross-attention + consultas aprendibles) Prerrequisitos: Fase 12 · 02 (CLIP), Fase 7 (Transformers) Tiempo: ~180 minutos

Objetivos de Aprendizaje

  • Explicar por que un cuello de botella entrenable entre un codificador de visión congelado y un LLM congelado supera al ajuste fino de extremo a extremo (end-to-end) en costo y estabilidad.
  • Implementar un bloque de atención cruzada (cross-attention) donde un conjunto fijo de consultas (queries) aprendibles atiende a características de imagen externas.
  • Explicar el preentrenamiento en dos etapas de BLIP-2: representación (ITC + ITM + ITG) y luego generativo (pérdida de LM con decodificador congelado).
  • Comparar el Q-Former con el proyector MLP más simple utilizado en LLaVA y argumentar cuándo gana cada opción.

El Problema

Tienes un ViT congelado que produce 256 tokens de parche (patch tokens) con dimensión 1408 por imagen. Tienes un LLM de 7B congelado que espera embeddings de token con dimensión 4096. El puente obvio — una capa lineal de 1408 a 4096 — funciona, pero alimentar todos los 256 tokens de parche en el contexto del LLM cuesta 256 tokens adicionales por imagen. En un lote de 32 imágenes, eso representa 8192 tokens consumidos únicamente por la modalidad visual.

La pregunta de BLIP-2: ¿puedes comprimir la representación de imagen de 256 tokens en muchos menos tokens (digamos, 32) mientras preservas suficiente información para que el LLM genere subtítulos, responda preguntas y razone sobre la imagen? ¿Y puedes entrenar este puente sin tocar los backbones congelados, manteniendo el costo de entrenamiento solo en los parámetros del puente?

La respuesta: un Q-Former. 32 vectores de "consulta" (query) aprendibles que realizan atención cruzada con los tokens de parche del ViT, produciendo un resumen visual de 32 tokens que consume el LLM. 188M de parámetros en total. Entrenado con objetivos contrastivos, de emparejamiento (matching) y generativos antes de tocar el LLM.

El Concepto

Consultas aprendibles

El truco principal del Q-Former: en lugar de permitir que los tokens de texto del LLM atiendan a los parches de imagen, introduce un nuevo conjunto de 32 vectores de consulta aprendibles Q y permite que ellos atiendan a los parches de imagen. Las consultas son parámetros del modelo — se aprenden durante el entrenamiento y se utilizan las mismas 32 consultas para cada imagen.

Después de la atención cruzada, cada consulta contiene un resumen comprimido de la imagen — "describir el objeto principal", "describir el fondo", "contar los objetos", etc. Las consultas no se especializan literalmente en etiquetas semánticas; aprenden cualquier codificación que reduzca las pérdidas subsiguientes (downstream).

Arquitectura

El Q-Former es un transformer pequeño (12 capas, ~100M de parámetros) con dos caminos:

  1. Camino de consulta (Query path): 32 vectores de consulta fluyen a través de autoatención (entre sí), luego atención cruzada sobre los tokens de parche del ViT congelado y, finalmente, FFN.
  2. Camino de texto (Text path): un codificador de texto similar a BERT comparte los pesos de autoatención y FFN con el camino de consulta. La atención cruzada está desactivada para el camino de texto.

En el momento del entrenamiento se ejecutan ambos caminos. Las consultas y el texto interactúan a través de autoatención compartida, lo que significa que las consultas pueden condicionarse al texto para tareas que lo requieran (ITM, ITG). En el momento de la inferencia para la transferencia al VLM, solo fluyen las consultas, produciendo 32 tokens visuales.

Entrenamiento en dos etapas

BLIP-2 realiza el preentrenamiento en dos etapas:

Etapa 1: aprendizaje de representación (sin LLM). Tres pérdidas (losses):

  • ITC (contraste imagen-texto): contraste al estilo CLIP entre los tokens de consulta agrupados (pooled) y el token CLS del texto.
  • ITM (emparejamiento imagen-texto): clasificador binario — ¿es este par imagen-texto una coincidencia? Minado de negativos difíciles (hard-negative-mined).
  • ITG (generación de texto basada en imagen): cabezal de LM causal en el texto, condicionado a las consultas. Fuerza a las consultas a codificar contenido generable por texto.

Solo se entrena el Q-Former. El ViT está congelado. No hay ningún LLM involucrado.

Etapa 2: aprendizaje generativo. Conecta un LLM congelado (OPT-2.7B o Flan-T5-XL, etc.). Proyecta las 32 salidas de consulta a la dimensión de embedding del LLM a través de una pequeña capa lineal. Agrégalas al inicio del prompt de texto. Entrena únicamente la proyección lineal y el Q-Former en la pérdida de LM sobre la secuencia concatenada de prompt + imagen + subtítulo.

Después de la etapa 2, the Q-Former + proyección constituye el adaptador visual completo. En la inferencia: imagen → ViT → Q-Former → proj lineal → agregado al texto → el LLM congelado emite la salida.

Economía de parámetros

BLIP-2 con ViT-g/14 (1.1B, congelado) + OPT-6.7B (6.7B, congelado) + Q-Former (188M, entrenado) = 8B en total, 188M entrenados. El Q-Former por sí solo representa ~2.4% de los parámetros de toda la estructura. El costo de entrenamiento refleja esto: días en un puñado de GPUs A100 frente a semanas para un entrenamiento de extremo a extremo.

Calidad: BLIP-2 iguala o supera a Flamingo-80B en VQA zero-shot a pesar de ser 50 veces más pequeño. El puente funciona.

InstructBLIP y el Q-Former consciente de instrucciones

InstructBLIP (2023) extiende el Q-Former con una entrada adicional: el propio texto de la instrucción. Al momento de la atención cruzada, las consultas ahora tienen acceso tanto a los parches de imagen como a la instrucción. Las consultas pueden especializarse por instrucción ("contar los autos", "describir el estado de ánimo") en lugar de aprender un único resumen fijo. Ganancias de benchmark en tareas no vistas (held-out).

MiniGPT-4 y el enfoque exclusivo de proyector

MiniGPT-4 mantuvo el Q-Former pero entrenó solo la proyección lineal de salida, congelando todo lo demás. Barato, pero el costo es la calidad: las consultas eran las de BLIP-2, no las tuyas. Bueno para iteraciones rápidas, pero no es la mejor arquitectura.

Por qué LLaVA eligió un camino más simple

LLaVA (2023, Lección 12.05) reemplazó el Q-Former con un MLP simple de 2 capas que proyecta cada token de parche del ViT en el espacio del LLM — 576 tokens por imagen para una cuadrícula de 24x24, todos alimentados al LLM. Peor compresión, pero permite que el LLM atienda a los parches en bruto. En su momento, esto fue controvertido; a finales de 2023 era dominante porque los datos de instrucción visual (LLaVA-Instruct-150k) demostraron que el MLP podía entrenarse para conservar suficiente señal. La desventaja: el contexto de LLaVA se llena más rápido, pero escala de manera natural a múltiples imágenes y video.

Para 2026, el campo se dividió: el Q-Former sobrevive donde el presupuesto de tokens importa (videos largos, muchas imágenes); el proyector MLP domina donde la prioridad es la calidad bruta por token.

Gated cross-attention: Flamingo, el ancestro

Flamingo (Lección 12.04) fue anterior a BLIP-2 y utilizó la misma idea de atención cruzada pero en cada capa del LLM congelado, no como un solo puente. BLIP-2 demostró que se puede comprimir solo en la capa de entrada y aun así funcionar. Gemini e Idefics combinan ambos: tokens de entrada intercalados más atención cruzada controlada (gated) opcional para pocas oportunidades en contexto (in-context few-shot).

Los descendientes de 2026

  • Q-Former: BLIP-2, InstructBLIP, MiniGPT-4 y la mayoría de los modelos de video-lenguaje por razones de presupuesto de tokens.
  • Perceiver resampler: variante de Flamingo (Lección 12.04); familia Idefics, Eagle, OmniMAE.
  • Proyector MLP: LLaVA, LLaVA-NeXT, LLaVA-OneVision, Cambrian-1.
  • Pool de atención (Attention pool): VILA, PaliGemma.

Los cuatro enfoques son válidos. La pregunta decisiva es si estás limitado por el presupuesto de tokens o por la calidad por token.

Cómo Usarlo

code/main.py construye una atención cruzada al estilo Q-Former con la biblioteca estándar (stdlib):

  1. Simular 256 tokens de parche de imagen (dimensión 128).
  2. Instanciar 32 consultas (queries) aprendibles (dimensión 128).
  3. Ejecutar atención cruzada de producto escalar escalado (Q a partir de las consultas, K/V a partir de los parches).
  4. Proyectar a la dimensión del LLM (512) mediante una capa lineal.
  5. Retornar los 32 tokens visuales listos para el LLM.

Toda la matemática en Python puro (bucles aninados sobre vectores). Un modelo de juguete (toy), pero con la forma correcta. Se imprime la matriz de pesos de atención para que puedas ver de qué parches extrajo información cada consulta.

Cómo Entregarlo

Esta lección produce outputs/skill-modality-bridge-picker.md. Dada una configuración de VLM objetivo (conteo de tokens del codificador de visión, presupuesto de contexto del LLM, restricciones de implementación, objetivo de calidad), recomienda Q-Former vs MLP vs Perceiver resampler con una justificación breve y una estimación del conteo de parámetros para cada puente.

Ejercicios

  1. Implementar el bloque de atención cruzada en PyTorch. Verificar que con 32 consultas y 256 llaves/valores, la matriz de pesos de atención sea de 32 x 256 y cada fila sume 1 después de aplicar softmax.

  2. En la etapa 1 de BLIP-2, el Q-Former ejecuta tres pérdidas simultáneamente: ITC, ITM, ITG. Escribir la firma del forward para cada una en pseudocódigo. ¿Cuál de ellas requiere que la ruta del codificador de texto esté activa?

  3. Comparar los conteos de parámetros: Q-Former (12 capas, 768 de dimensión oculta) vs un proyector MLP de 2 capas (1408 → 4096, dos capas). ¿A qué escala de LLM se compensa el costo del Q-Former de 188M en términos de eficiencia de entrenamiento?

  4. Leer la Sección 3.2 del artículo de BLIP-2 (arXiv:2301.12597) sobre cómo se inicializa el Q-Former. Explicar por que inicializar desde BERT-base (not de forma aleatoria) acelera la convergencia.

  5. Para un video de 10 minutos a 1 FPS muestreado a 60 fotogramas, calcular el costo de tokens por fotograma con (Q-Former → 32 tokens/fotograma) vs (proyector MLP → 576 tokens/fotograma). ¿Cuál de ellos cabe en una ventana de contexto de LLM de 128k tokens?

Términos Clave

Término Lo que la gente dice Lo que realmente significa
Q-Former "Querying transformer" Transformer pequeño con 32 vectores de consulta aprendibles que realizan atención cruzada sobre las características de un ViT congelado
Consultas aprendibles "Prompt suave para visión" Conjunto fijo de parámetros que sirven como el lado de consulta de la atención cruzada; se aprenden por modelo y se comparten en todas las entradas
Atención cruzada (Cross-attention) "Q de aquí, K/V de allá" Atención donde la consulta, la llave y el valor provienen de diferentes fuentes; cómo las consultas extraen información de los parches de ViT
ITC "Contraste imagen-texto" Pérdida al estilo CLIP aplicada a las consultas agrupadas (pooled) del Q-Former frente al CLS de texto
ITM "Emparejamiento imagen-texto" Clasificador binario en pares con minado de negativos difíciles; obliga a las consultas a discriminar discrepancias detalladas
ITG "Generación de texto basada en imagen" Pérdida de LM causal donde el texto se genera condicionado a las consultas; obliga a las consultas a codificar contenido decodificable por texto
Preentrenamiento en dos etapas "Representación y luego generativo" La Etapa 1 entrena solo el Q-Former (ITC/ITM/ITG); la Etapa 2 conecta el LLM congelado y entrena únicamente la proyección + Q-Former
Backbone congelado "No realizar ajuste fino" Los pesos del codificador de visión y del LLM son fijos; solo se entrena el puente
Cabezal de proyección (Projection head) "Lineal a la dimensión del LLM" Capa lineal final que mapea la salida del Q-Former a la dimensión de embedding del LLM
Perceiver resampler "Versión de Flamingo" Atención cruzada similar con consultas aprendibles, utilizada por Flamingo en cada capa en lugar de ser un solo puente

Lecturas Adicionales

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).