Ich schaue mir an, wie man Dropout in einem tiefen neuronalen Netzwerk implementiert, und fand etwas, das nicht intuitiv ist. In der Vorwärtsphase fallen Dropout-Maskenaktivierungen mit einem zufälligen Tensor von 1s und 0s an, um das Netz zu zwingen, den Durchschnitt der Gewichte zu lernen. Dies hilft dem Netz, besser zu verallgemeinern. Während der Aktualisierungsphase des Gradientenabfalls werden die Aktivierungen jedoch nicht maskiert. Dies scheint mir nicht intuitiv zu sein. Wenn ich Verbindungsaktivierungen mit Dropout maskiere, warum sollte ich dann die Gradientenabstiegsphase nicht maskieren?
9
Antworten:
Bei Aussetzern, wie unter http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf beschrieben , werden Gewichte nicht maskiert. Stattdessen werden die Neuronenaktivierungen maskiert, beispielsweise so, wie es für das Training dargestellt wird (dh die Maske wird für jeden Vorwärts- und Gradientenrücklauf zufällig randomisiert und nie wiederholt).
Die Aktivierungen werden während des Vorwärtsdurchlaufs maskiert, und Gradientenberechnungen verwenden dieselbe Maske während der Rückwärtsausbreitung dieses Beispiels. Dies kann als Modifikator innerhalb einer Ebenenbeschreibung oder als separate Dropout-Ebene implementiert werden.
Während der Gewichtsaktualisierungsphase, die normalerweise auf eine Mini-Charge angewendet wird (bei der für jedes Beispiel eine andere Maske angewendet worden wäre), werden keine Ausfallmasken mehr verwendet. Die für die Aktualisierung verwendeten Gradientenwerte wurden bereits durch Masken beeinflusst, die während der Rückübertragung angewendet wurden.
Ich fand eine nützliche Referenz, um zu lernen, wie Dropout funktioniert, um sich vielleicht selbst zu implementieren, die Deep Learn Toolbox für Matlab / Octave.
quelle