Cuando se entrena una red neuronal, la llamada loss.backward() desencadena el mecanismo central del aprendizaje: el cálculo de cuánto debe ajustarse cada parámetro para reducir el error. Este artículo explica, de forma didáctica y desde cero, cómo funciona ese proceso apoyándose en microcrad, un pequeño motor de diferenciación automática en C inspirado en micrograd de Andrej Karpathy.
El entrenamiento se reduce a una pregunta: para cada parámetro p, ¿cuánto cambia la pérdida si lo movemos un poquito? Esa magnitud es la derivada. Una red real tiene desde miles hasta billones de parámetros, pero una sola pérdida, y esta forma —muchas entradas, una salida— es la clave de todo lo demás.
El texto muestra que basta con conocer la derivada local de cada operación (suma, multiplicación y, por extensión, cualquier otra) y encadenarlas mediante la regla de la cadena. Si un parámetro influye sobre la pérdida a través de varias rutas, sus contribuciones se suman. Con un ejemplo concreto —calcular L = (a·b)·a con a=2 y b=3— se demuestra paso a paso cómo propagar los gradientes hacia atrás.
Se explica por qué el modo inverso (backpropagation) es el adecuado para redes neuronales: un solo recorrido del grafo produce el gradiente de la pérdida respecto a todos los parámetros a la vez, frente al modo directo, que necesitaría un recorrido por parámetro. El grafo de cómputo se construye implícitamente: cada nodo guarda punteros a sus operandos y la operación que lo creó, de modo que la historia del cálculo queda registrada como efecto secundario del forward.
Finalmente, el artículo describe la estructura del tipo Value (dato, gradiente, operandos previos y código de operación) y la función value_backward, que ordena el grafo en orden topológico inverso y propaga los gradientes nodo a nodo, sentando las bases para implementar un motor de autodiff funcional.
