Bestellung von Chargennormalisierung und Ausfall?


115

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 mir bei der Verwendung von Batch-Normalisierung und Dropout in TensorFlow (insbesondere unter Verwendung der Contrib.Layer) Sorgen um die Bestellung machen?

Es scheint möglich, dass es Probleme gibt, wenn ich Dropout gefolgt von einer Batch-Normalisierung verwende. Wenn beispielsweise die Verschiebung in der Chargennormalisierung auf die größeren Skalennummern der Trainingsausgaben umgestellt wird, diese Verschiebung jedoch auf die kleineren Skalennummern (aufgrund der Kompensation für mehr Ausgaben) ohne Ausfall während des Tests angewendet wird, dann ist dies der Fall Schaltung kann ausgeschaltet sein. Kompensiert die TensorFlow-Chargennormalisierungsschicht dies automatisch? Oder passiert das nicht aus irgendeinem Grund, den ich vermisse?

Gibt es auch andere Fallstricke, auf die Sie achten müssen, wenn Sie diese beiden zusammen verwenden? Wenn Sie beispielsweise davon ausgehen, dass ich sie in der oben genannten Reihenfolge in der richtigen Reihenfolge verwende (vorausgesetzt, es liegt eine korrekte Reihenfolge vor), kann es dann zu Problemen bei der Verwendung von Batch-Normalisierung und Dropout auf mehreren aufeinanderfolgenden Ebenen kommen? Ich sehe nicht sofort ein Problem damit, aber mir fehlt möglicherweise etwas.

Vielen Dank!

AKTUALISIEREN:

Ein experimenteller Test scheint zu zeigen , dass Ordnung tut Angelegenheit. Ich habe dasselbe Netzwerk zweimal mit nur der Batch-Norm und dem umgekehrten Ausfall betrieben. Wenn der Ausfall vor der Chargennorm liegt, scheint der Validierungsverlust zu steigen, da der Trainingsverlust sinkt. Im anderen Fall gehen sie beide unter. Aber in meinem Fall sind die Bewegungen langsam, so dass sich die Dinge nach mehr Training ändern können und es nur ein einziger Test ist. Eine endgültigere und fundiertere Antwort wäre weiterhin willkommen.

Antworten:


143

In Ioffe und Szegedy 2015 stellen die Autoren fest, dass "wir sicherstellen möchten, dass das Netzwerk für alle Parameterwerte immer Aktivierungen mit der gewünschten Verteilung erzeugt". Die Batch-Normalisierungsschicht wird also direkt nach einer Conv-Schicht / vollständig verbundenen Schicht eingefügt, jedoch bevor sie in die ReLu-Aktivierung (oder eine andere Art von Aktivierung) eingespeist wird. Weitere Informationen finden Sie in diesem Video um 53 Minuten.

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

Zusammenfassend lautet die Reihenfolge für die Verwendung von Chargennormalisierung und Dropout:

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


63
Es scheint, dass sogar Christian Szegedy jetzt gerne BatchNorm nach der ReLU spielt (nicht davor). Zitat von F. Chollet, dem Autor von Keras: "Ich bin nicht zurückgegangen, um zu überprüfen, was sie in ihrem Originalpapier vorschlagen, aber ich kann garantieren, dass der kürzlich von Christian geschriebene Code relu vor BN gilt. Es ist immer noch gelegentlich ein Thema der Debatte jedoch. " Quelle
Pseudomarvin

3
Was ist mit Pooling? Würde das zwischen Batchnorm und Aktivierung liegen?
Worte für den

5
Es sieht auch so aus, als ob die Genauigkeit bei BN nach der Aktivierung höher sein könnte: github.com/cvjena/cnn-models/issues/3
wordsforthewise

1
Video wird irgendwie gelöscht!
blitu12345

10
Dieses Papier zeigt, dass ein Ausfall mit BN normalerweise zu schlechteren Ergebnissen führt, wenn nicht eine Konditionierung durchgeführt wird, um das Risiko von Varianzverschiebungen zu vermeiden.
Haramoz

37

Wie in den Kommentaren erwähnt, eine erstaunliche Ressource in der Größenordnung von Schichten zu lesen , ist hier . 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 von bestimmten Neuronen vollständig blockieren, um sicherzustellen, dass sich die Neuronen nicht gemeinsam anpassen. Die Batch-Normalisierung muss also nach dem Ausfall erfolgen, da Sie sonst Informationen durch die Normalisierungsstatistik weiterleiten.

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

daher schlage ich Schema 1 vor (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 im Vergleich zum Netzwerk unter Schema 1 eine Überanpassung aufweisen sollte, OP jedoch einige Tests wie in Frage gestellt durchgeführt hat und Schema 2 unterstützt


Relevante reddit Diskussion über BatchNorm Platzierung: reddit.com/r/MachineLearning/comments/67gonq/…
saetch_g

3
Aber würde dies Ihre BN-Statistiken nicht durcheinander bringen, da Sie sie nach dem Anwenden des Dropouts berechnen, was zum Testzeitpunkt nicht der Fall ist?
ZakJ

@ ZakJ Ich denke nicht. Da wir BN pro Einheit (für jedes interne Merkmal) berechnen und darüber hinaus skalieren, um den Ausfall zu kompensieren.
Eifer

@ ZakJ ist richtig. Siehe die Antwort von Mohammed Adel und dieses Papier hier: arxiv.org/pdf/1801.05134.pdf . Tatsächlich lernen die Batch-Normalisierungsschichten, der kovariaten Verschiebung der Daten entgegenzuwirken, die nicht mehr vorhanden sind, wenn Dropout zum Testzeitpunkt ausgeschaltet wird.
skeller88

@ skeller88 Ich habe die Zeitung nicht gelesen. Ich denke, wenn Sie BN vor dem Ausfall haben, dann schraubt das im Wesentlichen die Absicht der BN-Schicht zusammen, da die Funktion von BN darin besteht, standardisierte Daten für die nächste Schicht bereitzustellen.
MiloMinderbinder

12

Normalerweise lassen Sie einfach die Dropout(wenn Sie haben BN) fallen:

  • "BN macht es Dropoutin einigen Fällen überflüssig, weil BN intuitiv ähnliche Regularisierungsvorteile bietet wie Dropout intuitiv."
  • "Architekturen wie ResNet, DenseNet usw. werden nicht verwendet Dropout

Weitere Einzelheiten finden Sie in diesem Artikel [ Verständnis der Disharmonie zwischen Dropout und Chargennormalisierung durch Varianzverschiebung], wie bereits von @Haramoz in den Kommentaren erwähnt.


Was ist mit MLPs? Ist es nützlich, sie zu kombinieren?
DINA TAKLIT

1
@DINATAKLIT Wenn Sie wirklich nicht genug Trainingsdaten haben, meiner Meinung nach JA.
Xtluo

@xtulo meinst du diese Arbeit, sobald sie ein kleines Datum ist? Zum Beispiel, wenn ich gelesen habe, dass die Batch-Normalisierung bei großen Datenmengen besser funktioniert! Ich bin etwas verwirrt:!
DINA TAKLIT

1
@DINATAKLIT In Ihrem vorherigen Kommentar what about MLPs is it useful to combine them, meinen Sie , dass Is it useful to combine Dropout and BN when using MLPs? Mein Gefühl dabei ist, dass es hauptsächlich von der Größe Ihres Modells und der Menge Ihrer Trainingsdaten abhängt.
Xtluo

@xtulo Ja, ich meine, es ist nützlich, Droupout und BN zu kombinieren. Ja, ich stimme Ihrer letzten Antwort zu.
DINA TAKLIT

6

Ich habe ein Papier gefunden, das die Disharmonie zwischen Dropout und Batch Norm (BN) erklärt. Die Schlüsselidee ist das, was sie "Varianzverschiebung" nennen . Dies ist auf die Tatsache zurückzuführen, dass Dropout zwischen Trainings- und Testphase ein anderes Verhalten aufweist, wodurch sich die von BN gelernten Eingabestatistiken verschieben. Die Hauptidee findet sich in dieser Abbildung, die diesem Papier entnommen ist . Geben Sie hier die Bildbeschreibung ein

Eine kleine Demo zu diesem Effekt finden Sie in diesem Notizbuch .


3
Wie beantwortet dies die Frage?
Nbubis

1
Das Papier bietet zwei mögliche Strategien: - Dropout (nur) nach allen BN-Ebenen anwenden - Dropout in eine
varianzstabilere

@nbubis Ich denke, es beantwortet es indirekt. Es scheint nahezulegen, sie überhaupt nicht zusammen zu verwenden ("erklärt die Disharmonie zwischen Dropout und Batch Norm (BN)").
NelsonGon

3

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


Die Antwort bezieht sich nicht auf den gesamten Stapel, der in der Frage gestellt wird.
Salehinejad

2

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


2

Conv - Activation - DropOut - BatchNorm - Pool -> Test_loss: 0.04261355847120285

Conv - Activation - DropOut - Pool - BatchNorm -> Test_loss: 0.050065308809280396

Conv - Activation - BatchNorm - Pool - DropOut -> Test_loss: 0.04911309853196144

Conv - Activation - BatchNorm - DropOut - Pool -> Test_loss: 0.06809622049331665

Conv - BatchNorm - Aktivierung - DropOut - Pool -> Test_loss: 0.038886815309524536

Conv - BatchNorm - Aktivierung - Pool - DropOut -> Test_loss: 0.04126095026731491

Conv - BatchNorm - DropOut - Aktivierung - Pool -> Testverlust: 0.05142546817660332

Conv - DropOut - Aktivierung - BatchNorm - Pool -> Test_loss: 0.04827788099646568

Conv - DropOut - Aktivierung - Pool - BatchNorm -> Test_loss: 0.04722036048769951

Conv - DropOut - BatchNorm - Aktivierung - Pool -> Testverlust: 0.03238215297460556


Trainiert auf dem MNIST-Datensatz (20 Epochen) mit 2 Faltungsmodulen (siehe unten), gefolgt von jeweils mit

model.add(Flatten())
model.add(layers.Dense(512, activation="elu"))
model.add(layers.Dense(10, activation="softmax"))

Die Faltungsschichten haben eine Kernelgröße von (3,3)Standardauffüllung, die Aktivierung ist elu. Das Pooling ist ein MaxPooling des Pools (2,2). Verlust ist categorical_crossentropyund der Optimierer ist adam.

Die entsprechende Dropout Wahrscheinlichkeit ist 0.2oder 0.3sind. Die Menge an Features Maps 32oder 64ist.

Bearbeiten: Wenn ich das Dropout fallen ließ, wie in einigen Antworten empfohlen, konvergierte es schneller, hatte aber eine schlechtere Generalisierungsfähigkeit als bei Verwendung von BatchNorm und Dropout.


Aufgrund der stochastischen Natur von NNs reicht es nicht aus, nur mit einem Training zu spielen. Wenn Sie ungefähr 100 Schulungen durchführen und durchschnittlich trainieren, sind die Ergebnisse genauer.
GensaGames

0

ConV / FC - BN - Sigmoid / Tanh - Ausfall. Wenn die Aktivierungsfunktion Relu oder eine andere Funktion ist, hängt die Reihenfolge der Normalisierung und des Abbrechens von Ihrer Aufgabe ab


0

Ich habe die empfohlenen Artikel in der Antwort und den Kommentaren von https://stackoverflow.com/a/40295999/8625228 gelesen

Verwenden Sie aus Sicht von Ioffe und Szegedy (2015) nur BN in der Netzwerkstruktur. Li et al. (2018) geben die statistischen und experimentellen Analysen an, dass es eine Varianzverschiebung gibt, wenn die Praktiker Dropout vor BN verwenden. So haben Li et al. (2018) empfehlen, Dropout nach allen BN-Schichten anzuwenden.

Aus Sicht von Ioffe und Szegedy (2015) befindet sich BN innerhalb / vor der Aktivierungsfunktion. Chen et al. (2019) verwenden eine IC-Schicht, die Dropout und BN kombiniert, und Chen et al. (2019) empfiehlt die Verwendung von BN nach ReLU.

Aus Sicherheitsgründen verwende ich Dropout oder BN nur im Netzwerk.

Chen, Guangyong, Pengfei Chen, Yujun Shi, Chang-Yu Hsieh, Benben Liao und Shengyu Zhang. 2019. „Überdenken der Verwendung von Chargennormalisierung und -abbruch beim Training tiefer neuronaler Netze.“ AdRR abs / 1905.05928. http://arxiv.org/abs/1905.05928 .

Ioffe, Sergey und Christian Szegedy. 2015. „Chargennormalisierung: Beschleunigung des tiefen Netzwerktrainings durch Reduzierung der internen Kovariatenverschiebung.“ AdRR abs / 1502.03167. http://arxiv.org/abs/1502.03167 .

Li, Xiang, Shuo Chen, Xiaolin Hu und Jian Yang. 2018. „Die Disharmonie zwischen Ausfall und Chargennormalisierung durch Varianzverschiebung verstehen.“ AdRR abs / 1801.05134. http://arxiv.org/abs/1801.05134 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.