Exploding Gradient
Los gradientes explosivos crecen exponencialmente durante la retropropagación y provocan actualizaciones enormes de los pesos, picos en la pérdida y valores NaN. Incluye causas, señales y soluciones.
Un gradiente explosivo es un fallo de entrenamiento en el que los gradientes calculados mediante retropropagación crecen de forma exponencial al propagarse hacia atrás por una red neuronal profunda o recurrente. A continuación, el descenso del gradiente aplica actualizaciones enormes a los pesos del modelo, la función de pérdida se dispara o se convierte en NaN o inf, y el entrenamiento diverge. Es el fenómeno opuesto al problema del gradiente desvanecido. Pascanu, Mikolov y Bengio analizaron ambos problemas en las redes neuronales recurrentes y propusieron limitar la norma del gradiente para evitar su explosión, una medida que sigue siendo una protección estándar en el entrenamiento de aprendizaje profundo.
Por qué explotan los gradientes#
Según la regla de la cadena, el gradiente que llega a una capa inicial es el producto de un factor por cada capa posterior o por cada paso temporal en una red recurrente. Cuando esos factores son sistemáticamente mayores que 1, el producto crece de forma exponencial con la profundidad: repetir un factor de 1.5 a lo largo de 30 capas multiplica la señal por aproximadamente 190,000. Entre las causas habituales están una inicialización deficiente de los pesos, una tasa de aprendizaje demasiado alta, entradas sin normalizar, secuencias largas en modelos recurrentes y el desbordamiento en el entrenamiento de precisión mixta, donde los valores FP16 superiores a 65,504 se convierten en inf. Los síntomas son una curva de pérdida que de repente se dispara o se convierte en NaN, registros de la norma del gradiente que aumentan varios órdenes de magnitud entre pasos y pesos que se convierten en NaN.
Prevención y mitigación#
La mayoría de los procesos de entrenamiento modernos combinan varias de estas medidas de protección.
- Recorte de gradientes: Cuando la norma L2 global de todos los gradientes supera un umbral, cada gradiente se escala hacia abajo por el mismo factor. La actualización conserva la dirección y solo se limita su magnitud.
- Normalización por lotes: La normalización por lotes y la normalización por capas reescalan las activaciones de cada capa, lo que mantiene una escala estable de las señales entre capas y suaviza el paisaje de pérdida.
- Inicialización cuidadosa: Las inicializaciones Xavier (Glorot) y He escalan los pesos iniciales para que la varianza de las activaciones se mantenga aproximadamente constante entre capas.
- Conexiones residuales: Las conexiones de salto proporcionan a los gradientes una ruta identidad que evita cada bloque, por lo que la señal hacia atrás es una suma de rutas en lugar de un único producto largo.
- Calentamiento de la tasa de aprendizaje: Empezar con una tasa de aprendizaje pequeña y aumentarla gradualmente durante los primeros pasos evita grandes actualizaciones iniciales mientras los pesos y las estadísticas del optimizador aún se están estabilizando.
El fragmento siguiente crea una secuencia de 30 capas, cada una de las cuales amplifica su entrada 1.5 veces, y después recorta el gradiente resultante con PyTorch:
import torch
from torch import nn
torch.manual_seed(0)
# 30 stacked linear layers, each initialized to amplify its input by 1.5x
layers = [nn.Linear(64, 64, bias=False) for _ in range(30)]
for layer in layers:
nn.init.orthogonal_(layer.weight, gain=1.5)
model = nn.Sequential(*layers)
loss = model(torch.randn(8, 64)).pow(2).mean()
loss.backward()
# clip_grad_norm_ rescales all gradients in place and returns their norm before clipping
norm_before = nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
norm_after = nn.utils.get_total_norm([p.grad for p in model.parameters()])
print(f"Gradient norm before clipping: {norm_before:.2e}, after: {norm_after:.2f}")La norma del gradiente sin recortar es 9.90e+10 y, después del recorte, es 1.00; así, el siguiente paso del optimizador queda acotado por grande que fuera el gradiente original.
El entrenamiento de Ultralytics YOLO26 aplica esta protección en cada paso: el entrenador desescala los gradientes de precisión mixta, limita su norma global a 10.0 y permite que el escalador de gradientes omita cualquier actualización que aún contenga valores inf o NaN. Un entrenador personalizado puede cambiar el límite, por ejemplo, reducirlo a 0.1 para RT-DETR.
Gradientes explosivos frente a gradientes desvanecientes#
Ambos problemas se deben al mismo producto de factores por capa durante la retropropagación. Los factores superiores a 1 hacen que los gradientes exploten, lo que provoca actualizaciones inestables, desbordamiento numérico y divergencia; la solución habitual es recortarlos. Los factores inferiores a 1 hacen que los gradientes se acerquen a cero, por lo que las capas iniciales dejan de aprender; las soluciones habituales son activaciones que no se saturan, como ReLU, las conexiones residuales y las unidades recurrentes con compuertas, como LSTM. La normalización y una inicialización cuidadosa ayudan a evitar ambos problemas.
Aplicaciones en el mundo real#
Los modelos de lenguaje grandes se entrenan durante cientos de miles de pasos con secuencias de texto largas, en las que los picos repentinos de pérdida son un riesgo conocido, y sus recetas de entrenamiento incluyen el recorte de gradientes: GPT-3 se entrenó con Adam y un límite de 1.0 para la norma global del gradiente.
En visión artificial, las redes profundas de detección de objetos se entrenan con conjuntos de datos del tamaño de COCO, tasas de aprendizaje altas y precisión mixta; por eso, el recorte y el escalado de la pérdida evitan que un lote extremo poco frecuente corrompa los pesos. Los detectores basados en Transformer son más sensibles porque los gradientes de la atención cruzada de su decodificador pueden dispararse; por eso, los modelos de la familia DETR, como RT-DETR y DINO, suelen aplicar un límite de norma máxima de 0.1.










