English · Español
04 — LLaVA y el Paisaje de Eval Visión-Lenguaje¶
🇪🇸 LLaVA (Liu et al. 2023) es el modelo abierto más influyente de la familia visión-lenguaje. La receta cabe en una página: encoder de imagen pre-entrenado (CLIP) + LLM pre-entrenado (Llama / Vicuna) + un proyector pequeño (MLP) que mapea features de CLIP al espacio del LLM, entrenado en dos fases. Esta sección cubre la receta, el truco del proyector, y el paisaje de benchmarks (MM-Bench, MME, MMMU).
Este fichero responde: ¿cómo funciona LLaVA mecánicamente, y cómo se evalúa un modelo multimodal?
Referencias: - Liu et al., Visual Instruction Tuning (LLaVA), NeurIPS 2023. (arXiv:2304.08485) - Liu et al., Improved Baselines with Visual Instruction Tuning (LLaVA-1.5), CVPR 2024. (arXiv:2310.03744) - Liu et al., MM-Bench, ECCV 2024. (arXiv:2307.06281) - Fu et al., MME: A Comprehensive Evaluation Benchmark for Multimodal LLMs, 2023. (arXiv:2306.13394) - Yue et al., MMMU, CVPR 2024. (arXiv:2311.16502)
La receta de LLaVA¶
LLaVA es deliberadamente simple. La arquitectura es:
[image] → CLIP-ViT-L/14 (frozen, 300M params) → 256 patch features × 1024 dim
↓
PROJECTOR (trainable, ~20M params)
Two-layer MLP: 1024 → 4096 → 4096
↓
256 image tokens × 4096 dim
│
[text prompt] ─────────────────────────────────────┐ │
↓ ↓
Vicuna-7B / 13B (LLM)
Concat: [image tokens] [text tokens]
↓
standard causal LM
↓
generated response
Tres componentes, con tres roles distintos:
- CLIP-ViT-L/14 (congelado). Provee la representación de imagen. Específicamente: las features de la capa penúltima (no el
[CLS]post-proyección que optimizó la pérdida de CLIP) — hay 256 patch tokens a resolución \(224/14 = 16\) × \(16\). 1024-dim cada uno. - El proyector (entrenable, innovación clave). Un MLP pequeño que mapea cada feature de parche CLIP 1024-dim a un "token LLM" 4096-dim. Se producen 256 de esos tokens por imagen.
- Vicuna-7B (LLM). Un LLaMA pre-entrenado, instruction-tuned. En la etapa 2 de LLaVA se hace fine-tune completo (o en LLaVA-1.5, se adapta con LoRA) sobre datos de instrucción multi-modal.
Por qué el proyector es el paso barato-pero-no-trivial¶
Pregunta ingenua: ¿por qué no usar el embedding 1024-dim alineado con texto que ya tiene CLIP directamente?
Respuesta: porque el embedding de CLIP es un vector por imagen. El LLM necesita muchos tokens a los que atender espacialmente. El proyector coge las 256 features de parche (que retienen estructura espacial) y las mapea a la dim de embedding del LLM, así que cada imagen se convierte en 256 "tokens" con grounding espacial.
El proyector es:
class Projector(nn.Module):
def __init__(self, d_clip=1024, d_llm=4096):
super().__init__()
self.fc1 = nn.Linear(d_clip, d_llm)
self.act = nn.GELU()
self.fc2 = nn.Linear(d_llm, d_llm)
def forward(self, x): # x: (B, 256, 1024)
return self.fc2(self.act(self.fc1(x))) # (B, 256, 4096)
Conteo de params: \(1024 \cdot 4096 + 4096 \cdot 4096 \approx 21\) M. 0.3% de los params del LLM 7B.
Por qué este es el paso clave:
- Atraviesa el modality gap (
theory/00-motivation.md) — las features de CLIP viven en un cono de \(\mathbb{R}^d\); los embeddings de entrada del LLM viven en otro. El proyector aprende la transformación. - Es el único componente entrenable en la etapa 1 de LLaVA (todo lo demás está congelado). El modelo aprende grounding multi-modal puramente a través del proyector.
- Puede ser una única capa lineal (LLaVA-1.0) o un MLP de 2 capas (LLaVA-1.5). La versión MLP es significativamente mejor — la no-linealidad importa aquí, porque la transformación de puente-de-modalidad no es lineal.
Entrenamiento en dos etapas¶
Etapa 1 — Pretraining de alineamiento de features.
- Entrenable: solo el proyector. LLM y encoder visual ambos congelados.
- Datos: 558k pares (imagen, caption) de LAION/CC-3M, filtrados a captions cortos.
- Tarea: dada la imagen, generar el caption. Cross-entropy estándar.
- Cómputo: ~4 horas-GPU en una sola A100.
El objetivo de la etapa 1 es solo hacer que el proyector emita tokens que el LLM pueda usar. El LLM todavía no sabe tareas visuales; solo aprende a "describir lo que dicen los tokens de imagen".
Etapa 2 — Visual instruction tuning.
- Entrenable: proyector + LLM (fine-tuning completo en LLaVA-1.0; LoRA en LLaVA-1.5). El encoder visual sigue congelado.
- Datos: 158k (LLaVA-1.0) o ~600k (LLaVA-1.5) pares de instrucción. Generados alimentando captions de imagen + bounding boxes a GPT-4 (solo-texto en su momento) y pidiéndole que generara diálogos multi-turno visión-lenguaje. Sintéticos pero de alta calidad.
- Tarea: dada la imagen + pregunta, generar respuesta.
Los datos de instrucción sintéticos son la intuición que hizo funcionar a LLaVA. Los datos reales anotados por humanos de diálogo VLM son escasos; GPT-4 puede producir cantidades arbitrarias.
Deltas de LLaVA-1.5¶
LLaVA-1.5 (Oct 2023) fue un conjunto de pequeños arreglos que llevaron a LLaVA de "demo de investigación" a "competitivo con GPT-4V en muchos benchmarks":
- MLP proyector en lugar de lineal único (+1.5 puntos en la mayoría de benchmarks).
- Imágenes de resolución más alta. \(336 \times 336\) en lugar de \(224 \times 224\), dando 576 tokens de imagen en lugar de 256.
- Mejores datos de instrucción. Añadidos datos de tareas académicas (OCR, gráficos, etc.).
- LoRA para el fine-tune del LLM.
LLaVA-1.5-13B bate a LLaVA-1.0-13B por ~10 puntos en MM-Bench a pesar de entrenar con ~\(1/10\) del cómputo.
Paisaje de evaluación¶
No puedes shipear un VLM sin evals. Las evals no correlacionan perfectamente — un modelo puede ganar una y perder otra. Saber qué mide cada una es relevante-para-entrevista.
MM-Bench (Liu et al. 2024)¶
- Qué mide: percepción y razonamiento a través de 20 dimensiones de habilidad (localización de objetos, reconocimiento de acción, OCR, clasificación de grano fino, razonamiento espacial, etc.).
- Formato: ~3000 preguntas de opción múltiple, cada una atada a una dimensión de habilidad.
- Scoring: precisión por dimensión + media. El desglose por-dimensión es lo que hace a MM-Bench útil diagnósticamente — ves qué habilidad perceptual le falta al modelo.
- Fortaleza: el formato de opción múltiple es automático de calificar. El desglose por-habilidad es accionable.
- Debilidad: la opción múltiple puede ser gamed por priors de lenguaje (el modelo a veces puede elegir la respuesta correcta sin mirar la imagen). MM-Bench mitiga con una "eval circular" que baraja el orden de respuestas.
- Rango de score típico: los VLMs open SOTA (LLaVA-1.5-13B, IDEFICS-80B) puntúan ~60–70 de media. GPT-4V puntúa ~75. LLaVA-1.5-7B puntúa ~60.
MME (Fu et al. 2023)¶
- Qué mide: 14 tareas de percepción (existencia, conteo, posición, OCR, etc.) + cognición (razonamiento de sentido común, cálculo, razonamiento sobre código).
- Formato: ~2000 preguntas sí/no. Cada imagen tiene 2 preguntas: una factualmente verdadera, una falsa. El scoring requiere que ambas sean correctas.
- Scoring: Percepción (máx 2000) + Cognición (máx 800) reportados por separado.
- Fortaleza: sí/no es robusto a priors de lenguaje. El formato de preguntas pareadas elimina el modo de fallo "el modelo siempre dice sí".
- Debilidad: las preguntas binarias no pueden medir matiz. Un modelo que siempre identifica correctamente "¿hay un gato?" pero no puede describir el gato puntuaría bien.
- Rango de score típico: GPT-4V puntúa Percepción ~1500, Cognición ~500. LLaVA-1.5-13B puntúa ~1530, ~300.
MMMU (Yue et al. 2024)¶
- Qué mide: razonamiento multimodal nivel-universitario a través de 30 asignaturas (Arte, Negocios, Ciencia, Salud, Humanidades, Tecnología e Ingeniería). Preguntas tomadas de exámenes universitarios, libros de texto y quizzes.
- Formato: ~11\,500 preguntas de opción múltiple. Las imágenes incluyen diagramas, gráficos, fórmulas, ilustraciones.
- Scoring: precisión. Reportado global y por-asignatura.
- Fortaleza: mide razonamiento, no solo percepción. La imagen es crítica — sin ella, la precisión cae a azar. Muchas preguntas requieren conocimiento de dominio + interpretación visual.
- Debilidad: muy difícil. Incluso GPT-4V puntúa solo ~55%. La mayoría de VLMs open puntúan 30–40%. Esta es en parte la brecha que el pretraining de laboratorio frontera te da sobre open-source.
- Por qué importa en 2026: MMMU es el benchmark canónico de "¿es tu modelo realmente inteligente multi-modalmente?". MM-Bench te cuenta sobre percepción; MMMU te cuenta sobre razonamiento. Los modelos cerrados top (GPT-4.5, Claude 4, Gemini 2) están empujando esto a ~70%; los modelos open todavía rezagados a ~50%.
Una heurística para interpretar scores¶
| Si tu modelo puntúa… | …probablemente pueda… | …pero no puede… |
|---|---|---|
| MM-Bench < 50 | Identificar objetos | Contar, localizar, o razonar espacialmente |
| MM-Bench 50–65 | Identificar y localizar | Razonamiento multi-paso, OCR en docs ruidosos |
| MM-Bench > 70 | La mayoría de tareas de percepción | Razonamiento nivel-universitario |
| MMMU < 40 | VQA básico | Razonamiento anclado a dominio |
| MMMU 40–55 | Algo de razonamiento científico | Problemas multi-modal cargados de matemáticas |
| MMMU > 55 | Clase laboratorio-frontera | (territorio frontera, 2026) |
Benchmarks para los que LLaVA-1.5 fue tuneado (y contra los que)¶
- LLaVA-1.5 fue tuneado fuertemente sobre datos estilo MM-Bench → puntúa bien ahí.
- No fue tuneado para MMMU → rinde peor relativo a modelos cerrados.
Este es un patrón común. El benchmark en el que mejor puntúa un modelo es a menudo el que fue entrenado para optimizar. Cuando evalúes un VLM para un caso de uso real, corre tu eval sobre tus datos — los números publicados son un punto de partida, no una respuesta final.
Cómo conecta LLaVA con el tutor de gramática (Fase 32)¶
La extensión multimodal natural del tutor de gramática §A13 (de theory/00-motivation.md): el usuario sube una foto de una frase, el tutor marca errores de forma verbal. Usando arquitectura estilo LLaVA, esto sería:
[photo of sentence] → CLIP-ViT (frozen) → 256 patch features
↓
Projector (trainable, ~20M params)
↓
256 image tokens
↓
Vicuna-7B (or smaller — Phi-3, Llama-3-1B-Instruct)
System prompt: "You are an English grammar tutor.
Look at the photo. Find the verb. Identify its tense.
Check that subject and verb agree. Output the
corrected sentence + explanation."
↓
Generated response
La respuesta correcta en realidad no es hacer esto — como argumenta theory/03-fusion-strategies.md, OCR + LLM solo-texto es el pipeline más inteligente. Pero si quisieras hacer demo de un capstone multimodal, esta es la receta.
Los datos de instrucción del tutor de gramática para la etapa 2 serían: tomar los 20 verbos × 5 tiempos × 3 personas de §A13 = 300 frases correctas y 300 frases incorrectas (con errores plantados), renderizar cada una como una foto de una página de libro de texto (usando Pillow), parear con la versión corregida + explicación. ~600 pares de instrucción. ¿Etapa-2-entrenable en CPU? No (demasiado lento). ¿Un día-GPU? Sí.
Este es el camino para el que X2 prepara. Los labs no llegan ahí (una extensión es suficiente); pero la receta es inequívoca.
Resumen¶
- Receta de LLaVA: CLIP congelado + MLP proyector + LLM, entrenamiento en dos etapas (pretraining de alineamiento + visual instruction tuning).
- El proyector es el paso barato-pero-no-trivial. ~20M params puentean un encoder visual de ~300M y un LLM de ~7B. La no-linealidad importa.
- Paisaje de eval: MM-Bench (percepción, por-habilidad) + MME (percepción sí/no + cognición) + MMMU (razonamiento nivel-universitario). No escojas un VLM basado en un único score.
- Para el tutor de gramática: la extensión multimodal existe como receta, pero solo-texto + OCR es la respuesta correcta-en-ingeniería.
Siguiente: lab/00-tiny-vit-on-grammar-icons.md — implementa un ViT de 4 bloques sobre el bloque transformer de la Fase 17 y entrénalo sobre íconos sintéticos.