English · Español
Fase 07 — Autograd escalar desde cero (minigrad.scalar)¶
Requiere: 04 — Cálculo y optimización para IA · 06 — Python para ingeniería de IA Enseña:
autograd·computation-graph·reverse-mode·topological-sort·dagSalta a cualquier capítulo desde el índice de referencia de fases.
Mapa del capítulo¶
Pre-escrita según
LYNX_CORTEX_ADDENDUM.md§A12. Teoría y enunciados de laboratorio pre-escritos; las soluciones se rellenan justo a tiempo en la apertura de fase.🇪🇸 La idea de retropropagación (backprop), en su forma más pequeña: cada operación entre dos números crea un nodo en un grafo, cada nodo guarda una pequeña función que dice "cómo paso el gradiente a mis padres", y al final recorremos el grafo en orden topológico inverso. Cuando lo construyes a mano para un escalar, PyTorch deja de ser magia.
Objetivo¶
Construir, a mano, el motor de diferenciación automática más pequeño posible: una clase Value que envuelve un único float de Python, soporta + - * / ** exp log relu tanh, acumula gradientes mediante recorrido topológico inverso y entrena un MLP de 2 capas sobre una tarea microscópica de identidad de tiempo verbal usando solo este motor.
La afirmación pedagógica: si entiendes minigrad.scalar, entiendes la retropropagación para siempre. Todo framework — PyTorch, JAX, TensorFlow — hace fundamentalmente lo mismo al grano de tensor.
Anclaje temático (§A13). Cada ejemplo trabajado usa la rejilla de gramática verbal inglesa: una pérdida como L = sum_i (logit_i - target_i)^2 sobre los 5 tiempos de un verbo (p. ej., work), derivar a mano dL/dlogit_i, ver que coincide con lo que computa el autograd. El código del autograd es agnóstico a la gramática — Value no sabe nada de verbos — pero las demostraciones se anclan en el corpus §A13 para que el tema se repase de forma continua.
Al cierre de fase, Borja tendrá:
src/minigrad/scalar.py, ~150 LOC, su propia implementación.- Una suite de tests que contrasta cada operación contra PyTorch FP64.
- Un renderizado de graphviz de un pequeño DAG forward+backward de pérdida de gramática con valores y gradientes anotados.
- Un MLP de identidad de tiempo verbal entrenado extremo a extremo sin numpy en el núcleo del autograd.
Orden de lectura¶
theory/00-motivation.md— por qué el autograd escalar es el punto correcto para empezar.theory/01-computation-graphs.md— qué es un DAG, cómo lo construye el forward pass.theory/02-op-derivatives.md— derivar a mano la Jacobiana local para cada operación que implementaremos.theory/03-worked-backprop.md— un ejemplo completo trabajado: forward + backward a mano para una expresión pequeña, luego verificado por diferencias finitas.theory/04-reverse-mode-vs-forward-mode.md— por qué elegimos reverse-mode para ML (n_outputs << n_inputs).lab/00-value-skeleton.md— escribir el esqueleto de la claseValue, todavía sin operaciones.lab/01-implement-ops.md— rellenar+ - * / ** exp log relu tanhcon sus backwards.lab/02-train-xor.md(nombre de archivo conservado por historial git; la tarea ahora es identidad de tiempo verbal de 5 vías para un verbo — ver cabecera del lab) — construir un MLP de 2 capas desde neuronasValuey entrenarlo en la tarea de identidad de tiempo verbal de 5 entradas.
solutions/ se rellena en la apertura de fase.
Definición de hecho (DoD)¶
Ver PHASE_07_PLAN.md §6. Brevemente:
src/minigrad/scalar.pypasamypy --strict,ruff, todos los tests; contrastado contra PyTorch FP64 hasta 1e-9.tests/test_scalar_graph.pycubre dependencias en diamante (un nodo usado en varios cómputos descendientes).experiments/07-train-tense-logits/muestra pérdida < 0.5 dentro de 300 epochs.experiments/07-visualize-graph/graph.svgcommiteado; nodos etiquetados con valor forward y gradiente backward./quiz 07≥ 70%.
Lo que esta fase deliberadamente NO cubre¶
- Tensores / NumPy. La Fase 8 lleva todo a arrays NumPy. La Fase 7 es deliberadamente solo-float — añadir broadcasting a la vez que autograd es demasiada complejidad de golpe.
- GPU. Fase 23+.
- Derivadas de orden superior. Factibles en este framework (construir un grafo sobre un grafo), pero fuera de alcance; mención solo descriptiva en
theory/04. jit/ reescritura de grafos. Sin pases de optimización. Pura ejecución eager.- Optimizadores como clases. Fase 9. Aquí hacemos a mano
p.data -= lr * p.graden línea dentro del bucle de entrenamiento XOR. - Seguridad de producción. Sin clamp de
nan, sin recorte de gradientes, sindetach. Estos llegan en la Fase 8 / Fase 18 cuando se ganan su sitio.
El alcance de la Fase 7 es exactamente: DAG + recorrido inverso + regla de la cadena + ~10 operaciones, todo al grano de float. Resiste la expansión de alcance.
Lecturas recomendadas¶
Opcional — enriquece pero no es necesario para aprobar la fase.
- 💻 micrograd — Karpathy · 2020. 100 líneas de autograd escalar — lo mismo que construyes.
- 📄 Automatic Differentiation in Machine Learning: a Survey — Baydin et al. · 2018. modo forward vs reverse, con rigor.