3 · Retropropagación: la regla de la cadena, mecanizada
Rastrea cada gradiente desde la salida hasta la entrada, verifica contra diferencias finitas y entiende lo que calcula el autograd de PyTorch.
El backprop es la regla de la cadena aplicada recursivamente desde la capa de salida hasta la entrada, acumulando derivadas parciales en cada paso.
Sin esto:
El `.backward()` de PyTorch sigue siendo magia en lugar de un algoritmo claro.
El backpropagation es el algoritmo que hace escalar el deep learning. La idea es elegantemente simple: la pérdida es una composición de funciones (capas), por lo que su gradiente respecto a cada peso se calcula mediante la regla de la cadena aplicada en sentido inverso — desde la capa de salida hasta la entrada.
Cada capa en una red neuronal es un nodo en un grafo computacional. Cada nodo:
- Almacena su valor de salida del pase hacia adelante
- Conoce su función de "gradiente local" (cómo cambia su salida respecto a sus entradas)
Durante el backprop, pasamos una señal de gradiente hacia atrás a través del grafo: cada nodo multiplica el gradiente entrante por su gradiente local y pasa el producto hacia arriba. Cuando la señal llega a la primera capa, cada dL/dW ha sido calculado.
Esta lección rastrea el algoritmo de backprop a mano en la misma red 2-2-1 de la lección 2, verifica cada gradiente numéricamente y muestra el resultado idéntico del autograd de PyTorch.
Repaso de la regla de la cadena — forma escalar, grafo computacional, forma vectorial
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Lectura de autograd de PyTorch — los mismos gradientes que la versión calculada a mano
Retropropagación y diferenciación automática — el tratamiento formal del grafo computacional y la regla de la cadena
Si tu gradiente analítico difiere del gradiente numérico en un 10%, ¿qué deberías sospechar?
- Backprop = regla de la cadena aplicada en sentido inverso a través del grafo computacional; cada nodo multiplica el gradiente entrante por su gradiente local.
- El gradiente de un peso W en la capa L es: `dL/dW = gradiente_upstream @ entrada_local^T`.
- La verificación de gradiente numérico `(L(w+h) - L(w-h)) / 2h` es el estándar de oro para verificar pases hacia atrás personalizados — el error relativo debe ser < 1e-5.
- El `loss.backward()` de PyTorch calcula los mismos gradientes a través de un grafo computacional dinámico construido durante el pase hacia adelante — llámalo una vez por pase hacia adelante.
El backprop es el motor que nos permite entrenar redes con miles de millones de parámetros. Sin él, estarías atascado haciendo inferencia solo con pase hacia adelante en pesos ajustados a mano.
Si lo quitas: Cada capa personalizada (cabeza de atención, convolución de grafos, flujo normalizante) requiere un pase hacia atrás correcto — sin entender el backprop, no puedes implementarlas ni depurarlas.