Regularization
Regularisierung schränkt ein Modell während des Trainings ein, damit es verallgemeinert, statt Rauschen auswendig zu lernen. Behandelt L1, L2, Weight Decay, Dropout und Early Stopping.
Regularisierung ist jede Änderung daran, wie ein Modell trainiert wird, die seinen Fehler bei neuen Daten senken soll, selbst wenn der Fehler bei den Trainingsdaten steigt. Sie wirkt Overfitting entgegen, bei dem ein Modell mit ausreichender Kapazität Rauschen und Eigenheiten der gesehenen Beispiele auswendig lernt. Regularisierung begrenzt die effektive Komplexität eines Modells, indem sie große Gewichte bestraft, Rauschen hinzufügt, vielfältigere Daten einbringt oder das Training vorzeitig beendet. In Begriffen des Bias-Varianz-Verhältnisses nimmt sie etwas zusätzlichen Bias für eine stärkere Verringerung der Varianz in Kauf.
L1- und L2-Strafterm#
Die klassische Form ergänzt die Verlustfunktion um einen Strafterm für die Gewichte: Gesamtverlust = Datenverlust + λ × Strafterm. L2-Regularisierung bestraft die Summe der quadrierten Gewichte, Σw². Dadurch werden alle Gewichte proportional zu ihrer Größe gegen null gezogen. Bei linearen Modellen wird sie als Ridge-Regression bezeichnet. L1-Regularisierung bestraft die Summe der absoluten Gewichtswerte. Ihr konstanter Zug setzt viele Gewichte exakt auf null. Eine L1-bestrafte lineare Regression, der Lasso, übernimmt daher zugleich die Merkmalsauswahl. Elastic Net kombiniert beide Verfahren. Die Stärke des Strafterms λ, in scikit-learn alpha genannt, ist ein Hyperparameter: Ist der Wert zu klein, passt sich das Modell weiterhin zu stark an; ist er zu groß, lernt es zu wenig. Eine Polynomregression 9. Grades, angepasst an 12 verrauschte Punkte einer Sinuskurve, veranschaulicht beide Fehlermodi:
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
rng = np.random.default_rng(0)
# 12 noisy training points from a sine wave, plus clean test points
x_train = rng.uniform(0, 1, (12, 1))
y_train = np.sin(2 * np.pi * x_train[:, 0]) + rng.normal(0, 0.2, 12)
x_test = np.linspace(0, 1, 200)[:, None]
y_test = np.sin(2 * np.pi * x_test[:, 0])
# The same degree-9 polynomial, fit with a growing L2 penalty on its coefficients
for alpha in (0.0, 1e-4, 1e-2, 1.0):
model = make_pipeline(PolynomialFeatures(9), Ridge(alpha=alpha)).fit(x_train, y_train)
train_mse = np.mean((model.predict(x_train) - y_train) ** 2)
test_mse = np.mean((model.predict(x_test) - y_test) ** 2)
weight_norm = np.linalg.norm(model[-1].coef_)
print(f"alpha {alpha:g}: train MSE {train_mse:.4f}, test MSE {test_mse:.4f}, |w| {weight_norm:.1f}")Ohne Strafterm verläuft das Polynom durch das Rauschen: Die Norm seiner Koeffizienten erreicht etwa 425.000, der Trainingsfehler beträgt 0,0148 und der Testfehler 0,1859. Ein Strafterm von 0,0001 senkt die Koeffizientennorm auf 20,8 und verringert den Testfehler um den Faktor elf auf 0,0170, während der Trainingsfehler auf 0,0334 steigt. Bei einem Alpha-Wert von 1 dominiert der Strafterm, und das Modell lernt zu wenig; der Testfehler beträgt dann 0,3998.
Weight Decay und Dropout in neuronalen Netzen#
In neuronalen Netzen wird L2-Regularisierung meist als Weight Decay umgesetzt: Bei jedem Update wird jedes Gewicht zusätzlich um einen kleinen Anteil seines Werts verringert. Bei einfachem stochastischem Gradientenabstieg sind beide Verfahren gleichwertig. Bei adaptiven Optimierern wie Adam wird ein zum Gradienten addierter L2-Term durch Adams Skalierung der einzelnen Parameter geteilt. Dadurch werden Gewichte mit großen Gradienten kaum regularisiert. Entkoppelter Weight Decay wendet die Verkleinerung stattdessen direkt an. Der daraus entstehende Optimierer AdamW ist die Standardwahl für Transformer.
Eine Dropout-Schicht setzt bei jedem Trainingsschritt die Ausgabe jeder Einheit mit Wahrscheinlichkeit p auf null und skaliert die verbleibenden Ausgaben mit 1/(1 − p). So kann sich das Netz nicht auf eine einzelne Einheit verlassen und trainiert praktisch viele ausgedünnte Teilnetze mit gemeinsamen Gewichten. Bei der Inferenz bleiben alle Einheiten aktiv. In den ursprünglichen Experimenten erwies sich eine Ausfallwahrscheinlichkeit von 0,5 für verborgene Einheiten als nahezu optimal für eine große Bandbreite von Netzen und Aufgaben.
Das Training von Ultralytics YOLO bietet beides: weight_decay wendet standardmäßig den Wert 0,0005 nur auf Faltungs- und lineare Gewichte an und lässt Bias-Parameter sowie Parameter von Normalisierungsschichten aus. dropout wirkt standardmäßig mit dem Wert 0,0 direkt vor der letzten linearen Schicht von Klassifizierungsmodellen für YOLO26.
from ultralytics import YOLO
# Ein vortrainiertes YOLO26n-Klassifizierungsmodell laden
model = YOLO("yolo26n-cls.pt")
# Mit Dropout im Klassifizierungskopf und stärkerem Weight Decay trainieren
results = model.train(data="mnist160", epochs=10, dropout=0.2, weight_decay=0.001)Weitere Regularisierungstechniken#
- Datenerweiterung: Spiegelungen, Ausschnitte, Skalierungen, Farbverschiebungen und Mosaike erweitern die Vielfalt der Trainingsbilder. So sieht das Modell jedes Objekt unter deutlich mehr Bedingungen, als der ursprüngliche Datensatz enthält.
- Label Smoothing: Ersetzt One-Hot-Klassifizierungsziele durch leicht abgeschwächte Zielwerte, damit das Modell seine Logits nicht mehr auf extreme Konfidenzwerte treibt.
- Implizite Regularisierung: Das Gradientenrauschen beim Training mit kleinen Batches und das Rauschen zwischen Batches durch Batch-Normalisierung regularisieren beide das Modell, ohne dass ein expliziter Term nötig ist.
Vorzeitiges Beenden regularisiert das Modell, indem es die Trainingsdauer begrenzt. Nach jeder Epoche bewertet es das Modell anhand der Validierungsdaten und beendet das Training, sobald sich der Wert eine festgelegte Anzahl von Epochen lang nicht verbessert hat. Diese Anzahl heißt Geduld; die besten bisher gesehenen Gewichte bleiben erhalten:
Regularisierung und verwandte Begriffe#
- Normalisierung: Skaliert Eingaben oder Aktivierungen neu, um das Training zu beschleunigen und zu stabilisieren. Batch-Normalisierung regularisiert nur als Nebeneffekt.
- Hyperparameteroptimierung: Sucht nach geeigneten Werten für Regularisierungseinstellungen wie λ, die Dropout-Wahrscheinlichkeit und die Geduld sowie für alle anderen Hyperparameter.
- Modell-Ensembles: Verringern die Varianz, indem sie die Vorhersagen mehrerer unabhängig trainierter Modelle mitteln. Dropout bildet ein solches Ensemble innerhalb eines einzelnen Netzes näherungsweise nach: Beim Training werden Stichproben aus einer exponentiell großen Zahl ausgedünnter Teilnetze gezogen. Wird beim Testen das vollständige Netz mit allen aktiven Einheiten ausgeführt, entspricht das näherungsweise dem Mitteln all ihrer Vorhersagen.










