Ya vimos que una red neuronal hace una predicción mediante la propagación hacia adelante, que la función de pérdida mide qué tan equivocada está y que el descenso del gradiente actualiza los parámetros para mejorar. Pero todavía falta una pieza esencial del rompecabezas: ¿cómo sabe la red cuánto debe corregir cada peso?
La respuesta está en backpropagation, o retropropagación del error. Este algoritmo permite calcular cómo influye cada parámetro en la pérdida final y, por lo tanto, cómo conviene ajustarlo.
Backpropagation es una de las ideas más importantes de todo el Deep Learning. Sin él, entrenar redes neuronales profundas de manera eficiente sería prácticamente inviable.
Backpropagation es un procedimiento matemático que calcula los gradientes de la función de pérdida con respecto a los parámetros de la red, propagando esa información desde la salida hacia las capas anteriores.
Dicho de una forma más intuitiva:
Gracias a eso, cada peso puede corregirse de manera informada.
Imaginemos una red neuronal con muchas capas y miles de pesos. Si la predicción final es incorrecta, necesitamos responder preguntas como estas:
No basta con saber que la red se equivocó. Necesitamos saber cómo repartir la responsabilidad del error entre todos los parámetros. Eso es lo que hace backpropagation.
Es muy importante distinguir entre backpropagation y descenso del gradiente:
En otras palabras:
Ambos procesos trabajan juntos dentro del entrenamiento.
Cuando la red produce una salida incorrecta, el error se observa primero al final, en la capa de salida. A partir de ahí, backpropagation lleva esa información hacia las capas anteriores.
Esto tiene lógica:
Así, el error “viaja” hacia atrás por la red.
El fundamento matemático de backpropagation es la regla de la cadena, una herramienta del cálculo diferencial. Esta regla permite derivar funciones compuestas.
Y una red neuronal, justamente, puede verse como una gran composición de funciones:
La regla de la cadena permite descomponer cómo afecta cada parte intermedia al resultado final.
Si una variable afecta a otra, y esa segunda variable afecta a una tercera, entonces la primera también afecta indirectamente a la tercera. La regla de la cadena cuantifica justamente ese efecto indirecto.
En una red neuronal, un peso de una capa inicial no afecta directamente a la pérdida, pero sí influye en neuronas intermedias, que luego afectan otras neuronas y finalmente la salida. Backpropagation sigue ese camino hacia atrás para medir ese impacto total.
Para ubicar backpropagation dentro del entrenamiento, podemos resumir el proceso completo así:
Backpropagation es, por lo tanto, el puente entre la pérdida y la actualización de parámetros.
Supongamos una neurona muy simple con:
x,w,b,y_pred.La neurona calcula una predicción y luego comparamos esa predicción con el valor real y.
Si la pérdida es alta, backpropagation calcula:
w en la pérdida,b en la pérdida.Con esa información ya podemos corregir ambos parámetros.
Calcular el gradiente de la pérdida respecto de un parámetro significa responder esta pregunta:
Si el gradiente es positivo, aumentar ese parámetro hará subir la pérdida, por lo que conviene reducirlo. Si el gradiente es negativo, aumentarlo puede ayudar a bajar la pérdida.
Esa es la información que usa el descenso del gradiente para actualizar los parámetros.
Backpropagation comienza en la capa de salida, porque allí es donde primero podemos medir el error de manera directa.
En esa capa:
Con eso se obtienen los primeros gradientes.
Las capas ocultas no se comparan directamente con la respuesta real. Entonces, ¿cómo saben cuánto se equivocaron?
La respuesta es que reciben esa información desde las capas siguientes. Backpropagation usa el error calculado en capas posteriores para estimar cuánto contribuyó cada neurona oculta al error final.
De esta forma, el error se propaga hacia atrás capa por capa.
Podemos imaginar la red como una cadena de decisiones. Si el resultado final fue malo, queremos saber qué parte de la cadena fue más responsable.
Backpropagation hace precisamente eso: distribuye la responsabilidad del error entre neuronas y pesos según cuánto influyeron en el resultado final.
Este proceso se repite miles o millones de veces durante el entrenamiento.
Las funciones de activación no solo influyen en la propagación hacia adelante; también afectan cómo se calculan los gradientes durante la propagación hacia atrás.
Por eso la elección de activaciones es tan importante. Algunas activaciones facilitan más el aprendizaje que otras porque permiten un flujo de gradientes más útil y estable.
Esto se relaciona directamente con problemas como el gradiente muy pequeño o la saturación de ciertas funciones.
Una de las grandes virtudes de backpropagation es que permite calcular gradientes de forma eficiente, reutilizando información intermedia de la red. No hace falta recalcular todo desde cero para cada parámetro.
Esto es crucial porque las redes modernas pueden tener millones de parámetros. Sin un procedimiento eficiente, el entrenamiento sería demasiado lento o directamente impracticable.
Imaginemos una red con:
Si la salida final fue incorrecta:
Es decir, el error va retrocediendo desde la salida hacia la entrada.
Conviene insistir en esta distinción: backpropagation calcula gradientes, pero no actualiza los pesos por sí mismo. La actualización ocurre después, cuando interviene el optimizador.
Esto es importante porque a veces se piensa erróneamente que backpropagation “entrena solo” la red. En realidad, forma parte del proceso, pero no lo completa por sí mismo.
Los gradientes que produce backpropagation indican dirección e intensidad del cambio, pero la magnitud real de la actualización depende de la tasa de aprendizaje.
Así, el flujo completo sería:
Uno de los problemas clásicos relacionados con backpropagation es el gradiente desvanecido. Ocurre cuando, al propagarse hacia atrás, los gradientes se hacen cada vez más pequeños y las capas iniciales aprenden muy lentamente.
Este problema fue una de las razones por las que entrenar redes profundas era tan difícil en ciertas épocas. El uso de mejores activaciones, mejores inicializaciones y mejores arquitecturas ayudó a mitigar este inconveniente.
El caso opuesto también puede ocurrir: a veces los gradientes crecen demasiado al propagarse hacia atrás. Eso se conoce como gradiente explosivo.
Cuando pasa, las actualizaciones pueden volverse inestables y el entrenamiento puede divergir.
Esto muestra que el flujo de gradientes es una parte delicada del entrenamiento y que no basta con aplicar backpropagation; también hay que hacerlo en un contexto adecuado.
Históricamente, la posibilidad de entrenar redes multicapa de forma eficiente fue uno de los grandes factores que permitieron el desarrollo posterior del Deep Learning. Backpropagation dio una respuesta práctica al problema de cómo repartir el error a través de muchas capas.
Sin esta idea, las redes profundas no habrían podido convertirse en la tecnología central que son hoy.
En PyTorch, uno de los grandes beneficios es que no necesitamos programar a mano toda la matemática de backpropagation para modelos comunes. La biblioteca utiliza diferenciación automática, lo que permite calcular gradientes automáticamente.
Esto no significa que backpropagation desaparezca. Significa que PyTorch lo ejecuta por nosotros cuando definimos correctamente el modelo y la pérdida.
Por eso es tan importante entender el concepto, aunque luego el framework automatice gran parte del trabajo.
La diferenciación automática es un mecanismo por el cual bibliotecas como PyTorch registran las operaciones realizadas durante el forward propagation y luego pueden calcular gradientes de forma automática durante el backward.
En términos prácticos:
Pero, conceptualmente, ese cálculo automático sigue estando basado en backpropagation y regla de la cadena.
Podemos resumir el ciclo de entrenamiento así:
Este ciclo repetido miles de veces es lo que permite que el modelo aprenda.
Backpropagation es uno de los conceptos más importantes del Deep Learning porque explica cómo una red neuronal reparte el error entre sus millones de parámetros para poder corregirse.
Comprender este proceso es clave porque conecta la pérdida con el aprendizaje real del modelo. Con esta base, ya estamos en condiciones de pasar de la teoría general del aprendizaje a la práctica concreta del trabajo con PyTorch.