Retropropagación y Diferenciación Automática
Cálculo Vectorial
La retropropagación es la regla de la cadena, aplicada eficientemente a un grafo computacional — un grafo dirigido acíclico donde cada nodo es una operación primitiva y las aristas llevan valores intermedios. Para calcular nabla_theta L, partimos de la pérdida en la cima y recorremos el grafo en rev
Backprop es diferenciación automática en modo reverso: regla de la cadena aplicada de derecha a izquierda sobre un grafo computacional.
Sin autograd → no hay PyTorch, ni JAX, ni TensorFlow. El aprendizaje profundo se detiene en seco.
La retropropagación es la regla de la cadena, aplicada eficientemente a un grafo computacional — un grafo dirigido acíclico donde cada nodo es una operación primitiva y las aristas llevan valores intermedios. Para calcular , partimos de la pérdida en la cima y recorremos el grafo en reversa, multiplicando por el jacobiano local de cada operación a medida que avanzamos. El costo es aproximadamente el doble del paso hacia adelante, sin importar cuántos parámetros haya.
La diferenciación automática moderna (PyTorch, JAX, TensorFlow) la implementa como dos modos. El modo hacia adelante calcula (producto jacobiano-vector) recorriendo el grafo hacia adelante mientras carga vectores tangentes. El modo inverso (= retropropagación) calcula (producto vector-jacobiano) recorriendo hacia atrás. Cuando la salida es escalar (una pérdida) y las entradas son de alta dimensión (parámetros), el modo inverso es abrumadoramente más barato — un paso hacia atrás reemplaza millones de pasos en modo hacia adelante.
Una idea crítica: nunca materializamos el jacobiano completo. Para una red neuronal con millones de parámetros, el jacobiano es una matriz inmanejable. En cambio, backprop calcula productos jacobiano-vector implícitamente, capa por capa. Para una multiplicación matricial , la contribución del gradiente es y — cada uno es una sola multiplicación matricial, nunca un jacobiano explícito.
La diferenciación automática maneja cómputos arbitrarios, no solo redes neuronales. Cualquier función diferenciable expresable como composición de primitivas (suma, multiplicación, log, exp, matmul, etc.) es automáticamente diferenciable. Por eso los frameworks modernos de ML pueden calcular gradientes de arquitecturas no estándar, pérdidas personalizadas, objetivos variacionales, e incluso funciones implícitas vía el teorema de la función implícita.
Dos trampas prácticas: gradientes que se desvanecen (las derivadas de sigmoides/tanhs se reducen cerca de la saturación, y los productos de muchos números pequeños colapsan a cero) y gradientes que explotan (los productos de muchos números grandes crecen sin límite). Técnicas como activaciones ReLU, conexiones residuales y recorte de gradiente abordan esto directamente. Entender cómo se propagan los gradientes — y dónde mueren — es esencial para entrenar redes profundas.
Ejemplo resuelto — costo del modo hacia adelante vs inverso: Considera . El modo hacia adelante necesita 1000 pasos (uno por entrada) para llenar el jacobiano; el modo inverso necesita solo 1 paso hacia atrás. A la inversa, para , el modo hacia adelante gana con 1 paso versus 1000. Esta asimetría es por la cual el entrenamiento de redes neuronales (millones de entradas, una pérdida escalar) siempre usa modo inverso.
Ejercicios
Pon a prueba tu comprensión. Puntos por acierto + racha + velocidad.
Confirma que captaste la idea
3 preguntas rápidas. Acertá 2 para marcar esta lección como completada.