Batch Normalization
Die Batch-Normalisierung standardisiert jeden Kanal über einen Mini-Batch hinweg und skaliert ihn anschließend mit gelernten Parametern neu. Behandelt die Mathematik, das Verhalten bei der Inferenz und die Grenzen.
Die Batch-Normalisierung, auch BatchNorm genannt, ist eine Schicht in einem neuronalen Netzwerk, die jeden Kanal ihrer Eingabe anhand des Mittelwerts und der Varianz des aktuellen Mini-Batches normalisiert und das Ergebnis anschließend mit zwei trainierbaren Parametern skaliert. Sergey Ioffe und Christian Szegedy führten sie 2015 ein. Dadurch konnte ihr Inception-Bildklassifikator dieselbe Genauigkeit mit 14-mal weniger Trainingsschritten erreichen. BatchNorm ermöglicht höhere Lernraten, macht das Training weniger empfindlich gegenüber der Gewichtsinitialisierung und wurde zu einem Standardbestandteil von Faltungsneuronalen Netzen (CNNs) wie ResNet.
Funktionsweise der Batch-Normalisierung#
Bei einer Faltungsschicht berechnet BatchNorm für jeden Kanal einen Mittelwert μ und eine Varianz σ². Dafür werden alle Bilder im Batch und alle räumlichen Positionen herangezogen. Jede Aktivierung x durchläuft dann zwei Schritte:
- Normalisierung: x̂ = (x − μ) / √(σ² + ε), wobei ein kleines ε, standardmäßig 1e-5 in PyTorch, eine Division durch null verhindert.
- Skalierung und Verschiebung: y = γ·x̂ + β, wobei γ und β für jeden Kanal trainiert werden. So kann das Netzwerk den für die nächste Schicht passenden Mittelwert und die passende Streuung wiederherstellen – bis hin zur vollständigen Rücknahme der Normalisierung.
BatchNorm befindet sich üblicherweise zwischen einer Faltung und ihrer Aktivierungsfunktion. Da β bereits einen kanalweisen Offset hinzufügt, ist der Bias der vorangehenden Faltung redundant und wird normalerweise deaktiviert.
Training und Inferenz#
Während des Trainings aktualisiert jeder Vorwärtsdurchlauf außerdem einen laufenden Mittelwert und eine laufende Varianz, berechnet als exponentiell gleitende Mittelwerte der Batch-Statistiken. PyTorchs BatchNorm2d bewegt sie standardmäßig zu 10 % in Richtung jedes neuen Batches (momentum=0.1). Bei der Inferenz normalisiert die Schicht stattdessen anhand dieser laufenden Mittelwerte. Dadurch hängt die Vorhersage für ein Bild nicht mehr davon ab, welche anderen Bilder sich im selben Batch befinden. model.train() und model.eval() schalten zwischen den beiden Verhaltensweisen um:
import torch
torch.manual_seed(0)
bn = torch.nn.BatchNorm2d(num_features=3)
# A batch of 8 three-channel feature maps with mean 5 and standard deviation 2
x = 5 + 2 * torch.randn(8, 3, 16, 16)
# Training mode normalizes with this batch's per-channel mean and variance
out = bn(x)
print(f"train mode: output mean {out.mean():.3f}, std {out.std():.3f}")
# The same call nudges the running averages 10% of the way toward the batch statistics
print(f"running mean {bn.running_mean[0]:.3f}, running var {bn.running_var[0]:.3f}")
# Eval mode normalizes with the running averages instead of the batch statistics
bn.eval()
out = bn(x)
print(f"eval mode: output mean {out.mean():.3f}, std {out.std():.3f}")Im Trainingsmodus hat die Ausgabe einen Mittelwert von 0.000 und eine Standardabweichung von 1.000, obwohl der Mittelwert der Eingabe 5 beträgt. Nach einem Batch ist der laufende Mittelwert erst von 0 auf 0.496 und die laufende Varianz von 1 auf 1.294 gestiegen. Im Auswertungsmodus ergibt sich daher für die Ausgaben ein Mittelwert von 3.920. Es dauert einige Dutzend Batches, bis sich die laufenden Mittelwerte einpendeln. Wird ein Modell im falschen Modus oder vor dem Einpendeln der Statistiken ausgewertet, liegt seine gemessene Genauigkeit weit unter der tatsächlichen.
Bei der Inferenz ist BatchNorm eine feste lineare Transformation pro Kanal und kann daher in die vorangehende Faltung integriert werden: Die Faltungsgewichte werden mit γ/√(σ² + ε) multipliziert, und der Bias wird zu β − γμ/√(σ² + ε). Der Standard-Faltungsblock in YOLO26 besteht aus einer Faltung ohne Bias, gefolgt von BatchNorm und einer SiLU-Aktivierung. Ultralytics integriert jede dieser BatchNorm-Schichten vor der Vorhersage und dem Export in die jeweilige Faltung. So wird die Schicht entfernt, während dieselben Ausgaben erzeugt werden.
Warum Batch-Normalisierung hilft#
Im ursprünglichen Paper wurde der Nutzen von BatchNorm mit der Verringerung der internen Kovariatenverschiebung erklärt, also der Veränderung der Eingabeverteilung jeder Schicht, wenn sich frühere Schichten aktualisieren. Spätere Experimente, bei denen nach BatchNorm-Schichten zufällige Verteilungsverschiebungen eingefügt wurden, zeigten, dass das Training kaum beeinträchtigt wurde. Der Nutzen wurde stattdessen einer glatteren Verlustlandschaft mit besser vorhersehbaren Gradienten zugeschrieben, die es dem Optimierer ermöglicht, größere und stabilere Schritte zu machen. Wenn Voraktivierungen einen Mittelwert nahe null und eine Varianz nahe eins behalten, bleiben außerdem sättigende Aktivierungsfunktionen außerhalb ihrer flachen Bereiche. Das hilft gegen verschwindende Gradienten.
Da jedes Beispiel anhand der Statistiken eines zufällig zusammengestellten Batches normalisiert wird, fügt BatchNorm außerdem Rauschen hinzu, das als leichte Regularisierung wirkt. Im ursprünglichen Paper wurde berichtet, dass dadurch in manchen Fällen auf Dropout verzichtet werden konnte.
Einschränkungen#
- Kleine Batches: Die Batch-Statistiken werden ungenau, wenn jedes Gerät nur wenige Bilder verarbeitet. Bei 2 Bildern pro GPU erzielte die Gruppennormalisierung, die Statistiken über Kanalgruppen innerhalb jedes Bildes berechnet, auf ResNet-50 einen um 10,6 % niedrigeren ImageNet-Fehler als BatchNorm.
- Training mit mehreren GPUs: Jede GPU normalisiert anhand ihres eigenen Batch-Anteils, sofern die Schichten nicht in SyncBatchNorm umgewandelt werden. Dabei werden die Statistiken geräteübergreifend zusammengefasst, was zusätzliche Kommunikation erfordert.
- Sequenzmodelle: Sequenzen variabler Länge und batchabhängige Statistiken passen schlecht zusammen. Daher verwenden Transformer stattdessen eine Layer-Normalisierung.
Batch-Normalisierung und verwandte Begriffe#
- Datennormalisierung: Skaliert die Rohdaten während der Vorverarbeitung einmalig neu, etwa durch Division der Pixelwerte durch 255. BatchNorm normalisiert Zwischenaktivierungen in jeder Schicht und bei jedem Trainingsschritt.
- Layer-Normalisierung: Normalisiert jedes Beispiel anhand seiner eigenen Merkmale. Sie verhält sich daher im Training und bei der Inferenz gleich und ist unabhängig von der Batchgröße. RMSNorm, eine einfachere Variante ohne Subtraktion des Mittelwerts, ist bei großen Sprachmodellen weit verbreitet.
- Gruppennormalisierung: Teilt die Kanäle jedes Bildes in Gruppen auf und normalisiert jede Gruppe einzeln. Das eignet sich für Erkennungs- und Segmentierungsmodelle, die mit kleinen Batches trainiert werden.
- Instanznormalisierung: Normalisiert jeden Kanal jedes Bildes separat und entfernt dadurch den bildspezifischen Kontrast. Der Austausch von BatchNorm durch Instanznormalisierung sowohl während des Trainings als auch beim Testen verbesserte die Qualität der schnellen Übertragung von Bildstilen deutlich.










