Die Dropout Layer ist eine Schicht, die beim Aufbau von Neuronalen Netzwerken genutzt wird, um das Overfitting zu verhindern. Dabei werden einzelne Knoten in verschiedenen Trainingsabläufen mithilfe einer Wahrscheinlichkeit ausgeschlossen, so, als ob sie gar nicht Bestandteil der Netzwerkarchitektur wären.
Bevor wir jedoch zu den Details dieser Schicht kommen können, sollten wir erstmal verstehen, wie ein Neuronales Netz funktioniert und wieso es zu Overfitting kommen kann.
Wie funktioniert ein Perceptron?
Das Perceptron ist ein ursprünglich mathematisches Modell und wurde erst später in der Informatik und im Machine Learning genutzt, aufgrund der Eigenschaft komplexe Zusammenhänge erlernen zu können. In der einfachsten Form besteht es aus genau einem sogenannten Neuron, das den Aufbau des menschlichen Gehirns nachahmt.
Das Perceptron hat dabei mehrere Eingänge, die sogenannten Inputs, an denen es numerische Informationen, also Zahlenwerte erhält. Je nach Anwendung kann sich die Zahl der Inputs unterscheiden. Die Eingaben haben verschiedene Gewichte, die angeben, wie einflussreich die Inputs für die schlussendliche Ausgabe sind. Während des Lernprozesses werden die Gewichte so geändert, dass möglichst gute Ergebnisse entstehen.

Das Neuron selbst bildet dann die Summe der Inputwerte multipliziert mit den Gewichten der Inputs. Diese gewichtete Summe wird weitergeleitet an die sogenannte Aktivierungsfunktion. In der einfachsten Form eines Neurons gibt es genau zwei Ausgaben, es können also nur binäre Outputs vorhergesagt werden, beispielsweise „Ja“ oder „Nein“ oder „Aktiv“ oder „Inaktiv“ etc.

Wenn das Neuron binäre Ausgabewerte hat, wird eine Funktion genutzt, deren Werte auch zwischen 0 und 1 liegen. Ein Beispiel für eine häufig genutzt Aktivierungsfunktion ist die Sigmoid-Funktion. Die Werte der Funktion schwanken zwischen 0 und 1 und nehmen eigentlich auch fast ausschließlich diese Werte an. Ausschließlich bei x = 0 gibt es einen steilen Anstieg und den Sprung von 0 zu 1. Wenn die gewichtete Summe des Perceptrons also x = 0 überschreitet und das Perceptron Sigmoid als Aktivierungsfunktion nutzt, dann ändert sich der Output auch entsprechend von 0 auf 1.
Was ist Overfitting?
Der Begriff Overfitting wird im Zusammenhang mit Vorhersagemodellen genutzt, die zu spezifisch auf den Trainingsdatensatz angepasst sind und dadurch die Streuung der Daten mit erlernen. Dies passiert häufig, wenn das Modell eine zu komplexe Struktur hat für die zugrundeliegenden Daten. Das Problem ist dann, dass das trainierte Modell nur sehr schlecht generalisiert, also nur unzureichende Vorhersagen für neue, ungesehene Daten liefert. Die Performance auf dem Trainingsdatensatz hingegen war sehr gut, weshalb man von einer hohen Modellgüte ausgehen könnte.

Bei tiefen Neuronalen Netzwerken kann es dazu kommen, dass das komplexe Modell den statistischen Noise des Trainingsdatensatzes erlernt und dadurch gute Ergebnisse im Training liefert. Im Testdatensatz jedoch und vor allem nachher in der Anwendung liegt dieser Noise jedoch nicht mehr vor und deshalb ist die Generalisierung des Modells nur sehr schlecht.
Jedoch wollen wir nicht auf die tiefe und komplexe Architektur des Netzwerkes verzichten, da sich nur so komplexe Zusammenhänge erlernen und somit schwierige Probleme lösen lassen. Vor der Vorstellung der Dropout Layer war dies eine komplizierte Gratwanderung die richtige Architektur zu finden, die noch komplex genug ist für das zugrundeliegende Problem ist, aber auch nicht zum Overfitting neigt.
Wie funktioniert die Dropout Layer?
Beim Dropout werden bestimmte Knoten in einem Trainingsdurchlauf auf den Wert Null gesetzt, also aus dem Netzwerk entfernt. Somit haben sie bei der Vorhersage und auch bei der Backpropagation keinerlei Einfluss. Dadurch wird in jedem Durchlauf eine neue, leicht abgeänderte Netzwerkarchitektur gebaut und das Netzwerk erlernt, auch gute Vorhersagen ohne bestimmte Inputs zu erzeugen.
Beim Einbau der Dropout Layer muss auch eine sogenannte Dropout Wahrscheinlichkeit angegeben werden. Diese legt fest, wie viele der Knoten in der Schicht gleich 0 gesetzt werden. Wenn wir eine Inputschicht mit zehn Eingabewerten haben, bedeutet eine Dropout-Probability von 10 %, dass in jedem Trainingsdurchlauf ein zufälliger Input gleich Null gesetzt wird. Wenn es sich stattdessen um eine Hidden Layer handelt, wird dieselbe Logik auf die Hidden Nodes angewandt. Also eine Dropoutwahrscheinlichkeit von 10 % bedeutet, dass in jedem Durchlauf 10 % der Knoten nicht genutzt werden.
Die optimale Wahrscheinlichkeit hängt auch stark von der Schichtart ab. Wie verschiedene Paper herausgefunden haben, ist bei der Input-Layer eine Dropoutwahrscheinlichkeit nahe der eins optimal. Bei den Hidden Layers hingegen führt eine Wahrscheinlichkeit nahe der 50 % zu besseren Ergebnissen.
Warum verhindert die Dropout Layer Overfitting?
In tiefen Neuronalen Netzwerken entsteht Overfitting meist dadurch, dass bestimmte Neuronen von verschiedenen Schichten sich gegenseitig beeinflussen. Einfach gesagt führt das zum Beispiel dazu, dass gewisse Neuronen die Fehler von vorherigen Knoten ausbessern und somit voneinander abhängen oder die guten Ergebnisse der vorherigen Schicht ohne große Änderungen einfach weiterreichen. Dadurch wird eine vergleichsweise schlechte Generalisierung erreicht.
Durch die Nutzung der Dropout Layer können sich die Neuronen hingegen nicht mehr auf die Knoten von vorherigen oder folgenden Schichten verlassen, da sie nicht davon ausgehen können, dass diese in dem jeweiligen Trainingsdurchlauf überhaupt existieren. Dies führt dazu, dass die Neuronen, nachweislich, grundlegendere Strukturen in Daten erkennt, die nicht von der Existenz einzelner Neuronen abhängen. Diese Abhängigkeiten treten in regulären Neuronalen Netzwerken tatsächlich relativ häufig auf, da dies eine einfache Möglichkeit ist, die Verlustfunktion schnell zu verringern und dadurch dem Ziel des Modells schnell näher zu kommen.
Außerdem verändert, wie bereits erwähnt, der Dropout die Architektur des Netzwerks leicht. Somit ist das austrainierte Modell dann eine Kombination aus vielen, leicht unterschiedlichen Modellen. Diese Vorgehensweise kennen wir bereits aus dem Ensemble Learning, wie beispielsweise in Random Forests. Dabei stellt sich heraus, dass das Ensemble von vielen, relativ ähnlichen Modellen meist bessere Ergebnisse liefert, als ein einziges Modell. Dieses Phänomen ist unter dem Namen „Wisdom of the Crowds“ bekannt.
Wie baut man Dropout in ein bestehendes Netzwerk ein?
In der Praxis wird die Dropout Layer oft nach einer Fully-Connected Layer verwendet, da diese vergleichsweise viele Parameter hat und somit die Wahrscheinlichkeit der sogenannten „Co-Adaption“, also der Abhängigkeit von Neuronen untereinander sehr hoch ist. Jedoch kann man theoretisch auch nach jeder beliebigen Schicht eine Dropout Layer einfügen, jedoch kann es dann auch zu schlechteren Ergebnissen führen.
Praktisch gesehen wird die Dropout Layer einfach nach der gewünschten Schicht eingefügt und nutzt dann die Neuronen der vorhergehenden Schicht als Inputs. Je nach Wert der Wahrscheinlichkeit wird ein Teil dieser Neuronen dann auf Null gesetzt und an die darauffolgende Schicht weitergegeben.
Es bietet sich dabei vor allem an, die Dropout Layer in größeren Neuronalen Netzwerken zu nutzen. Denn eine Architektur mit vielen Schichten tendiert deutlich stärker zum Overfitting als kleinere Netzwerke. Dabei ist es auch wichtig, die Anzahl der Nodes entsprechend zu erhöhen, wenn eine Dropout Layer hinzugefügt wird. Als Daumenregel wird dazu die Anzahl der Nodes vor Einführung des Dropouts durch die Dropout Rate geteilt.
Was passiert mit dem Dropout während der Prediction?
Wie wir nun festgestellt haben, ist die Nutzung einer Dropout Layer während des Trainings ein wichtiger Faktor zur Vermeidung von Overfitting. Jedoch stellt sich noch die Frage, ob diese Systematik auch genutzt wird, wenn das Modell fertig trainiert wurde und dann für Vorhersagen für neue Daten genutzt wird.
Tatsächlich werden die Dropout Schichten nach dem Training nicht mehr für Vorhersagen genutzt. Das bedeutet, dass alle Neuronen für die schlussendliche Vorhersage bleiben. Jedoch hat das Modell nun mehr Neuronen zur Verfügung, als es während dem Training der Fall war. Dadurch sind jedoch die Gewichtungen in der Ausgabeschicht deutlich höher als dies während dem Training erlernt wurde. Deshalb werden die Gewichte mit der Höhe der Dropout Rate skaliert, damit das Modell trotzdem weiterhin gute Vorhersagen macht.
Wie kann man die Dropout Layer in Python nutzen?
Für Python gibt es bereits viele vordefinierte Implementierungen mit denen man Dropout Layers nutzen kann. Die bekannteste ist wahrscheinlich die von Keras bzw. TensorFlow. Diese kann man, wie andere Schichtarten auch, über „tf.keras.layers“ importieren:

Anschließend übergibt man die Parameter, also zum einen die Größe des Inputvektors und die Dropoutwahrscheinlicht, die man abhängig von der Schichtart und dem Netzwerkaufbau wählen sollte. Die Schicht kann man dann mit der Übergabe von tatsächlichen Werten in der Variable „data“ nutzen. Außerdem gibt es noch den Parameter „training“, der angibt, ob die Dropout Layer lediglich im Training und nicht bei der Vorhersage von neuen Werten, der sogenannte Inference, genutzt wird.
Wenn der Parameter nicht explizit gesetzt wird, wird die Dropout Layer lediglich bei „model.fit()“, also dem Training, aktiv und nicht bei „model.predict()“, also der Vorhersage von neuen Werten.
Was sind die Vorteile einer Dropout Layer?
Dropout ist eine leistungsstarke Regularisierungstechnik, die mehrere wichtige Vorteile bietet, wenn sie in den Trainingsprozess neuronaler Netze integriert wird. Ursprünglich als einfache, aber effektive Methode zur Verhinderung von Overfitting eingeführt, hat sich Dropout inzwischen zu einem weit verbreiteten Werkzeug im Deep Learning entwickelt. Im Folgenden werden einige der wichtigsten Vorteile der Dropout-Methode aufgeführt:
- Verbesserte Generalisierung: Einer der Hauptvorteile einer Dropout Layer ist seine Fähigkeit, die Generalisierungsleistung von neuronalen Netzen zu verbessern. Eine Überanpassung tritt auf, wenn ein Modell zu sehr auf die Details der Trainingsdaten spezialisiert ist, was zu einer schlechten Leistung bei ungesehenen Daten führt. Durch die zufällige Deaktivierung von Neuronen während des Trainings verhindert Dropout die Koadaptation von Neuronen und zwingt das Netzwerk, robustere und verallgemeinerte Merkmale zu lernen. Diese Regularisierung hilft dem Modell, bei neuen, ungesehenen Daten besser abzuschneiden, was zu einer verbesserten Gesamtleistung führt.
- Effektive Regularisierung ohne komplexe Architekturen: Dropout bietet eine effektive Regularisierungstechnik, ohne dass komplexe Architekturen erforderlich sind. Bei traditionellen Regularisierungsmethoden, wie L1- und L2-Regularisierung, kann die Einführung zusätzlicher Parameter oder Einschränkungen rechenintensiv und schwierig abzustimmen sein. Dropout hingegen ist relativ einfach zu implementieren und erfordert nur minimale Änderungen an der bestehenden Netzarchitektur. Diese Einfachheit macht es zu einer attraktiven Option für die Verbesserung der Leistung von Deep-Learning-Modellen, ohne dass signifikante architektonische Änderungen erforderlich sind.
- Verringerung der Überanpassung: Überanpassung tritt auf, wenn das neuronale Netz zu sehr auf das Lernen von Rauschen oder irrelevanten Mustern in den Trainingsdaten spezialisiert ist. Dropout reduziert das Risiko der Überanpassung, indem es das Netzwerk daran hindert, sich zu stark auf bestimmte Merkmale oder Neuronen zu verlassen. Durch das zufällige Ausscheiden von Neuronen während des Trainings führt Dropout ein Element des Rauschens in den Lernprozess ein, das als eine Form der Regularisierung angesehen werden kann. Dieses Rauschen ermutigt das Netz, robustere Repräsentationen zu erlernen, was seine Fähigkeit zur Generalisierung auf neue, ungesehene Daten verbessert.
- Einfachheit und rechnerische Effizienz: Die Implementierung von Dropout ist relativ einfach, insbesondere in modernen Deep Learning Frameworks wie TensorFlow und PyTorch. Das Hinzufügen von Dropout-Schichten zur Architektur des neuronalen Netzes erfordert nur minimalen Aufwand, so dass es leicht in bestehende Modelle integriert werden kann. Darüber hinaus erhöht Dropout trotz der Zufälligkeit, die während des Trainings eingeführt wird, die Rechenkosten im Vergleich zu anderen Regularisierungstechniken nicht wesentlich. Diese Effizienz ermöglicht es Forschern und Praktikern, mit Dropout zu experimentieren, ohne dass ein erheblicher rechnerischer Aufwand entsteht.
- Robustheit gegenüber verrauschten Daten: Dropout kann als eine Form der Rauschunterdrückung während des Trainings fungieren und macht das Modell widerstandsfähiger gegenüber verrauschten oder unvollkommenen Trainingsdaten. Durch das zufällige Ausscheiden von Neuronen verhindert Dropout, dass sich das Netz zu stark an das in den Daten vorhandene Rauschen anpasst. Diese Robustheit gegenüber verrauschten Daten kann besonders in realen Szenarien von Vorteil sein, in denen die Datenqualität suboptimal sein kann.
Zusammenfassend lässt sich sagen, dass Dropout eine wertvolle Regularisierungstechnik ist, die für Deep-Learning-Anwender mehrere Vorteile bietet. Durch die Förderung einer besseren Generalisierung, die Verringerung der Überanpassung und die einfache Implementierung ist Dropout zu einem Standardwerkzeug in der Deep-Learning-Toolbox geworden. Seine Fähigkeit, die Leistung und Robustheit neuronaler Netze zu verbessern, macht es zu einer unverzichtbaren Komponente beim Aufbau zuverlässiger und effektiver Deep-Learning-Modelle.
Welche Tips sollte man bei der Nutzung von Dropout Layers beachten?
Die Einbindung der Dropout Layer in Dein neuronales Netzwerk kann dessen Leistung erheblich verbessern und eine Überanpassung verhindern. Wenn Du als Anfänger im Bereich des Deep Learning einige bewährte Verfahren und Überlegungen kennst, kannst Du Dropout optimal nutzen und robuste Modelle erstellen.
Eine wichtige Überlegung ist die Wahl einer geeigneten Dropout-Rate. Eine zu niedrige Dropout-Rate bietet möglicherweise nicht genügend Regularisierung, was zu einer Überanpassung führt, während eine zu hohe Rate die Fähigkeit des Netzwerks, effektiv zu lernen, beeinträchtigen kann. Ein gängiger Ansatz ist es, mit einer moderaten Dropout-Rate zu beginnen und sie je nach Problem und Leistung des Modells anzupassen.
Auch die Platzierung der Dropout-Schichten ist wichtig. Dropout kann je nach Architektur des Netzes nach vollständig verknüpften Schichten, nach Faltungsschichten oder nach beiden angewendet werden. Das Experimentieren mit verschiedenen Platzierungen kann zu besseren Ergebnissen führen.
Im Allgemeinen ist es am besten, Dropout auf der Ausgabeschicht zu vermeiden, insbesondere bei Klassifizierungsaufgaben. Dropout auf der Ausgabeschicht kann unnötige Zufälligkeiten einführen und zu suboptimalen Vorhersagen führen.
Konsistenz ist entscheidend. Verwende Dropout konsequent sowohl in der Trainings- als auch in der Testphase. Während des Trainings verbessert Dropout die Generalisierung, aber während der Testphase solltest Du die Dropout-Schichten deaktivieren, indem Du die Dropout-Rate auf 0 setzt, um genaue Vorhersagen zu erhalten.
Die Überwachung der Leistung des Modells ist bei der Verwendung von Dropout unerlässlich. Überprüfe regelmäßig die Trainings- und Validierungsgenauigkeit oder den Verlust, um sicherzustellen, dass die Dropout-Rate für das jeweilige Problem geeignet ist. Wenn das Modell nicht lernt oder überangepasst zu sein scheint, solltest Du die Dropout-Rate entsprechend anpassen.
Dropout kann in Kombination mit anderen Regularisierungstechniken wie L1- und L2-Regularisierung verwendet werden, um die Generalisierungsfähigkeiten des Modells weiter zu verbessern und eine Überanpassung wirksam zu verhindern.
Denke daran, dass Deep Learning ein iterativer Prozess des Experimentierens und der Feinabstimmung ist. Zögere also nicht, mit verschiedenen Dropout-Raten, Architekturen und Regularisierungstechniken zu experimentieren. Jedes Problem und jeder Datensatz kann einen eigenen Ansatz erfordern, daher solltest Du iterieren und die beste Konfiguration für Deinen speziellen Fall finden.
Wenn Du diese bewährten Verfahren und Überlegungen befolgst, kannst Du die Leistung von Dropout nutzen, um robustere und genauere Deep Learning-Modelle zu erstellen und bessere Ergebnisse in Deinen Projekten zu erzielen.
Das solltest Du mitnehmen
- Als Dropout bezeichnet man eine Schicht in einem Neuronalen Netzwerk, die mit einer definierten Wahrscheinlichkeit Neuronen auf Null setzt, also diese in einem Trainingsdurchlauf nicht beachtet.
- Dadurch lässt sich in tiefen Neuronalen Netzwerken die Gefahr des Overfittings verringern, da die Neuronen untereinander keine sogenannte Adaption bilden, sondern tieferliegende Strukturen in den Daten erkennen.
- Die Dropout Layer lässt sich sowohl in der Eingabeschicht als auch in den verborgenen Schichten verwenden. Jedoch hat sich gezeigt, dass je nach Schichttyp unterschiedliche Dropoutwahrscheinlichkeiten genutzt werden sollten.
- Sobald das Training austrainiert wurde, wird die Dropout Layer jedoch nicht mehr für Vorhersagen genutzt. Damit das Modell jedoch weiterhin gute Ergebnisse liefert werden die Gewichte mithilfe der Dropout Rate skaliert.
Andere Beiträge zum Thema Dropout Layer
Die Dokumentation der TensorFlow Dropout Layer findest Du hier.