Exploding Gradient
Explodierende Gradienten wachsen während der Backpropagation exponentiell an und verursachen massive Gewichtsänderungen, Verlustspitzen und NaN-Werte. Behandelt Ursachen, Anzeichen und Abhilfen.
Ein explodierender Gradient ist ein Trainingsfehler, bei dem die durch Backpropagation berechneten Gradienten beim Rückwärtsdurchlauf durch ein tiefes oder rekurrentes neuronales Netz exponentiell anwachsen. Der Gradientenabstieg nimmt dann riesige Aktualisierungen an den Modellgewichten vor. Die Verlustfunktion schießt in die Höhe oder wird zu NaN beziehungsweise inf, und das Training divergiert. Das Problem ist das Gegenstück zum verschwindenden Gradienten. Pascanu, Mikolov und Bengio untersuchten beide Probleme in rekurrenten neuronalen Netzen und schlugen das Abschneiden der Gradientennorm als Gegenmaßnahme gegen explodierende Gradienten vor. Das ist bis heute eine gängige Schutzmaßnahme beim Training mit Deep Learning.
Warum Gradienten explodieren#
Nach der Kettenregel ist der Gradient, der eine frühe Schicht erreicht, das Produkt eines Faktors pro späterer Schicht oder pro Zeitschritt in einem rekurrenten Netz. Sind diese Faktoren durchgehend größer als 1, wächst das Produkt mit der Tiefe exponentiell: Ein Faktor von 1.5, der 30-mal wiederholt wird, vervielfacht das Signal um etwa 190,000. Zu den häufigen Auslösern zählen eine ungeeignete Gewichtsinitialisierung, eine zu hohe Lernrate, nicht normalisierte Eingaben, lange Sequenzen in rekurrenten Modellen und Überläufe beim Training mit gemischter Genauigkeit. Dabei werden FP16-Werte über 65,504 zu inf. Anzeichen sind eine Verlustkurve, die plötzlich ansteigt oder zu NaN wird, Logs der Gradientennorm, die zwischen Schritten um mehrere Größenordnungen zunehmen, sowie Gewichte, die zu NaN werden.
Vorbeugung und Eindämmung#
Die meisten modernen Trainingspipelines kombinieren mehrere dieser Gegenmaßnahmen.
- Gradientenbeschneidung: Überschreitet die globale L2-Norm aller Gradienten einen Grenzwert, wird jeder Gradient um denselben Faktor verkleinert. Die Richtung des Updates bleibt erhalten, nur seine Länge wird begrenzt.
- Batchnormalisierung: Batchnormalisierung und Schichtnormalisierung skalieren die Aktivierungen bei jeder Schicht neu. So bleiben die Signale von Schicht zu Schicht in einem stabilen Wertebereich, und die Verlustlandschaft wird geglättet.
- Sorgfältige Initialisierung: Bei der Xavier-(Glorot-) und der He-Initialisierung werden die anfänglichen Gewichte so skaliert, dass die Varianz der Aktivierungen von Schicht zu Schicht ungefähr gleich bleibt.
- Residualverbindungen: Skip-Verbindungen geben den Gradienten einen direkten Pfad, der jede Schicht umgeht. Dadurch ist das Signal beim Rückwärtsdurchlauf eine Summe von Pfaden statt eines einzigen langen Produkts.
- Aufwärmphase der Lernrate: Eine niedrige Lernrate zu Beginn, die in den ersten Schritten schrittweise erhöht wird, verhindert große frühe Updates, solange sich Gewichte und Optimiererstatistiken noch einpendeln.
Das folgende Beispiel erstellt einen Stapel aus 30 Schichten, von denen jede ihre Eingabe um den Faktor 1.5 verstärkt. Anschließend wird der resultierende Gradient mit PyTorch beschnitten:
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}")Die rohe Gradientennorm beträgt 9.90e+10 und sinkt nach dem Beschneiden auf 1.00. So bleibt der nächste Optimiererschritt begrenzt, unabhängig davon, wie groß der rohe Gradient war.
Beim Training mit Ultralytics YOLO26 kommt diese Schutzmaßnahme bei jedem Schritt zum Einsatz: Der Trainer skaliert die Gradienten mit gemischter Genauigkeit zurück, beschneidet ihre globale Norm auf 10.0 und lässt den Gradientenskalierer alle Updates überspringen, die weiterhin inf- oder NaN-Werte enthalten. Ein eigener Trainer kann den Grenzwert ändern, zum Beispiel auf 0.1 für RT-DETR.
Explodierende und verschwindende Gradienten#
Beide Probleme entstehen durch dasselbe Produkt aus Faktoren pro Schicht bei der Backpropagation. Faktoren über 1 lassen Gradienten explodieren. Das führt zu instabilen Updates, numerischen Überläufen und Divergenz; üblicherweise wird das Problem durch Beschneiden behoben. Faktoren unter 1 lassen Gradienten gegen null schrumpfen, sodass frühe Schichten nicht mehr lernen. Zu den üblichen Gegenmaßnahmen zählen nicht sättigende Aktivierungen wie ReLU, Residualverbindungen und gesteuerte rekurrente Einheiten wie LSTMs. Normalisierung und sorgfältige Initialisierung helfen gegen beide Probleme.
Anwendungen in der Praxis#
Große Sprachmodelle werden über Hunderttausende Schritte mit langen Textsequenzen trainiert. Plötzliche Anstiege des Verlusts sind dabei ein bekanntes Risiko, weshalb ihre Trainingsverfahren die Gradienten beschneiden: GPT-3 wurde mit Adam trainiert, wobei die globale Gradientennorm auf 1.0 begrenzt wurde.
In der Computer Vision werden tiefe Netze zur Objekterkennung mit hohen Lernraten und gemischter Genauigkeit auf Datensätzen in der Größenordnung von COCO trainiert. Das Beschneiden der Gradienten und die Verlustskalierung verhindern, dass ein seltener extremer Batch die Gewichte beschädigt. Transformer-basierte Detektoren reagieren empfindlicher, weil die Gradienten in der Cross-Attention ihres Decoders stark ansteigen können. Daher beschneiden Modelle der DETR-Familie wie RT-DETR und DINO üblicherweise mit einer maximalen Norm von 0.1.










