Inicio · Parte 08 — Cálculo multivariable, matricial y autodiferenciación
coste del modo reverso: O(1) barridos, independiente del número de variables
coste de diferencias finitas: 2 evaluaciones por variable
La autodiferenciación no es derivación simbólica ni numérica: es una tercera opción. Registra las operaciones elementales que se ejecutan formando un grafo de cómputo, y luego aplica la regla de la cadena sobre ese grafo. El resultado es exacto salvo redondeo, sin la explosión de expresiones del cálculo simbólico ni el error de truncamiento de las diferencias finitas.
El modo reverso es el que usan los frameworks de deep learning. Hace un barrido hacia adelante guardando valores intermedios y otro hacia atrás propagando derivadas, y obtiene todas las derivadas parciales en ese único par de barridos. Con un millón de parámetros, las diferencias finitas necesitarían dos millones de evaluaciones; el modo reverso necesita el equivalente a unas pocas.
El precio es la memoria: hay que guardar los valores intermedios del barrido hacia adelante para usarlos en el de vuelta. Esa es la razón por la que entrenar consume mucha más memoria que inferir, y por la que existe el gradient checkpointing, que recalcula partes en lugar de guardarlas.
La implementación del programa (Var en part08.py) tiene unas cien líneas y hace exactamente lo mismo que PyTorch en su núcleo: cada operación registra cómo propagar el gradiente, backward() construye el orden topológico y lo recorre al revés acumulando. Lo que añaden los frameworks reales es tensores, GPU, fusión de operaciones y compilación, no un mecanismo distinto.
Autodiferenciación de una expresión con dos variables.
z = (x·y + sin x)·y² en x = 2, y = 3
valor: 63.1852
dz/dx autodiff: 30.7482
dz/dx numérico: 30.7482 ✓
dz/dy autodiff: 60.7902
dz/dy numérico: 60.7902 ✓
Coste:
autodiff: 1 barrido adelante + 1 atrás
diferencias finitas: 2 evaluaciones por variable
Autodiferenciación en modo reverso sobre el grafo de cómputo.
python classes/part-08-calculo-multivariable-matricial-y-autodiferenciacion/179-automatic-differentiation-y-computational-graphs/lab.py
compmath run 179
expresionvalordz/dx_autodiffdz/dx_numericodz/dy_autodiffdz/dy_numericocoincidenbarridos_necesarioscoste_del_numerico{
"expresion": "(x·y + sin x)·y²",
"valor": 62.18367684,
"dz/dx_autodiff": 23.25467847,
"dz/dx_numerico": 23.25467847,
"dz/dy_autodiff": 59.45578456,
"dz/dy_numerico": 59.45578457
}
Entrenamiento de cualquier red neuronal, optimización de hiperparámetros por gradiente, física diferenciable y gradientes de simuladores.
Autograd de PyTorch y JAX es exactamente el modo reverso del grafo de cómputo que se construye en esta parte a mano.
9780898717761 verificado en International ISBN Agency (2026-08-19).