Skip to content

English · Español

Fase 09 — MLP, módulos y optimizadores

Requiere: 08 — Autograd tensorial desde cero Enseña: module-abstraction · parameter-registration · linear · sequential · optimizers Salta a cualquier capítulo desde el índice de referencia de fases.

Mapa del capítulo

La fase donde emerge el framework. Las fases 7 y 8 construyeron dos motores de autograd (Value escalar y Tensor). La Fase 9 envuelve Tensor en una API con forma de PyTorchModule, Parameter, Linear, Sequential, SGD, Adam — para que componer capas sea ergonómico y portar pequeños scripts de PyTorch a minimodel lleve treinta minutos justos.

🇪🇸 La fase donde el framework aparece. Module y Parameter no son magia: son una convención sobre dónde viven los pesos y cómo el optimizador los encuentra. La forma de la API la copiamos de PyTorch — no por imitación, sino porque la convención de PyTorch resuelve un problema real (descubrir parámetros por reflexión a través de un grafo de submodules anidado).

Anclas: LYNX_CORTEX.md §4 / PHASE 9, LYNX_CORTEX_ADDENDUM.md §A12, §A13. PHASE_09_PLAN.md.


Qué construyes

Un nuevo módulo src/minimodel/ (~250 LOC por Borja) con:

  • nn/module.pyParameter, clase base Module con registro vía __setattr__.
  • nn/linear.pyLinear(in, out).
  • nn/activations.pyReLU, Tanh, Sigmoid, GELU.
  • nn/container.pySequential([...]).
  • nn/init.pykaiming_uniform_, xavier_normal_ (versiones mínimas; la Fase 10 las amplía).
  • nn/losses.pyCrossEntropyLoss, MSELoss.
  • optim.py — base Optimizer, SGD, Adam.

Y un experimento: experiments/09-tense-mlp/ — entrenar un MLP de 2 capas sobre el grid gramatical §A13 (entrada = one-hot del verbo ⊕ one-hot de la persona, 23-d; salida = logits sobre los 5 tiempos; 250 entrenamiento / 50 validación a partir de las 300 triplas de conjugación). Objetivo: >85% de accuracy en validación.

Más el port drill: experiments/09-pytorch-port-drill/ — un script PyTorch de tense-MLP de 50 líneas portado línea a línea a minimodel en ≤30 minutos. El sentido del drill es que la API debería estar lo bastante cerca de PyTorch como para que no tengas que repensar nada.

Orden de lectura

  1. Teoría (en theory/):
  2. 00-motivation.md — por qué existe un "Module" siquiera; qué resuelve Parameter.
  3. 01-parameter-and-module.md — la mecánica de registro; por qué __setattr__ y no __init__.
  4. 02-linear-and-sequential.md — la capa más simple + composición; inicialización.
  5. 03-optimizers.mdSGD, momentum, Adam con corrección de sesgo. Repaso de ingeniería de las matemáticas de la Fase 4.

  6. Labs (en lab/):

  7. 00-parameter-and-module-skeleton.md — registro de Parameter + Module. ~30 LOC, toda la astucia del framework.
  8. 01-linear-and-activations.mdLinear, ReLU, Tanh, Sequential. ~50 LOC.
  9. 02-optimizers.mdSGD (+momentum) y Adam. ~70 LOC. Verifica Adam contra torch.optim.Adam.
  10. 03-train-tense-mlp.md — cierra la fase entrenando el MLP del grid gramatical.

  11. Soluciones aparecen después de intentar los labs; nunca copies antes de intentarlo.

Lo que esta fase no cubre

  • BatchNorm / LayerNorm. Fase 10.
  • Conexiones residuales. Fase 10. Bloque transformer: Fase 17.
  • Capas de embedding. La Fase 13 (embeddings) profundiza; la Fase 17 las usa.
  • Dropout. Fase 18 (trucos de entrenamiento).
  • Entrenamiento distribuido. Fase 35.
  • La implementación real de PyTorch. La Fase 25 inspecciona los internos de PyTorch.

Definición de hecho (DoD) (referencia rápida)

Mira PHASE_09_PLAN.md §6 para la DoD completa. Lo más destacable:

  • mypy --strict limpio en todo src/minimodel/.
  • Sequential(Linear(2, 3), ReLU(), Linear(3, 1)).parameters() produce exactamente 4 objetos Parameter en orden.
  • Adam coincide con torch.optim.Adam a 1e-5 sobre 100 pasos en una cuadrática.
  • experiments/09-tense-mlp/ alcanza >85% de accuracy en validación.
  • experiments/09-pytorch-port-drill/ se completa en ≤30 minutos (cronometrado).
  • /quiz 09 ≥ 70%.

Siguiente fase

Fase 10 — Inicialización, normalización, regularización — completa las partes de un MLP que la Fase 9 omitió (derivación de Kaiming/Xavier, BatchNorm/LayerNorm, weight decay).

Lecturas recomendadas

Opcional — enriquece pero no es necesario para aprobar la fase.