Vanishing Gradient
El problema del gradiente evanescente se produce cuando los gradientes se reducen capa a capa durante la retropropagación, por lo que las primeras capas dejan de aprender. Explica sus causas y soluciones.
El problema del desvanecimiento del gradiente se produce cuando los gradientes que la retropropagación envía desde la pérdida hacia las primeras capas de una red neuronal profunda se reducen geométricamente con la profundidad, de modo que las capas iniciales reciben actualizaciones demasiado pequeñas para aprender. Como el gradiente de una capa es el producto de las derivadas locales de todas las capas que la preceden, una red cuyas capas reducen el gradiente cada una en un factor menor que 1 puede perder muchos órdenes de magnitud entre la salida y la entrada. Sepp Hochreiter analizó este efecto en su tesis de diplomatura de 1991, y dificultó el entrenamiento de las redes profundas de propagación hacia delante y las redes neuronales recurrentes (RNNs) hasta que aparecieron mejores funciones de activación, inicializaciones y arquitecturas.
Por qué se desvanecen los gradientes#
La retropropagación aplica la regla de la cadena, por lo que el gradiente que llega a una capa es el gradiente ascendente multiplicado por cada matriz de pesos posterior y por la derivada de cada función de activación. La derivada de la sigmoide nunca supera 0,25, su valor cuando la entrada es 0, y tiende a 0 cuando la unidad se satura con entradas muy positivas o negativas. La derivada de la tanh alcanza un máximo de 1 y también tiende a 0 cuando se satura. Por tanto, veinte capas sigmoides multiplican el gradiente como máximo por 0,25²⁰, menos de 10⁻¹², incluso antes de tener en cuenta los pesos. La escala de los pesos importa tanto como la activación: Glorot y Bengio atribuyeron buena parte de la dificultad a la inicialización y propusieron varianzas de pesos escaladas según el número de entradas y salidas de cada capa, para que las varianzas de activación y gradiente se mantuvieran aproximadamente constantes en todas las capas.
El efecto se mide fácilmente comparando las magnitudes de los gradientes de los pesos en la parte superior e inferior de una red de 20 capas sigmoides, con y sin conexiones residuales:
import torch
torch.manual_seed(0)
x = torch.randn(64, 32)
# The same 20-layer sigmoid network, without and with residual shortcuts
for residual in (False, True):
layers = [torch.nn.Linear(32, 32) for _ in range(20)]
h = x
for layer in layers:
out = torch.sigmoid(layer(h))
h = h + out if residual else out
h.sum().backward()
# Compare the weight-gradient size at the last layer and the first layer
last, first = layers[-1].weight.grad.norm(), layers[0].weight.grad.norm()
print(f"residual={residual}: layer 20 gradient {last:.1e}, layer 1 gradient {first:.1e}")Sin conexiones de atajo, la norma del gradiente de la última capa es 2.5e+02 y la de la primera, 4.2e-15, unas 17 órdenes de magnitud menor, por lo que los pesos de la primera capa prácticamente nunca cambian. Con conexiones residuales, el gradiente de la primera capa es 5.6e+01, unas 38 veces menor que el de la última, que es 2.1e+03.
Desvanecimiento y explosión de gradientes#
Ambos problemas se deben a la misma multiplicación repetida. Los gradientes que se desvanecen detienen el aprendizaje sin que se note: la pérdida sigue bajando gracias a las últimas capas, mientras que las primeras permanecen cerca de su inicialización aleatoria. Los gradientes explosivos crecen geométricamente y se manifiestan con picos de pérdida y valores de NaN. El recorte de gradiente limita la norma de un gradiente explosivo antes de cada actualización y no afecta a un gradiente que ya se ha desvanecido. El problema de las ReLU muertas es un fallo relacionado en el que la entrada de una unidad ReLU permanece negativa, por lo que su gradiente es exactamente 0 y la unidad deja de aprender.
Cómo evitar el desvanecimiento de los gradientes#
La solución más utilizada es la conexión residual, el atajo de identidad que constituye el núcleo de las redes residuales (ResNets). Un bloque residual devuelve x + F(x), por lo que su gradiente respecto a x es 1 más la derivada de F, y la ruta de atajo transmite sin cambios el gradiente ascendente.
Las conexiones residuales permiten entrenar ResNets con más de 100 capas y aparecen en casi todas las arquitecturas profundas modernas, desde los transformers hasta YOLO26, cuyos bloques C3k2 incorporan cuellos de botella residuales y cuyos bloques convolucionales estándar combinan normalización por lotes con activaciones SiLU.
Otras soluciones complementan las conexiones residuales:
- Funciones de activación que no se saturan: ReLU tiene una derivada exactamente igual a 1 para las entradas positivas, y Leaky ReLU y SiLU también mantienen un gradiente distinto de cero para las entradas negativas.
- Inicialización escalada: La inicialización Xavier (Glorot) es adecuada para capas tanh y sigmoides, y la inicialización He duplica la varianza de los pesos para compensar que ReLU anula la mitad de sus entradas.
- Capas de normalización: La normalización por lotes y la normalización por capas mantienen las preactivaciones cerca de una media de cero y una varianza unitaria, fuera de las regiones planas de las funciones de activación saturables.
- Arquitecturas recurrentes con compuertas: Las redes de memoria a corto y largo plazo (LSTM) y las unidades recurrentes con compuertas (GRUs) transmiten su estado mediante actualizaciones aditivas controladas por compuertas, en lugar de multiplicaciones repetidas, lo que permitió a la LSTM original salvar desfases temporales de más de 1.000 pasos.










