El Cuello de Botella de Escalabilidad de CLIP

La pérdida InfoNCE de CLIP calcula un softmax sobre todo el lote. Para un lote de $N$ pares imagen-texto, la pérdida para una sola imagen $I_i$ al buscar su texto correspondiente es:

$$\mathcal{L}_i = -\log \frac{\exp(z_{ii} / \tau)}{\sum_{j=1}^{N} \exp(z_{ij} / \tau)}$$

donde $z_{ij} = \text{sim}(I_i, T_j)$ es la similitud coseno entre el embedding de la imagen $i$ y el embedding del texto $j$, y $\tau$ es el parámetro de temperatura aprendido. La pieza crítica a notar aquí es el denominador: $\sum_{j=1}^{N} \exp(z_{ij} / \tau)$. Esta suma recorre todos los $N$ textos del lote. Para calcular esta suma, cada puntuación de similitud $z_{i1}, z_{i2}, \ldots, z_{iN}$ debe estar disponible — lo que significa que cada GPU debe ver cada par.

En el entrenamiento distribuido a través de muchas GPUs, esto crea una restricción fuerte: la matriz de similitud completa de $N \times N$ debe sincronizarse antes de que pueda ocurrir la normalización softmax. Cada GPU calcula los embeddings para su mini-lote local, pero luego todos los embeddings deben recopilarse a través de todas las GPUs para que cada dispositivo pueda calcular el denominador completo. Para el tamaño de lote de entrenamiento de CLIP de $N = 32{,}768$, esa matriz de similitud tiene $32{,}768 \times 32{,}768 \approx 1{,}07$ mil millones de entradas. Recopilar todos los embeddings y calcular esta matriz se convierte en un cuello de botella de comunicación — las GPUs pasan un tiempo significativo esperándose mutuamente en lugar de hacer cómputo útil.

CLIP manejó esto distribuyendo el lote entre las GPUs y realizando una operación all-gather para recopilar todos los embeddings antes de calcular el softmax. Funciona, pero es costoso, añade complejidad de ingeniería, y el costo de comunicación crece linealmente con el número de GPUs. SigLIP ofrece una solución más limpia.

SigLIP: Pérdida Sigmoide para Pre-entrenamiento de Lenguaje-Imagen

SigLIP (Zhai et al., 2023) reemplaza la pérdida contrastiva basada en softmax (que requiere normalización global sobre todo el lote) con una sigmoide aplicada independientemente a cada par imagen-texto. La pérdida se convierte en:

$$\mathcal{L} = -\frac{1}{N^2} \sum_{i=1}^{N} \sum_{j=1}^{N} \left[ y_{ij} \log \sigma(z_{ij}) + (1 - y_{ij}) \log(1 - \sigma(z_{ij})) \right]$$

Esta fórmula parece densa, pero cada pieza tiene un propósito claro. Recorramos cada componente.

$z_{ij} = \text{sim}(I_i, T_j) \cdot e^\tau + b$ : la similitud escalada entre la imagen $i$ y el texto $j$. La similitud coseno sin procesar $\text{sim}(I_i, T_j)$ se encuentra en $[-1, 1]$, y luego se escala por una log-temperatura aprendida $e^\tau$ y se desplaza por un sesgo aprendido $b$. La exponencial asegura que la temperatura sea siempre positiva. El sesgo $b$ permite al modelo desplazar la frontera de decisión — sin él, una similitud coseno de 0 siempre se mapearía a $\sigma(0) = 0.5$, lo cual podría no ser el umbral correcto para distinguir coincidencias de no-coincidencias. Al aprender tanto $\tau$ como $b$, el modelo controla cuán agresivamente separa positivos de negativos.

$y_{ij} = \mathbb{1}[i = j]$ : una variable indicadora que es igual a 1 cuando la imagen $i$ y el texto $j$ son un par genuino emparejado (es decir, provienen del mismo ejemplo de entrenamiento), y 0 en caso contrario. En un lote de $N$ pares, hay exactamente $N$ positivos (la diagonal de la matriz $N \times N$, donde $i = j$) y $N^2 - N$ negativos (todas las entradas fuera de la diagonal, donde $i \neq j$). Para un lote de $N = 1{,}024$, eso es 1,024 positivos y aproximadamente 1,047,552 negativos — la gran mayoría de los pares son negativos, lo cual es típico del aprendizaje contrastivo.

$\sigma(z_{ij})$ : la función sigmoide, $\sigma(x) = 1 / (1 + e^{-x})$. Mapea la puntuación de similitud escalada a una probabilidad en el rango $(0, 1)$ — esta es la probabilidad predicha por el modelo de que $(I_i, T_j)$ sea un par genuino emparejado. Cuando $z_{ij}$ es grande y positivo, $\sigma(z_{ij}) \to 1$ (coincidencia con confianza). Cuando $z_{ij}$ es grande y negativo, $\sigma(z_{ij}) \to 0$ (no-coincidencia con confianza). Cuando $z_{ij} = 0$, $\sigma(0) = 0.5$ (máxima incertidumbre).

Los dos términos dentro de los corchetes implementan la entropía cruzada binaria para cada par:

  • Cuando $y_{ij} = 1$ (par genuino): solo sobrevive el primer término, dando $\log \sigma(z_{ij})$. Esto se maximiza cuando $\sigma(z_{ij}) \to 1$, es decir, cuando el modelo predice con confianza que este par imagen-texto es una coincidencia. Si el modelo asigna $\sigma(z_{ij}) = 0.99$, la contribución es $\log(0.99) \approx -0.01$ — una penalización pequeña. Si el modelo está incierto ($\sigma(z_{ij}) = 0.5$), la contribución es $\log(0.5) \approx -0.69$ — una penalización mayor. Si el modelo se equivoca ($\sigma(z_{ij}) = 0.01$), es $\log(0.01) \approx -4.6$ — una penalización muy grande.
  • Cuando $y_{ij} = 0$ (no-coincidencia): solo sobrevive el segundo término, dando $\log(1 - \sigma(z_{ij}))$. Esto se maximiza cuando $\sigma(z_{ij}) \to 0$, es decir, cuando el modelo predice con confianza que este par NO es una coincidencia. La estructura de penalización es simétrica: una predicción correcta con confianza ($\sigma = 0.01$) da $\log(0.99) \approx -0.01$, mientras que una predicción incorrecta con confianza ($\sigma = 0.99$) da $\log(0.01) \approx -4.6$.

Esto es exactamente la entropía cruzada binaria estándar (la misma pérdida utilizada en regresión logística), aplicada independientemente a cada uno de los $N^2$ pares imagen-texto del lote.

$\frac{1}{N^2}$ : normaliza por el número total de pares (tanto positivos como negativos). Sin esta normalización, la pérdida escalaría con el tamaño del lote, dificultando el ajuste de hiperparámetros entre diferentes tamaños de lote. Con ella, la pérdida es un promedio sobre todos los pares, dando una escala consistente independientemente de $N$.

Por qué esto elimina el cuello de botella: cada término $(i, j)$ dentro de la doble suma depende solo de los embeddings de la imagen $i$ y el texto $j$ — no hay denominador que sume sobre todos los demás pares. Compárese con el softmax de CLIP, donde calcular la pérdida para la imagen $i$ requiere las puntuaciones de similitud $z_{i1}, z_{i2}, \ldots, z_{iN}$ entre la imagen $i$ y cada texto del lote. En SigLIP, el término para el par $(i, j)$ necesita solo $z_{ij}$ — una puntuación de similitud, que involucra dos embeddings. Esto significa que diferentes GPUs pueden calcular su subconjunto local de términos $(i, j)$ independientemente, usando solo los embeddings almacenados en ese dispositivo, y luego promediar los resultados. No se requiere sincronización global de la matriz de similitud. Cada GPU calcula la pérdida para sus pares locales, y solo los valores escalares de pérdida (no la matriz completa de embeddings) necesitan ser agregados.

💡 En la práctica, SigLIP logra un rendimiento comparable o mejor que CLIP siendo más simple de distribuir (Zhai et al., 2023). SigLIP-B/16 entrenado con los mismos datos que CLIP-B/16 tiende a igualar o superar su rendimiento en ImageNet zero-shot, y la brecha se amplía con más GPUs porque SigLIP escala más elegantemente — añadir dispositivos proporciona una aceleración casi lineal sin la sobrecarga de comunicación de recopilar embeddings para un softmax global.

DINOv2: Visión Auto-Supervisada Sin Texto

Tanto CLIP como SigLIP aprenden representaciones visuales alineando imágenes con texto — necesitan pares imagen-texto para el entrenamiento. DINOv2 (Oquab et al., 2024) toma un enfoque fundamentalmente diferente: aprende representaciones visuales usando solo imágenes , sin texto alguno. La idea clave es la auto-destilación — el modelo aprende intentando igualar sus propias salidas a través de diferentes vistas de la misma imagen.

DINOv2 utiliza un marco de estudiante-profesor con tres componentes principales:

  • Dos redes: un estudiante $f_s$ y un profesor $f_t$, ambos con la misma arquitectura (un Vision Transformer). De manera crucial, el profesor no se entrena con descenso de gradiente. En su lugar, sus pesos son una media móvil exponencial (EMA) de los pesos del estudiante, actualizados después de cada paso de entrenamiento como: $\theta_t \leftarrow m \cdot \theta_t + (1 - m) \cdot \theta_s$, donde $m \approx 0.996$. Esto significa que los pesos del profesor son una versión suavizada y de evolución lenta de los del estudiante — después de cada actualización, el profesor se mueve solo un 0.4% hacia los pesos actuales del estudiante. Esta evolución lenta proporciona un objetivo de entrenamiento estable que evita los problemas de colapso que afectan a los métodos auto-supervisados ingenuos.
  • Dos vistas de la misma imagen: a partir de una sola imagen de entrenamiento, se crea un recorte "global" (que cubre una porción grande de la imagen, típicamente 50-100%) y un recorte "local" (que cubre una porción más pequeña, típicamente 5-50%). Ambos recortes representan la misma escena subyacente desde diferentes perspectivas y escalas. El modelo debe reconocer que ambas vistas representan el mismo contenido.
  • Entrada asimétrica: el estudiante ve el recorte local y el profesor ve el recorte global. El estudiante debe predecir la salida del profesor desde su vista limitada y ampliada. Esto obliga al estudiante a aprender representaciones que capturen el contexto más amplio de la escena — debe inferir cómo se ve la imagen completa a partir de solo un pequeño fragmento.

La pérdida es una entropía cruzada entre las distribuciones de salida del profesor y del estudiante:

$$\mathcal{L}_{\text{DINO}} = -\sum_{k} p_t^{(k)} \log p_s^{(k)}$$

Desglosemos cada parte de esta fórmula.

$p_t^{(k)}$ y $p_s^{(k)}$ son distribuciones de probabilidad sobre $K$ dimensiones, producidas al aplicar un softmax con temperatura a las salidas del token CLS del profesor y del estudiante respectivamente. Específicamente, $p_t^{(k)} = \exp(g_t^{(k)} / \tau_t) / \sum_{k'} \exp(g_t^{(k')} / \tau_t)$ donde $g_t$ son los logits de salida del profesor y $\tau_t$ es la temperatura del profesor, y análogamente para el estudiante con temperatura $\tau_s$. El profesor usa una temperatura más baja ($\tau_t \approx 0.04$) que produce una distribución más aguda y concentrada — concentra la masa de probabilidad en menos dimensiones, efectivamente diciendo "estoy seguro de que esta imagen activa fuertemente estas características particulares". El estudiante usa una temperatura más alta ($\tau_s \approx 0.1$), produciendo una distribución más suave y dispersa. La pérdida de entropía cruzada entonces empuja al estudiante a agudizar su propia distribución para coincidir con las predicciones confiadas del profesor.

La suma $\sum_k$ recorre todas las $K$ dimensiones de la distribución de salida. Cada dimensión puede considerarse como un "concepto" visual aprendido — no clases predefinidas como en el aprendizaje supervisado, sino características abstractas que el modelo descubre a través del entrenamiento. La entropía cruzada se minimiza cuando $p_s = p_t$, es decir, cuando la distribución del estudiante coincide exactamente con la del profesor. Si el profesor asigna alta probabilidad a la dimensión $k$ (lo que significa que esta característica está fuertemente presente en la vista global), el estudiante también debe asignar alta probabilidad a $k$ solo desde su vista local.

¿Por qué funciona esto? El profesor (con pesos EMA) proporciona un objetivo estable y de evolución lenta. Debido a que sus pesos cambian gradualmente, no persigue las actualizaciones rápidas del estudiante — actúa como un consenso suavizado de dónde ha estado el estudiante en los pasos de entrenamiento recientes. El estudiante intenta coincidir con este objetivo estable. Debido a que el estudiante solo ve un recorte local mientras que el profesor ve la imagen completa, el estudiante debe aprender a inferir la estructura global a partir de patrones locales. Si el profesor ve una escena de playa y activa con confianza las características de "arena", "agua" y "cielo", el estudiante — viendo solo un primer plano de arena con algunas conchas — debe aprender que este patrón local implica el contexto más amplio. A lo largo de muchos pasos de entrenamiento, esto obliga al estudiante a construir representaciones que capturen relaciones espaciales ricas: cómo las partes se relacionan con los todos, cómo las texturas se relacionan con los objetos, cómo los detalles locales se relacionan con la estructura global de la escena.

También existe un mecanismo crucial para prevenir el colapso. Sin ninguna salvaguarda, el profesor podría simplemente producir una distribución uniforme para cada imagen (la solución trivial donde tanto el profesor como el estudiante coinciden en una constante sin sentido). DINOv2 previene esto mediante el centrado de las salidas del profesor: resta una media corriente de los logits del profesor antes de aplicar el softmax. Esto obliga al profesor a producir salidas diferentes para diferentes imágenes, porque la media se resta y solo las diferencias relativas sobreviven.

💡 Las características de DINOv2 tienden a sobresalir en tareas espaciales: estimación de profundidad, segmentación semántica, detección de objetos — tareas donde las características de CLIP suelen ser más débiles (Oquab et al., 2024). Esto se debe a que CLIP optimiza para el alineamiento global imagen-texto (qué hay en la imagen), mientras que DINOv2 optimiza para la consistencia visual local-a-global (dónde están las cosas y cómo se relacionan espacialmente). Cuando necesitas saber que la mesa está delante de la silla y la taza está sobre la mesa, las características de DINOv2 tienden a codificar esas relaciones espaciales de manera más fiel que las de CLIP.

Cuándo Usar Cuál

Ahora tenemos tres codificadores de visión en nuestra caja de herramientas — CLIP, SigLIP y DINOv2 — cada uno optimizado para cosas diferentes. Entender cuándo usar cuál es importante para construir sistemas visión-lenguaje efectivos.

  • CLIP / SigLIP: mejor cuando necesitas alineamiento visión-lenguaje — clasificación zero-shot, recuperación texto-imagen, o como backbone visual para un VLM. Ambos producen embeddings que viven en un espacio compartido con el texto, por lo que puedes comparar directamente imágenes contra descripciones lingüísticas. SigLIP es generalmente preferido sobre CLIP para nuevos proyectos: logra una precisión comparable o mejor con un entrenamiento distribuido más simple, y la pérdida sigmoide evita la complejidad de ingeniería de recopilar embeddings para la normalización softmax.
  • DINOv2: mejor cuando necesitas características espaciales y geométricas ricas — estimación de profundidad, segmentación semántica, localización de objetos, estimación de pose — y no necesitas alineamiento con texto. Los embeddings de DINOv2 llevan información espacial detallada porque el objetivo de auto-destilación obliga al modelo a entender cómo los parches locales se relacionan con la escena global. Sin embargo, las características de DINOv2 no viven en un espacio compartido con el texto, por lo que no puedes usarlas directamente para clasificación zero-shot con prompts lingüísticos.
  • Ambos juntos: algunos modelos usan SigLIP para la comprensión semántica Y DINOv2 para las características espaciales, concatenando las salidas de ambos codificadores antes de alimentarlas al modelo posterior. Este enfoque de codificador dual captura información complementaria: SigLIP le dice al modelo qué hay en la imagen (contenido semántico alineado con el lenguaje), mientras que DINOv2 le dice al modelo dónde están las cosas y cómo se relacionan espacialmente (estructura geométrica). Por ejemplo, OpenVLA (cubierto en el track de VLA) concatena las características de SigLIP y DINOv2 para dar a su política robótica tanto la comprensión semántica necesaria para interpretar comandos lingüísticos ("recoge la taza roja") como la precisión espacial necesaria para ejecutar acciones físicas (alcanzar la ubicación correcta).

La intuición de por qué estas características son complementarias viene directamente de los objetivos de entrenamiento. CLIP y SigLIP están entrenados para responder la pregunta "¿coincide esta imagen con este texto?" — una pregunta global y semántica. La pérdida recompensa comprimir una imagen completa en un solo vector que capture su significado. DINOv2 está entrenado para responder "¿puedes predecir la escena completa a partir de este recorte local?" — una pregunta espacial y estructural. La pérdida recompensa preservar las relaciones geométricas entre las partes de la imagen. Ninguno de los dos objetivos por sí solo captura todo, pero juntos cubren tanto el "qué" como el "dónde".

Quiz

Pon a prueba tu comprensión de la pérdida sigmoide de SigLIP, la auto-destilación de DINOv2 y cuándo usar cada codificador.

¿Cuál es el problema clave de ingeniería con la pérdida basada en softmax de CLIP que SigLIP resuelve?

En la pérdida de SigLIP, ¿por qué puede calcularse cada par $(i, j)$ independientemente?

¿Cómo aprende DINOv2 características visuales sin ninguna supervisión de texto?

¿Por qué algunos VLMs (como OpenVLA) usan tanto codificadores SigLIP como DINOv2 en lugar de solo uno?