Contrastive Learning
El aprendizaje contrastivo entrena embeddings acercando los pares coincidentes y alejando otras muestras. Explica InfoNCE, SimCLR, MoCo, CLIP y el código.
El aprendizaje contrastivo entrena un modelo para que genere incrustaciones en las que los pares de muestras coincidentes, llamados positivos, queden cerca, y las muestras no coincidentes, llamadas negativas, queden lejos. Los pares pueden proceder de los propios datos, como dos recortes aumentados de una misma foto, o de datos emparejados de forma natural, como una imagen y su pie de foto, por lo que el aprendizaje contrastivo no necesita etiquetas de clase. Es una de las principales familias de métodos de aprendizaje autosupervisado para imágenes, junto con la reconstrucción de partes enmascaradas y la autodestilación. Los codificadores entrenados así generan características que pueden transferirse a la detección, la clasificación y la recuperación; el mismo objetivo también entrena modelos de visión y lenguaje, como CLIP, que después puede clasificar imágenes usando únicamente texto mediante el aprendizaje de tiro cero.
Cómo funciona el aprendizaje contrastivo#
Un método contrastivo consta de tres partes: una forma de crear pares positivos, un codificador que transforma cada muestra en un embedding normalizado y una función de pérdida que compara similitudes. En SimCLR, Ting Chen y sus colegas de Google crearon dos vistas de cada imagen mediante recortes aleatorios, distorsión del color y desenfoque; codificaron ambas con una ResNet compartida seguida de una pequeña cabeza de proyección y trataron las demás imágenes del lote como negativas:
La ampliación de datos define qué aprende a ignorar el modelo. Como los dos recortes de una imagen deben asignarse a puntos cercanos, el codificador aprende que los cambios de posición, escala y color no alteran lo que muestra la imagen y conserva las características que la distinguen de todas las demás. Con una ResNet-50 cuatro veces más ancha que la estándar, un clasificador lineal entrenado con las características congeladas de SimCLR alcanzó una exactitud top-1 del 76,5 % en ImageNet, igualando a una ResNet-50 supervisada.
Funciones de pérdida contrastiva#
- Pérdida contrastiva por pares: la función de pérdida de 2006 de Raia Hadsell, Sumit Chopra y Yann LeCun acerca cada par positivo y aleja cada par negativo hasta que los dos quedan separados por un margen m como mínimo.
- Pérdida por tripletes: compara un ancla con un ejemplo positivo y uno negativo, y exige que el positivo esté más cerca por un margen determinado. Google entrenó con ella los embeddings faciales de FaceNet en 2015.
- InfoNCE: compara un positivo con muchos negativos a la vez. Si se dividen las similitudes s por una temperatura τ, la pérdida de un ancla es −log[exp(s₊/τ) / Σⱼ exp(sⱼ/τ)], una entropía cruzada de softmax en la que el positivo es la clase correcta entre todos los candidatos. Aaron van den Oord y sus colegas le dieron este nombre en codificación predictiva contrastiva en 2018; las pérdidas NT-Xent de SimCLR y la de CLIP son variantes de InfoNCE.
- Pérdida sigmoide: SigLIP puntúa cada par como una coincidencia independiente de sí o no mediante una sigmoide, así que la función de pérdida no necesita normalizarse en todo el lote.
En PyTorch, InfoNCE se reduce a una entropía cruzada sobre una matriz de similitud cuya diagonal contiene los positivos:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Stand-in embeddings for 8 images, a second view of each (row i of both is a positive pair),
# and 8 unrelated images
view1 = F.normalize(torch.randn(8, 128), dim=1)
view2 = F.normalize(view1 + 0.1 * torch.randn(8, 128), dim=1)
unrelated = F.normalize(torch.randn(8, 128), dim=1)
# InfoNCE: cosine similarities divided by a temperature, then cross-entropy where
# each row's positive (the diagonal) is the correct class among all 8 candidates
temperature = 0.1
targets = torch.arange(8)
for name, keys in [("Augmented views", view2), ("Unrelated images", unrelated)]:
logits = view1 @ keys.T / temperature
print(f"{name}: loss {F.cross_entropy(logits, targets):.3f}")Imprime Augmented views: loss 0.016 y Unrelated images: loss 2.505. Cuando el positivo de cada fila es claramente la clave más similar, la pérdida se aproxima a cero. Con claves no relacionadas, supera ln 8 ≈ 2.08, la pérdida de una conjetura uniforme entre ocho candidatos, porque dividir por una temperatura de 0.1 convierte las similitudes debidas al azar en conjeturas erróneas con confianza. Una temperatura más baja agudiza la softmax y concentra la pérdida en los negativos más difíciles. MoCo usa τ = 0.07, y CLIP inicializa su temperatura aprendida con el mismo valor.
Negativos, tamaño del lote y variantes#
InfoNCE mejora con más negativos, por lo que su número es un factor de coste clave. SimCLR los extraía de lotes muy grandes. MoCo, desarrollado por Kaiming He y sus colegas de Facebook AI Research, mantenía una cola de 65.536 embeddings de lotes recientes como negativos y los codificaba con una copia del codificador actualizada lentamente por impulso; así, el número de negativos no dependía del tamaño del lote. Los negativos aleatorios pueden ser falsos negativos, como otra foto de la misma raza de perro, y los negativos muy fáciles aportan poco aprendizaje; por eso, la selección de negativos difíciles busca muestras que puedan confundirse. El aprendizaje contrastivo supervisado (SupCon) utiliza etiquetas para tratar como positivos todos los ejemplos de una misma clase. Los métodos no contrastivos, como BYOL, SimSiam y DINO, prescinden por completo de los negativos y evitan que todas las entradas colapsen en el mismo embedding mediante redes asimétricas, gradientes detenidos o centrado.
Aprendizaje contrastivo y conceptos relacionados#
- Aprendizaje de métricas: tarea más amplia de aprender una función de distancia, de la que proceden las pérdidas contrastivas y por tripletes. Hoy en día, «aprendizaje contrastivo» suele referirse a la variante autosupervisada con muchos negativos, popularizada por SimCLR y MoCo.
- Autocodificadores: aprenden reconstruyendo la entrada, así que sus características deben conservar los detalles a nivel de píxel. Las características contrastivas solo conservan lo que distingue una muestra de las demás.
- JEPA: predice los embeddings de regiones ocultas de una imagen a partir de las visibles y aprende en el espacio de embeddings sin pares negativos.
- Aprendizaje supervisado: entrena el modelo con un conjunto fijo de clases asignadas por personas, mientras que el preentrenamiento contrastivo solo necesita una regla para determinar qué muestras coinciden.
Aplicaciones#
- Modelos de visión y lenguaje: CLIP entrenó un codificador de imágenes y uno de texto con 400 millones de pares de imágenes y pies de foto, usando lotes de 32.768 elementos, para que las indicaciones de texto puedan clasificar y recuperar imágenes. Los modelos YOLOE-26 de Ultralytics codifican los nombres de las clases con el codificador de texto MobileCLIP2 de Apple, entrenado con un objetivo contrastivo al estilo de CLIP, y puntúan cada región candidata frente a esos embeddings de texto en una cabeza contrastiva; así,
set_classes(["forklift", "pallet"])convierte los mismos pesos en un detector para nuevas categorías. - Búsqueda semántica: los embeddings de imágenes y texto entrenados de forma contrastiva se almacenan en una base de datos vectorial y se consultan por similitud.
- Preentrenamiento con pocas etiquetas: en ámbitos como el análisis de imágenes médicas, donde escasean las etiquetas de expertos, el preentrenamiento contrastivo con exploraciones sin etiquetar proporciona un modelo base que el ajuste adapta con un pequeño conjunto etiquetado.
- Reconocimiento facial y reidentificación: las pérdidas contrastivas y por tripletes entrenan embeddings en los que las fotos de una misma persona u objeto quedan próximas entre sí. Los embeddings de 128 dimensiones de FaceNet alcanzaron una exactitud del 99,63 % en el benchmark Labeled Faces in the Wild.










