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_weight
summiert wurden, wird vor dem Kombinieren auch eine Anpassung von hinzugefügt Delta wird am Ende des Stapels abgezogen, wobei lambda
der 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 / N
wenn 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.
quelle
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/N
Inlambda * current_weight / N
ist 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ählenlambda
.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).quelle