Dropout: Skalieren der Aktivierung im Vergleich zum Invertieren des Dropouts

9

Bei der Anwendung von Dropout in künstlichen neuronalen Netzen muss die Tatsache kompensiert werden, dass zum Zeitpunkt des Trainings ein Teil der Neuronen deaktiviert wurde. Dazu gibt es zwei gemeinsame Strategien:

  • Skalieren der Aktivierung zur Testzeit
  • Umkehren des Aussetzers während der Trainingsphase

Die beiden Strategien sind in den folgenden Folien aus Standford CS231n zusammengefasst: Faltungsneurale Netze für die visuelle Erkennung .

Welche Strategie ist vorzuziehen und warum?


Skalieren der Aktivierung zur Testzeit:

Geben Sie hier die Bildbeschreibung ein

Ausfall des Schulabbrechers während der Trainingsphase:

Geben Sie hier die Bildbeschreibung ein

Franck Dernoncourt
quelle
Warum sollten wir anstelle von skalieren ? Meine Intuition ist, dass je mehr der Schulabbrecher, desto mehr sollten wir kompensieren, oder? Sehen Sie sich das Verhältnis der Abbrecherquote zum Rescale-Faktor an: <br> <br> <br> <br> <br> <br> <br> <br>1p11pdropout>1p>11p0.2>5>1.250.5>2>20.8>1.25>5
Ken Chan
"Je mehr der Ausfall, desto mehr sollten wir kompensieren." Richtig, deshalb verwenden wir 1 / p. Wenn p = 0,1 ist, so dass 90% der Ausgänge fallen, müssen wir diese Werte um 10 skalieren. Beachten Sie, dass 1 / .1 = 10 ist, während 1 / (1-.1) = 1 / (. 9) = 1.1.
Tahlor

Antworten:

5

"Umkehren des Aussetzers während der Trainingsphase" sollte vorzuziehen sein.

Theoretisch ist es besser, wenn das Bernoulli-Dropout als Methode zum Hinzufügen von Rauschen zum Netzwerk betrachtet wird, dass das Rauschen einen Mittelwert von Null hat. Wenn wir die Skalierung zur Trainingszeit durchführen, um den Teil der deaktivierten Einheiten aufzuheben, wäre der Mittelwert des Rauschens Null.

Es gibt andere Arten von Dropout / Noise-Methoden, die später herauskamen (z. B. Gaußscher multiplikativer Dropout, Gaußsches additives Rauschen ), die ebenfalls einen Mittelwert von Null besitzen.

In Bezug auf das Training und Testen neuronaler Netze in der Praxis gibt es einen Grund, eine solche Implementierung ebenfalls zu bevorzugen. Angenommen, ich möchte die Leistung von zwei Modellen mit derselben Architektur vergleichen, eines wird durch Dropout trainiert und eines nicht.

Wenn ich "die Aktivierung zur Testzeit skaliere", benötige ich zur Testzeit zwei verschiedene Netzwerke. Wenn ich die "invertierte Version" verwende, kann ich einfach dasselbe Testnetzwerk (Code) auf beide Sätze trainierter Parameter anwenden.

dontloo
quelle
Lassen Sie mich sicherstellen, dass ich richtig verstehe: Das nicht invertierte Dropout-trainierte Modell hätte tatsächlich eine andere Architektur, da es die Multiplikation mit p auf jeder Ebene implementieren müsste. Der Computer sieht es also als topologisch anders an?
Eric Auld
@EricAuld Hallo Entschuldigung für die späte Antwort, ja, das habe ich im Grunde genommen gemeint, nur mit "das gleiche Testnetzwerk anwenden" meinte ich, dass Sie den Code nicht ändern müssen.
Dontloo
4

Ein weiterer Vorteil des invertierten Dropouts (abgesehen davon, dass der Code zur Testzeit nicht geändert werden muss) besteht darin, dass man während des Trainings Lust bekommen und die Dropout-Rate dynamisch ändern kann. Dies wurde als "geglühter" Ausfall bezeichnet. Im Wesentlichen besteht die Logik darin, dass das Hinzufügen von Dropout- "Rauschen" zu Beginn des Trainings dazu beiträgt, dass die Optimierung nicht in einem lokalen Minimum hängen bleibt, während sie am Ende auf Null abfällt, was zu einem fein abgestimmten Netzwerk mit besserer Leistung führt.

ANNEALED DROPOUT TRAINING VON TIEFEN NETZWERKEN

Modifizierter Dropout für das Training des neuronalen Netzwerks

JPJ
quelle
2

Andrew hat in seinem Deep Learning-Kurs zu dieser Sitzung eine sehr gute Erklärung abgegeben. Dropout Regularization :

  • Invertierte Aussetzer sind häufiger, da sie das Testen erheblich erleichtern
  • Der Zweck der Invertierung besteht darin, sicherzustellen, dass der Z-Wert nicht durch die Reduzierung von W beeinflusst wird.

Sagen Sie a3 = a3 / keep_probim letzten Schritt der Implementierung:

Z [4] = W [4] * a [3] + b [4] , die Elementgröße von a [3] wurde keep_probvon D3 um (ein Prozentsatz der Elemente wurde durch D3 weggelassen) verringert , also der Wert von Z [4] wird ebenfalls reduziert. Um dies grob zu kompensieren, werden wir die Änderung durch Teilen umkehren keep_prob, um sicherzustellen, dass der Wert von Z [4] nicht beeinflusst wird.

Geben Sie hier die Bildbeschreibung ein

xmindata
quelle