Gibt es Unterschiede in der Regularisierung von MLP zwischen Batch- und Einzelaktualisierungen?

9

Ich habe gerade etwas über Regularisierung als Ansatz zur Kontrolle der Überanpassung gelernt und möchte die Idee in eine einfache Implementierung von Backpropagation und Multilayer Perceptron (MLP) integrieren, die ich zusammengestellt habe.

Um eine Überanpassung zu vermeiden, überprüfe ich derzeit das Netzwerk und behalte das bisher beste Ergebnis im Validierungssatz. Dies funktioniert in Ordnung, aber das Hinzufügen von Regularisierung würde mir zugute kommen, da die richtige Auswahl des Regularisierungsalgorithmus und -parameters dazu führen würde, dass mein Netzwerk systematischer auf ein Nicht-Überanpassungsmodell konvergiert.

Die Formel, die ich für den Aktualisierungszeitraum (aus dem Coursera ML-Kurs) habe, wird als Batch-Aktualisierung angegeben, z. B. für jedes Gewicht. Nachdem alle anwendbaren Deltas für den gesamten Trainingssatz aus der Fehlerausbreitung lambda * current_weightsummiert wurden, wird vor dem Kombinieren auch eine Anpassung von hinzugefügt Delta wird am Ende des Stapels abgezogen, wobei lambdader Regularisierungsparameter ist.

Meine Implementierung von Backpropagation verwendet Gewichtsaktualisierungen pro Artikel. Ich mache mir Sorgen, dass ich den Batch-Ansatz nicht einfach kopieren kann, obwohl er für mich intuitiv in Ordnung aussieht. Funktioniert ein kleinerer Regularisierungsbegriff pro Element genauso gut?

Zum Beispiel, lambda * current_weight / Nwenn N die Größe des Trainingssatzes ist - auf den ersten Blick sieht dies vernünftig aus. Ich konnte jedoch nichts zu diesem Thema finden, und ich frage mich, ob dies daran liegt, dass die Regularisierung bei einem Update pro Element nicht so gut funktioniert oder sogar unter einem anderen Namen oder einer anderen geänderten Formel erfolgt.

Neil Slater
quelle

Antworten:

2

Regularisierung ist auch beim Lernen pro Artikel relevant. Ich würde vorschlagen, mit einem grundlegenden Validierungsansatz zu beginnen, um herauszufinden, ob Sie Lambda lernen oder nicht. Dies ist der einfachste und sicherste Ansatz. Versuchen Sie es manuell mit verschiedenen Werten. zB 0,001. 0,003, 0,01, 0,03, 0,1 usw. und sehen Sie, wie sich Ihr Validierungssatz verhält. Später können Sie diesen Prozess automatisieren, indem Sie eine lineare oder lokale Suchmethode einführen.

Als Randnotiz glaube ich, dass der Wert von Lambda in Bezug auf die Aktualisierungen des Parametervektors und nicht in Bezug auf die Größe des Trainingssatzes berücksichtigt werden sollte. Für das Batch-Training haben Sie eine Parameteraktualisierung pro Datensatzdurchlauf , während Sie online eine Aktualisierung pro Probe durchführen (unabhängig von der Größe des Trainingssatzes).

Ich bin kürzlich auf diese Kreuzvalidierte Frage gestoßen , die Ihrer ziemlich ähnlich zu sein scheint. Es gibt einen Link zu einem Artikel über einen neuen SGD-Algorithmus mit einigen relevanten Inhalten. Es kann nützlich sein, einen Blick darauf zu werfen (insbesondere die Seiten 1742-1743).

insys
quelle
Ja, ich beabsichtige immer noch, eine Kreuzvalidierung durchzuführen, um zu überprüfen, ob eine Überanpassung vorliegt. Meine Frage ist grundlegender. Ich kann keine Hinweise auf die Verwendung der Regularisierung mit einer Gewichtsanpassung pro Artikel in MLP finden und bin besorgt, dass es eine gute gibt Grund dafür - zB funktioniert es in diesem Lernmodus nicht oder muss angepasst werden. Die kreuzvalidierte Frage ist jedoch sehr ähnlich und gibt mir mehr Vertrauen, danke. Die SGD-Algorithmus-Seite scheint eine andere, stochastische Methode zur Einführung der Regularisierung zu haben, die für mich vielleicht etwas fortgeschritten ist, aber genau das ist, wonach ich suche.
Neil Slater
Regularisierung ist auch beim Lernen pro Artikel relevant. Ich würde immer noch vorschlagen, mit einem grundlegenden Validierungsansatz zu beginnen, um Lambda herauszufinden. Dies ist der einfachste und sicherste Ansatz. Versuchen Sie es manuell mit verschiedenen Werten. zB 0,001. 0,003, 0,01, 0,03, 0,1 usw. und sehen Sie, wie sich Ihr Validierungssatz verhält. Später können Sie diesen Prozess automatisieren, indem Sie eine lineare oder lokale Suchmethode einführen.
Insys
Wenn Ihr Kommentar oben in bearbeitet und den ersten Satz / die erste Frage in Ihrer Antwort ersetzt wurde, könnte ich das akzeptieren.
Neil Slater
Vielen Dank für den Hinweis, ich stimme zu. Habe es in bearbeitet. Hoffe es ist klarer.
Insys
2

Um das zu ergänzen, was insys gesagt hat:

Die Regularisierung wird verwendet, wenn die Backpropagation für alle Gewichte in Ihrem MLP berechnet wird. Anstatt den Gradienten in Bezug auf alle Eingaben des Trainingssatzes ( batch) zu berechnen, verwenden Sie daher nur einige / ein Element (e) ( stochastic or semi-stochastic). Sie werden am Ende ein Ergebnis der Aktualisierung auf ein Element beschränken, anstatt auf alles, was ebenfalls korrekt ist.

Auch wenn ich mich richtig erinnere, hat Andrew NG verwendet L2-regularization. Das /NIn lambda * current_weight / Nist nicht obligatorisch, es hilft nur, die Eingabe neu zu skalieren. Wenn Sie es jedoch nicht verwenden, müssen Sie (in den meisten Fällen) einen anderen Wert für auswählen lambda.

Sie können auch den Grid-Search-Algorithmus verwenden , um den besten Wert für auszuwählen lambda(den Hyperparameter => den, den Sie auswählen müssen).

Orelus
quelle