Atlasingeniería

Aprendizaje automáticoRedes neuronalesTema 2

Cómo funciona realmente la retropropagación

No es un algoritmo de aprendizaje: es la regla de la cadena aplicada con orden para no repetir cuentas. Saber eso explica los gradientes que desaparecen y los que explotan.

Para este tema conviene tener claro:Del perceptrón a la red multicapaProducto, cociente y regla de la cadena

La retropropagación suena a mecanismo misterioso del cerebro artificial y es bastante más mundana: es la forma eficiente de calcular las derivadas del costo respecto de cada peso. Quien aprende es el descenso por gradiente; esto sólo le entrega los números.

Cuánto cambia el costo si muevo este peso

El problema es concreto. Para ajustar un peso hace falta saber cuánto cambia el costo si ese peso cambia un poquito. En una red con millones de pesos hay que calcular millones de derivadas.

Calcularlas por diferencias numéricas —mover cada peso y ver qué pasa— costaría una pasada completa por peso: imposible. La retropropagación obtiene todas con una sola pasada hacia adelante y una hacia atrás.

Antes de seguir, predecí

Una red de veinte capas con sigmoides en todas. ¿Qué le pasa al gradiente en las primeras capas?

La regla de la cadena, aplicada de atrás para adelante

La herramienta es la regla de la cadena: si el costo depende de la salida, la salida de la capa anterior y así sucesivamente, la derivada respecto de un peso profundo es el producto de las derivadas del camino.

La clave de eficiencia es el orden. Yendo desde el costo hacia atrás, cada capa recibe la derivada

Un grafo de cómputo mínimo: entrada, un peso que multiplica, una activación y el costo.

1 / 5
La misma estructura se recorre en los dos sentidos. Hacia adelante viajan los valores; hacia atrás, las derivadas, y cada nodo reutiliza lo que ya calculó el de su derecha.

acumulada de todo lo que está más adelante y sólo tiene que multiplicarla por su derivada local. Los factores compartidos se calculan una vez y se reutilizan, en lugar de recalcularse por cada peso.

Adelante y atrás

En la práctica son dos pasadas. Adelante: se calculan las salidas capa por capa y se guardan los valores intermedios, porque hacen falta después. Atrás: se propaga la derivada desde el costo, capa por capa, obteniendo en cada una el gradiente de sus pesos.

Guardar los valores intermedios es lo que hace que el entrenamiento consuma tanta memoria: no alcanza con los pesos, hay que retener las activaciones de todos los lotes en vuelo. De ahí que la memoria de la GPU limite el tamaño de lote antes que la velocidad.

El gradiente se desvanece o explota

Como la derivada es un producto de factores, uno por capa, su magnitud se comporta de forma multiplicativa. Si los factores son menores que uno, el producto tiende a cero rápido: el gradiente se desvanece y las capas iniciales no aprenden.

Si son mayores que uno, el producto explota y los pasos se vuelven enormes. Ese es el problema central de entrenar redes profundas, y buena parte del diseño moderno existe para controlarlo: activaciones sin saturación, inicialización con la escala adecuada, normalización entre capas y conexiones residuales que le dan al gradiente un camino directo hacia atrás.

El grafo de cómputo generaliza todo esto

Las bibliotecas generalizan esto con un grafo de cómputo: cada operación es un nodo que sabe calcular su salida y su derivada local. Definida la pasada hacia adelante, la hacia atrás sale sola.

Por eso uno escribe el modelo y nunca la derivada, y por eso se puede cambiar la arquitectura sin rehacer ninguna cuenta. También explica un error común: cualquier operación fuera del grafo —convertir a otro tipo de dato, salir a código que la biblioteca no rastrea— corta la cadena y deja pesos que no reciben gradiente y por lo tanto no aprenden.

Las señales que dicen qué se rompió

Para depurar hay señales concretas. Un gradiente en cero en una capa indica cadena cortada o activación saturada. Gradientes enormes anuncian inestabilidad, y el recorte por norma es el parche estándar.

Y una verificación que sigue siendo útil al implementar algo a mano: comparar el gradiente calculado contra una aproximación numérica en unos pocos parámetros. Es lento y es la forma más confiable de detectar un error en la derivación.

Lo que hay que saber cuando no entrena

ProblemaSíntomaQué lo causaQué hacer
Gradiente que se desvanecelas capas de abajo no aprendenderivadas menores que 1, multiplicadas muchas vecesReLU, conexiones residuales, normalización
Gradiente que explotael costo se va a NaNderivadas mayores que 1, multiplicadasrecorte de norma del gradiente
Neuronas muertasparte de la red no respondeReLU que quedó siempre en cerotasa más baja, o una variante con fuga
Costo en NaN desde el principionada entrenainicialización mala, o un logaritmo de cerorevisar la inicialización y la estabilidad numérica
Los cuatro problemas salen de la regla de la cadena: las derivadas se multiplican capa por capa, y multiplicar muchos números menores que uno da cero, mientras que multiplicar muchos mayores que uno explota.

Cierre

Regla de la cadena aplicada de atrás hacia adelante, reutilizando factores: todas las derivadas con una pasada de ida y una de vuelta, a costa de guardar las activaciones. El carácter multiplicativo explica el desvanecimiento y la explosión, y el grafo de cómputo es lo que automatiza todo.

Autoevaluación

¿Lo entendiste?

¿Qué hace exactamente la retropropagación?
¿Por qué no se calculan las derivadas numéricamente, moviendo cada peso?
¿De dónde sale la eficiencia?
En una red profunda, el producto de muchas derivadas menores que uno…