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-gradSalta 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,). Elgradchecknumé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:
- Regla reversa del broadcasting — toda op que haga broadcasting en forward debe sumar su gradiente a lo largo de los ejes broadcasteados en backward.
- Ops de reducción —
sum,mean,softmax,cross_entropynecesitan trataraxisykeepdimsexplí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
hypothesisque 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¶
theory/00-motivation.md— por qué el autograd tensorial es el siguiente paso correcto.theory/01-tensor-as-node.md—Tensor = (data, grad, _prev, _op, _backward, requires_grad). La forma de la clase.theory/02-tensor-op-derivatives.md— backward de cada op que vamos a implementar, con broadcasting tratado explícitamente.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.theory/04-gradcheck-and-property-tests.md— gradchecking por diferencias finitas, elección de ε, la curva de error en forma de U, y estrategias dehypothesispara fuzzing de formas (shapes).lab/00-tensor-skeleton.md— esqueleto de la clase, sin ops.lab/01-elementwise-ops.md—add sub mul div neg exp log relu gelu tanh, con el broadcasting reverso tratado.lab/02-reduction-and-shape-ops.md—sum mean reshape transpose broadcast_to getitem cat stack.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.pycon ≥ 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
siluen 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.