wake-up-neo.com

Bestellung von Batch-Normalisierung und Dropout?

Die ursprüngliche Frage bezog sich speziell auf TensorFlow-Implementierungen. Die Antworten beziehen sich jedoch auf Implementierungen im Allgemeinen. Diese allgemeine Antwort ist auch die richtige Antwort für TensorFlow.

Muss ich bei der Verwendung der Batch-Normalisierung und des Dropouts in TensorFlow (insbesondere unter Verwendung der contrib.layers) auf die Bestellung achten?

Es scheint möglich zu sein, dass es zu Problemen kommen kann, wenn ich Dropout mit sofortiger Batch-Normalisierung benutze. Wenn zum Beispiel die Verschiebung in der Batch-Normalisierung zu den größeren Skalenzahlen der Trainingsausgaben führt, dann wird dieselbe Verschiebung jedoch auf die kleineren Skalennummern (aufgrund der Kompensation für mehr Ausgangsleistungen) ohne Ausfall während des Testens angewendet, dann Schicht kann ausgeschaltet sein. Kompensiert die TensorFlow-Batch-Normalisierungsschicht dies automatisch? Oder passiert das nicht aus irgendeinem Grund, warum ich vermisst werde?

Gibt es auch andere Fallstricke, auf die Sie achten müssen, wenn Sie diese beiden zusammen verwenden? Angenommen, ich verwende sie in der richtigen Reihenfolge in Bezug auf das Obige (vorausgesetzt, ist eine korrekte Reihenfolge). Könnte es Probleme geben, sowohl Batch-Normalisierung als auch Dropout auf mehreren aufeinander folgenden Schichten zu verwenden? Ich sehe nicht sofort ein Problem damit, aber mir fehlt etwas.

Vielen Dank!

UPDATE:

Ein experimenteller Test scheint, der darauf hindeutet, dass die Reihenfolge von does Angelegenheit von Bedeutung ist. Ich habe das gleiche Netzwerk zweimal mit nur der Batch-Norm und dem Dropout-Rückwärtsgang ausgeführt. Wenn der Aussetzer vor der Batch-Norm liegt, scheint der Validierungsverlust zu steigen, da der Trainingsverlust abnimmt. Sie gehen beide im anderen Fall unter. Aber in meinem Fall sind die Bewegungen langsam, daher können sich die Dinge nach mehr Training ändern und es ist nur ein einziger Test. Eine endgültigere und fundiertere Antwort wäre dennoch erwünscht.

51
golmschenk

In Ioffe und Szegedy 2015 geben die Autoren an, dass "wir sicherstellen möchten, dass das Netzwerk für alle Parameterwerte immer Aktivierungen mit der gewünschten Verteilung erzeugt". Die Stapel-Normalisierungsebene wird also direkt nach einer Conv-Ebene/vollständig verbundenen Ebene eingefügt, jedoch vor der Aktivierung der ReLu-Aktivierung (oder einer anderen Art von Aktivierung). Weitere Informationen finden Sie in diesem Video um 53 Minuten.

Was Dropout betrifft, glaube ich, dass Dropout nach der Aktivierungsschicht angewendet wird. In dropout paper Abbildung 3b wird die Dropout-Faktor/Wahrscheinlichkeitsmatrix r(l) für die verborgene Schicht l auf y (l) angewendet, wobei y(l) der ist Ergebnis nach Anwenden der Aktivierungsfunktion f. 

Zusammengefasst lautet die Reihenfolge der Verwendung von Batch-Normalisierung und Dropout:

-> CONV/FC -> BatchNorm -> ReLu (oder andere Aktivierung) -> Dropout -> CONV/FC ->

63
Zhongyu Kuang

Wie in den Kommentaren erwähnt, ist hier eine erstaunliche Ressource, um die Reihenfolge der Layer nachzulesen. Ich habe die Kommentare durchgesehen und es ist die beste Ressource zum Thema, die ich im Internet gefunden habe

Meine 2 Cent:

Dropout soll Informationen aus bestimmten Neuronen vollständig blockieren, um sicherzustellen, dass sich die Neuronen nicht aneinander anpassen. Die Batch-Normalisierung muss also nach dem Dropout erfolgen.

Wenn Sie darüber nachdenken, berechnen wir bei typischen ML-Problemen nicht den Mittelwert und die Standardabweichung über die gesamten Daten und unterteilen sie dann in Zug-, Test- und Validierungssätze. Wir teilen die Statistiken auf und berechnen sie dann über den Zugsatz und verwenden sie, um die Validierungs- und Testdatensätze zu normalisieren und zu zentrieren

ich schlage daher vor, Schema 1 (Dies berücksichtigt Pseudomarvins Kommentar zur akzeptierten Antwort).

-> CONV/FC -> ReLu (oder andere Aktivierung) -> Dropout -> BatchNorm -> CONV/FC

im Gegensatz zu Schema 2

-> CONV/FC -> BatchNorm -> ReLu (oder andere Aktivierung) -> Dropout -> CONV/FC -> in der akzeptierten Antwort

Bitte beachten Sie, dass dies bedeutet, dass das Netzwerk unter Schema 2 eine Überanpassung im Vergleich zu Netzwerk unter Schema 1 aufweisen sollte. Das OP führte jedoch einige Tests durch, die in Frage stehen, und sie unterstützen Schema 2

14

In der Regel lassen Sie einfach das Dropout fallen (wenn Sie BN haben):

  • "BN eliminiert die Notwendigkeit von Dropout. In einigen Fällen führt BN zu ähnlichen Regularisierungsvorteilen wie Dropout."
  • "Architekturen wie ResNet, DenseNet usw., die Dropout nicht verwenden 

Weitere Informationen finden Sie in diesem Dokument [ Die Disharmonie zwischen Dropout und Stapelnormierung durch Varianzverschiebung ] verstehen, wie bereits in den Kommentaren von @Haramoz erwähnt.

3
xtluo

Basierend auf dem Forschungspapier für eine bessere Leistung sollten wir BN verwenden, bevor Sie Dropouts anwenden

1
Renu

Die richtige Reihenfolge lautet: Conv> Normalization> Aktivierung> Dropout> Pooling

0
salehinejad