Skip to content

English · Español

Fase 08 — Autograd tensorial desde cero

Requiere: 07 — Autograd escalar desde cero (minigrad) Enseña: tensor-autograd · broadcasting-backward · gradcheck · matmul-grad · softmax-grad Salta a cualquier capítulo desde el índice de referencia de fases.

Mapa del capítulo

Pre-escrito según LYNX_CORTEX_ADDENDUM.md §A12. La teoría y los enunciados del lab están pre-escritos; las soluciones se incorporan justo a tiempo al abrir la fase.

Subimos el autograd a tensores. La mecánica (DAG, backward por op, traversal inverso) es la misma de la fase 7; lo nuevo y trapero es el broadcasting reverso: si el forward expandió (3,) a (4,3), el backward tiene que sumar el gradiente a lo largo de los ejes expandidos para devolver un (3,). El gradcheck numérico es lo que evita que vivas con bugs silenciosos.


Objetivo

Elevar el autograd escalar de la fase 7 a tensores NumPy e implementar ≥20 ops con pruebas rigurosas. Esta es también la fase en la que nace el módulo src/minitorch/: el autograd escalar se queda en minigrad, el autograd tensorial pasa a minitorch. La separación refleja torch frente a torch.nn y prepara a minimodel de la fase 9 para importar desde minitorch.

Las dos nuevas fuentes de dificultad son:

  1. Regla reversa del broadcasting — toda op que haga broadcasting en forward debe sumar su gradiente a lo largo de los ejes broadcasteados en backward.
  2. Ops de reducciónsum, mean, softmax, cross_entropy necesitan tratar axis y keepdims explícitamente.

La afirmación pedagógica: la mayoría de los "bugs de framework" con los que la gente choca son bugs de broadcasting. Construye tú mismo la maquinaria de broadcasting y dejarán de ser misteriosos.

Al cierre de la fase, Borja posee:

  • src/minitorch/tensor.py, ~400 LOC, su propia implementación.
  • Cross-check op por op contra PyTorch FP64 a 1e-7.
  • Una suite de tests de propiedades con hypothesis que fuzza combinaciones aleatorias de forma (shape) y op.
  • Una suite de tests dirigida al broadcasting-backward que cubre todos los pares de formas habituales.
  • Un MLP entrenado de punta a punta sobre una tarea de clasificación toy de §A13 — entrada one-hot(verb) ⊕ one-hot(person) → logits sobre 5 tiempos — usando solo minitorch.tensor.

Anclaje temático (§A13). Las formas (shapes) tensoriales trabajadas a lo largo de la teoría y el lab usan la rejilla gramatical: un tensor (3, 5) codifica (persona × tiempo) para un verbo; un tensor (20, 3, 5) lo estira a todo el vocabulario; la pérdida CE se calcula contra índices enteros de tiempo 0..4.

Orden de lectura

  1. theory/00-motivation.md — por qué el autograd tensorial es el siguiente paso correcto.
  2. theory/01-tensor-as-node.mdTensor = (data, grad, _prev, _op, _backward, requires_grad). La forma de la clase.
  3. theory/02-tensor-op-derivatives.md — backward de cada op que vamos a implementar, con broadcasting tratado explícitamente.
  4. theory/03-matmul-and-softmax-grads.md — las dos derivaciones que todo ingeniero de ML debe ser capaz de reproducir: matmul backward y el gradiente combinado softmax-CE.
  5. theory/04-gradcheck-and-property-tests.md — gradchecking por diferencias finitas, elección de ε, la curva de error en forma de U, y estrategias de hypothesis para fuzzing de formas (shapes).
  6. lab/00-tensor-skeleton.md — esqueleto de la clase, sin ops.
  7. lab/01-elementwise-ops.mdadd sub mul div neg exp log relu gelu tanh, con el broadcasting reverso tratado.
  8. lab/02-reduction-and-shape-ops.mdsum mean reshape transpose broadcast_to getitem cat stack.
  9. lab/03-matmul-softmax-ce.md — las tres ops de alto riesgo: matmul (con dimensiones de batch), softmax (en solitario), cross_entropy(logits, targets) (combinada por estabilidad).

solutions/ se incorpora al abrir la fase.

Definición de hecho (DoD)

Ver PHASE_08_PLAN.md §6. En breve:

  • src/minitorch/tensor.py con ≥ 20 ops, cross-checked frente a PyTorch a 1e-7.
  • Tests de propiedades de Hypothesis en verde con 100 tiradas aleatorias de shape/op cada uno.
  • Suite de broadcasting-backward en verde para todos los pares de formas (shape) del catálogo.
  • MLP toy con > 90% de precisión en validación.
  • Borja puede añadir silu en una sola sesión: forward + backward + test + nota teórica.
  • /quiz 08 ≥ 70%.

Lo que esta fase intencionadamente NO cubre

  • Abstracciones nn.Module / Parameter. Fase 9.
  • Optimizadores como clases. Fase 9; aquí seguimos a mano con p.data -= lr * p.grad.
  • Aceleración por GPU. Fase 23+.
  • Precisión mixta. Fase 26.
  • Ops in-place. Solo funcional. Documentado en BLUEPRINT.
  • einsum. Tentador pero el backward es peliagudo; diferido a la fase 17 si hace falta.
  • Tensores dispersos. Fuera de alcance.
  • Captura/fusión de grafos al estilo torch.compile. Fuera de alcance (la fase 25 cubre la versión de PyTorch).

Alcance de la fase 8: DAG a grano tensorial + backwards correctos con broadcasting + ≥20 ops + tests de propiedades.

Lecturas recomendadas

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

  • 📕 Evaluating Derivatives — Griewank & Walther · 2008. la referencia definitiva sobre AD en modo reverse.