$ cd ../
SimCLR — Self-Supervised Learning contrastivo — bash

user@devops:~$ cat README.md

SimCLR — Self-Supervised Learning contrastivo

# Descripción

SimCLR (Chen, Kornblith, Norouzi & Hinton, 2020) implementado desde cero en PyTorch sobre Fashion-MNIST (3,000 imágenes de train, 1,000 de test, seed 42, CPU). La idea central del self-supervised learning contrastivo: una red aprende representaciones visuales útiles SIN ninguna etiqueta, solo maximizando la similitud entre dos vistas aumentadas de la misma imagen (par positivo) y minimizándola frente a las demás del batch (negativos). Arquitectura: encoder CNN de 109,632 params (Conv 1→32→64→128ch con BatchNorm + MaxPool + AdaptiveAvgPool + FC 128) y proyección MLP de 24,768 params (FC 128→128 ReLU → FC 128→64, salida L2-normalizada en la esfera unitaria). Aumentaciones SimCLR: RandomResizedCrop (scale 0.55–1.0), flip horizontal y color jitter — el crop aleatorio es la clave del paper. Loss NT-Xent (InfoNCE) con temperatura τ=0.5 y batch de 256 (512 vistas, 1 positivo + 510 negativos por imagen): Adam lr 3e-3 con cosine annealing, 25 épocas, ~3 min CPU, loss 5.36→4.59. Evaluación con el protocolo estándar del paper (eval lineal: regresión logística sobre embeddings congelados): random-init 41.3% vs SimCLR 76.8% (+35.5 pp) vs supervisado end-to-end 76.5% — SimCLR iguala al supervisado con cero etiquetas y −0.3 pp. La calidad de representación crece con el entrenamiento (probe cada 3 épocas: 71.9%→76.8%). kNN sobre embeddings sin entrenar clasificador: SimCLR > random en todos los k (k=10: 73.9% vs 67.1%). t-SNE: SimCLR agrupa por clase (Trouser, Sneaker, Bag forman clusters), random-init queda disperso. Matriz de similitud coseno: la diagonal (pares positivos) domina. Checkpoint determinista que evita re-entrenar. 7 visualizaciones.

# Características principales

$ Self-Supervised Learning con SimCLR (Chen et al. 2020) desde cero en PyTorch: 0 etiquetas usadas en el entrenamiento, solo pares de vistas aumentadas

$ Loss NT-Xent (InfoNCE) con temperatura τ=0.5: 1 par positivo + 510 negativos por imagen en batch de 256 (512 vistas)

$ Encoder CNN de 109,632 params (Conv 32→64→128ch, BN, MaxPool, AdaptiveAvgPool) + proyección MLP 24,768 params con salida L2-normalizada

$ Aumentaciones SimCLR: RandomResizedCrop (scale 0.55–1.0), flip horizontal y color jitter — dos vistas independientes por imagen

$ Eval lineal (protocolo estándar): SimCLR 76.8% iguala al supervisado end-to-end 76.5% y supera al random-init 41.3% en +35.5 pp

$ La representación mejora con el entrenamiento: probe lineal cada 3 épocas de 71.9% a 76.8%

$ kNN sobre embeddings sin entrenar: SimCLR supera a random en todos los k (k=10: 73.9% vs 67.1%)

$ 7 visualizaciones: pares de aumentaciones, loss NT-Xent, evolución de la eval lineal, comparativa de baselines, t-SNE, kNN y matriz de similitud

# Galería

Terminal del proyecto
SimCLR — Self-Supervised Learning contrastivo - Terminal del proyecto
Pares de aumentaciones SimCLR
SimCLR — Self-Supervised Learning contrastivo - Pares de aumentaciones SimCLR
Loss NT-Xent (contrastiva)
SimCLR — Self-Supervised Learning contrastivo - Loss NT-Xent (contrastiva)
Eval lineal por época
SimCLR — Self-Supervised Learning contrastivo - Eval lineal por época
Random vs SimCLR vs Supervisado
SimCLR — Self-Supervised Learning contrastivo - Random vs SimCLR vs Supervisado
t-SNE: SimCLR agrupa, random no
SimCLR — Self-Supervised Learning contrastivo - t-SNE: SimCLR agrupa, random no
Barrido kNN sobre embeddings
SimCLR — Self-Supervised Learning contrastivo - Barrido kNN sobre embeddings
Similitud coseno vista A vs B
SimCLR — Self-Supervised Learning contrastivo - Similitud coseno vista A vs B

# Tecnologías utilizadas

Python PyTorch NumPy Matplotlib