$ cd ../
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST — bash

user@devops:~$ cat README.md

Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST

# Descripción

Vision Transformer (Dosovitskiy et al., 2020) implementado desde cero en PyTorch sobre Fashion-MNIST — sin librerías de transformers: PatchEmbed (Conv2d con stride=patch: la imagen 28×28 se parte en 49 patches de 4×4), token [CLS] aprendido, positional embeddings aprendidos (50×64, inicializados trunc_normal), Multi-Head Self-Attention (4 cabezas, head_dim 16, dropout 0.1) y bloques Transformer Pre-LN (norm → atención → residuo; norm → MLP GELU → residuo), 105.546 params. Split estratificado 3.200 train / 800 val / 10.000 test (seed 42), aumentación solo-train (flip horizontal + affine 5°/6%), AdamW lr 1e-3 wd 1e-4 con cosine annealing, early stopping patience 5, batch 128. Baseline honesta: CNN clásica de parámetros comparables (117.498 params, Conv-BN-ReLU 32→80→128 + GlobalAvgPooling, sin capas densas). Resultados en test: CNN 0.8031 vs ViT 0.7180 (Δ −8.51 pp) — con solo 3.200 muestras el sesgo inductivo de la convolución (localidad + equivarianza a traslación) supera a la atención global: los transformers son data-hungry (hallazgo clásico: ImageNet-21k → fine-tuning). El ViT aprende igualmente sin ningún supuesto de localidad: el attention rollout (Abnar & Zuidema 2020, R = ∏(0.5·A + 0.5·I)) muestra que el token [CLS] concentra su atención en regiones discriminativas (cintura del pantalón, bajo del jersey, empeine de la bota); los positional embeddings aprenden estructura 2D implícita (la similitud coseno decae con la distancia); las 4 cabezas del bloque central se especializan en regiones distintas; el t-SNE de los embeddings CLS agrupa por clase. Ambas arquitecturas fallan en Shirt (0.184 vs 0.315 — solapa con T-shirt, Pullover y Coat), la clase más difícil de Fashion-MNIST. 8 visualizaciones.

# Características principales

$ ViT completo desde cero en PyTorch: PatchEmbed (Conv2d stride=patch), token [CLS], positional embeddings aprendidos y bloques Transformer Pre-LN — sin librerías de transformers

$ Arquitectura CPU-first: patch 4×4 → 49 tokens, dim 64, 3 bloques, 4 heads, dropout 0.1 — 105.546 params

$ Baseline honesta: CNN clásica de parámetros comparables (117.498 params, Conv-BN-ReLU 32→80→128 + GlobalAvgPooling)

$ Fashion-MNIST con split estratificado (3.200/800/10.000), aumentación solo-train, AdamW + cosine annealing + early stopping

$ La CNN gana en datos pequeños (test 80.3% vs 71.8%, Δ −8.5 pp): el sesgo inductivo convolucional supera a la atención global con 3.200 muestras — los ViT son data-hungry

$ Attention Rollout (Abnar & Zuidema 2020): el token [CLS] atiende a regiones discriminativas — cintura del pantalón, bajo del jersey, empeine de la bota

$ Los positional embeddings aprenden estructura 2D implícita (similitud coseno) y las cabezas del bloque central se especializan en regiones distintas

$ 8 visualizaciones: patches, pos-embeddings, curvas ViT vs CNN, attention rollout, t-SNE de embeddings CLS, cabezas de atención, resumen y confusion matrices

# Galería

Terminal del proyecto
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Terminal del proyecto
Patch embedding: imagen → 49 tokens
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Patch embedding: imagen → 49 tokens
Posicional embeddings: similitud coseno
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Posicional embeddings: similitud coseno
Curvas de entrenamiento ViT vs CNN
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Curvas de entrenamiento ViT vs CNN
Attention rollout del token [CLS]
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Attention rollout del token [CLS]
t-SNE de embeddings CLS por clase
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - t-SNE de embeddings CLS por clase
Atención por cabeza (bloque 2)
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Atención por cabeza (bloque 2)
Resumen: accuracy test + params
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Resumen: accuracy test + params
Matrices de confusión
Vision Transformer desde cero — ViT vs CNN en Fashion-MNIST - Matrices de confusión

# Tecnologías utilizadas

Python PyTorch NumPy scikit-learn Matplotlib