Cómo se calcula el gradiente de una red: backpropagation
En la lección 5 vimos que entrenar una red neuronal es descenso de gradiente aplicado a todos los pesos de todas las capas a la vez. Falta explicar cómo se calcula ese gradiente de forma eficiente. La respuesta es la retropropagación (backpropagation): primero se hace un forward pass (de la entrada a la salida, calculando la predicción), y luego un backward pass que recorre la red en sentido contrario, de la salida hacia la entrada, aplicando la regla de la cadena del cálculo diferencial para repartir "la culpa" del error entre cada peso.
La intuición es simple: la capa de salida conoce exactamente cuánto se equivocó (la diferencia entre predicción y valor real). Cada capa oculta no ve el error directamente, pero puede calcular "cuánta responsabilidad" tiene a partir de cuánto contribuyó a la capa siguiente — multiplicando el error que le llega desde adelante por el peso de la conexión y por la derivada de su propia función de activación. Así, capa por capa, el error se propaga hacia atrás y cada peso recibe la señal exacta de en qué dirección y cuánto debe moverse para reducir el error total.
Sobreajuste (overfitting): memorizar en vez de aprender
Un modelo con suficientes parámetros puede llegar a memorizar los ejemplos de entrenamiento — incluido su ruido — en lugar de aprender el patrón subyacente. A esto se le llama sobreajuste (overfitting): el error de entrenamiento sigue bajando, pero el error sobre datos nuevos (que el modelo nunca vio) empieza a subir. Es el equivalente de un estudiante que memoriza las respuestas exactas de los ejercicios de práctica en vez de entender el método: le va perfecto en esos ejercicios concretos, pero mal en el examen con preguntas distintas.
Por eso nunca se evalúa un modelo con los mismos datos con los que se entrenó. Los datos se dividen en un conjunto de entrenamiento (train), con el que se ajustan los pesos, y un conjunto de prueba (test), que el modelo no ve durante el entrenamiento y que sirve únicamente para medir qué tan bien generaliza. Si el error de entrenamiento es bajo pero el error de prueba es mucho más alto, hay sobreajuste.
Regularización L2: penalizar los pesos grandes
Una forma habitual de combatir el sobreajuste es la regularización L2 (también llamada weight decay): se añade a la función de pérdida un término que penaliza que los pesos crezcan demasiado.
Lreg(w)=L(w)+2λ∑iwi2
Aquí L(w) es la pérdida original (por ejemplo, MSE o entropía cruzada) y λ (letra griega lambda) es el coeficiente de regularización: controla cuánto se penalizan los pesos grandes. Al derivar y aplicar descenso de gradiente, cada actualización de peso incluye un pequeño "encogimiento" adicional:
wi←wi−η(∂wi∂L+λwi)
Con λ=0 recuperamos el descenso de gradiente normal. Con λ demasiado grande, el modelo se queda tan simple que ni siquiera aprende bien el conjunto de entrenamiento (subajuste o underfitting). El valor adecuado de λ es un compromiso: pesos pequeños producen fronteras de decisión más suaves, menos sensibles al ruido de ejemplos individuales, y por lo tanto generalizan mejor a datos nuevos.
Entrena una red 2→H→1 sobre un conjunto de puntos organizados en círculos concéntricos — un problema no separable linealmente, más difícil que XOR — y observa cómo evoluciona la pérdida época a época:
Red neuronal entrenando en vivo · circulos
Época 0 · Pérdida 0.0000
Observa cuántas épocas hacen falta para que la red separe correctamente el círculo interior del exterior, y cómo la frontera de decisión que dibujan las neuronas ocultas deja de ser una simple recta (como en la regresión logística) para convertirse en una curva cerrada.
Autocomprobación:
¿Qué efecto tiene aumentar el coeficiente de regularización L2 (λ) en el entrenamiento?