Dropout Layer
Eine Dropout-Schicht setzt während des Trainings zufällig einen Anteil der Aktivierungen auf null, damit sich ein Netzwerk nicht auf eine einzelne Einheit verlassen kann. Das verringert Overfitting.
Eine Dropout-Schicht ist eine Regularisierung-Komponente eines neuronalen Netzes, die bei jedem Trainingsschritt zufällig einen Anteil p ihrer Eingaben auf null setzt und bei der Inferenz alle Werte unverändert durchlässt. Da jede Einheit in jedem Schritt ausfallen kann, kann sich das Netz nicht auf einige wenige bestimmte Neuronen oder fragile gegenseitige Anpassungen verlassen. Stattdessen lernt es redundante Merkmale, die besser verallgemeinern und die Trainingsdaten weniger stark überanpassen. Geoffrey Hinton und Kollegen führten die Technik 2012 ein, und Srivastava, Hinton et al. beschrieben sie 2014 ausführlich. Dropout ist eine integrierte Schicht in PyTorch, TensorFlow und den meisten anderen Deep-Learning-Frameworks. Sie kommt in Architekturen von vollständig verbundenen Klassifikationsköpfen bis hin zu Transformern zum Einsatz.
So funktioniert Dropout#
Beim Training erzeugt die Schicht für jeden Vorwärtsdurchlauf eine neue Zufallsmaske. Jedes Element bleibt mit Wahrscheinlichkeit 1 − p erhalten und wird mit Wahrscheinlichkeit p auf null gesetzt. Bei jedem Schritt wird also ein anderes, ausgedünntes Teilnetz trainiert. Das vollständige Netz, das beim Testen zum Einsatz kommt, entspricht näherungsweise dem Mittelwert über die exponentiell vielen Teilnetze, die dieselben Gewichte teilen. Deshalb wird Dropout oft als günstiges Ensemble-Training beschrieben. Damit die erwartete Aktivierung in beiden Phasen gleich bleibt, verwenden moderne Frameworks inverses Dropout: Die erhaltenen Werte werden während des Trainings mit 1 / (1 − p) multipliziert, sodass die Schicht bei der Inferenz nichts verändert. In PyTorch richtet sich nn.Dropout nach dem Trainings- oder Auswertungsmodus des Moduls:
import torch
from torch import nn
torch.manual_seed(0)
dropout = nn.Dropout(p=0.5)
x = torch.ones(10)
# Trainingsmodus: Etwa die Hälfte der Werte wird auf null gesetzt, und die übrigen Werte werden mit 1 / (1 - p) = 2 skaliert
dropout.train()
print("Train:", dropout(x))
# Auswertungsmodus: Die Schicht gibt alle Werte unverändert weiter
dropout.eval()
print("Eval: ", dropout(x))Im Trainingsmodus werden sechs der zehn Werte verworfen, und die vier übrigen werden zu 2.0. So bleibt der Erwartungswert bei 1.0. Im Auswertungsmodus bleiben alle zehn Werte bei 1.0.
Gängige Dropout-Varianten#
- Räumliches Dropout: PyTorchs
nn.Dropout2dsetzt ganze Feature-Map-Kanäle auf null. Das eignet sich für Faltungsnetze, da benachbarte Pixel innerhalb eines Kanals stark korreliert sind und das Verwerfen einzelner Pixel kaum regularisierend wirkt. - Stochastische Tiefe (DropPath): Statt einzelner Aktivierungen werden ganze Residualzweige für jede Stichprobe zufällig übersprungen. Das ist ein fester Bestandteil des Trainings von Vision Transformers und modernen CNNs.
- Monte-Carlo-Dropout: Dropout bleibt bei der Inferenz aktiv, und das Modell führt mehrere Vorwärtsdurchläufe mit derselben Eingabe aus. Die Streuung der Vorhersagen liefert eine kostengünstige Schätzung der Modellunsicherheit für sicherheitskritische Systeme. Gal und Ghahramani interpretierten dieses Verfahren als näherungsweise Bayes'sche Inferenz.
- DropConnect: Statt Aktivierungen werden einzelne Gewichte zufällig auf null gesetzt, sodass jede Verbindung ihre eigene Maske erhält.
Dropout in der Praxis#
Dropout-Raten werden wie alle anderen Hyperparameter abgestimmt. Srivastava et al. stellten fest, dass das Verwerfen verborgener Einheiten mit Wahrscheinlichkeit 0.5 bei einer großen Bandbreite von Netzen und Aufgaben gut funktionierte. Bei Eingabeeinheiten ist dagegen eine Beibehaltungswahrscheinlichkeit nahe 1 am besten, und der ursprüngliche Transformer verwendete p = 0.1. Eine zu hohe Rate verlangsamt die Konvergenz und kann zu Unteranpassung führen. Wird Dropout direkt vor der Batchnormalisierung platziert, kann das durch eine Verschiebung der Varianz zwischen Training und Test die Genauigkeit beeinträchtigen. Viele Faltungsneuronale Netze setzen vor allem auf Batchnormalisierung, Datenerweiterung und Gewichtszerfall und verwenden Dropout nur im Klassifikationskopf. Die Klassifikationsmodelle von Ultralytics YOLO26 folgen diesem Muster: Sie enthalten eine Dropout-Schicht zwischen den per Pooling zusammengefassten Merkmalen mit 1,280 Kanälen und dem abschließenden linearen Klassifikator. Die Rate dieser Schicht wird durch das Trainingsargument dropout festgelegt (standardmäßig 0.0).
from ultralytics import YOLO
# Ein YOLO26-Klassifikationsmodell laden, dessen Kopf die Dropout-Schicht enthält
model = YOLO("yolo26n-cls.pt")
# Mit 10 % Dropout im Klassifikationskopf auf einer kleinen MNIST-Teilmenge trainieren
results = model.train(data="mnist160", epochs=10, imgsz=64, dropout=0.1)Anwendungen in der Praxis#
- Medizinische Bildanalyse: Beschriftete Aufnahmen sind teuer. Daher werden Diagnoseklassifikatoren oft anhand einiger Tausend Bilder aus einem vortrainierten Backbone feinabgestimmt. Dropout im Klassifikationskopf begrenzt, wie stark sich der Kopf Fälle aus einer so kleinen Datenmenge einprägt.
- Verarbeitung natürlicher Sprache: Transformer-Encoder wie BERT wenden beim Vortraining und bei der Feinabstimmung auf allen Schichten eine Dropout-Wahrscheinlichkeit von 0.1 an, auch auf die Aufmerksamkeitsgewichte.
Dropout und verwandte Techniken#
- Batchnormalisierung: Die Batchnormalisierung standardisiert die Eingaben jeder Schicht, um das Training zu stabilisieren. Sie fügt durch Batch-Statistiken nur geringfügiges Rauschen hinzu und entfernt keine Einheiten.
- Labelglättung: Labelglättung regularisiert die Trainingsziele, indem sie One-Hot-Labels abschwächt. Dabei bleiben alle Aktivierungen erhalten.
- Pruning: Beim Pruning werden unwichtige Gewichte dauerhaft entfernt, um ein Modell zu verkleinern. Bei Dropout dauert das Setzen auf null dagegen nur einen Trainingsschritt, und die Anzahl der Parameter bleibt gleich.










