Ich verwende das Neuralnetz in R, um ein NN mit 14 Eingängen und einem Ausgang zu erstellen. Ich baue / trainiere das Netzwerk mehrmals mit denselben Eingabetrainingsdaten und derselben Netzwerkarchitektur / -einstellungen.
Nachdem jedes Netzwerk erstellt wurde, verwende ich es in einem eigenständigen Satz von Testdaten, um einige vorhergesagte Werte zu berechnen. Ich stelle fest, dass es bei jeder Iteration der vorhergesagten Daten eine große Varianz gibt, obwohl alle Eingaben (sowohl die Trainingsdaten als auch die Testdaten) bei jedem Aufbau des Netzwerks gleich bleiben.
Ich verstehe, dass es jedes Mal Unterschiede in den innerhalb des NN erzeugten Gewichtungen geben wird und dass keine zwei neuronalen Netze identisch sein werden. Aber was kann ich versuchen, Netze zu erzeugen, die angesichts der identischen Daten für jeden Zug konsistenter sind?
Antworten:
Im Allgemeinen erhalten Sie mehr Stabilität, wenn Sie die Anzahl der versteckten Knoten erhöhen und einen geeigneten Gewichtsabfall (auch bekannt als Ridge Penalty) verwenden.
Insbesondere würde ich empfehlen, das
caret
Paket zu verwenden, um ein besseres Verständnis Ihrer Genauigkeit (und sogar der Unsicherheit in Ihrer Genauigkeit) zu erhalten. Auch bei Caret ist dies dasavNNet
, was einen Ensemble-Lernenden aus mehreren neuronalen Netzen macht, um die Wirkung der anfänglichen Samen zu verringern. Ich persönlich habe keine große Verbesserung bei der Verwendung gesehen,avNNet
aber es könnte Ihre ursprüngliche Frage beantworten.Ich würde auch sicherstellen, dass Ihre Eingänge alle richtig konditioniert sind. Haben Sie sie orthogonalisiert und dann neu skaliert? Caret kann diese Vorverarbeitung auch über seine
pcaNNet
Funktion für Sie durchführen .Zuletzt können Sie in Betracht ziehen, einige Verbindungen überspringen. Sie müssen jedoch sicherstellen, dass Ihre Daten keine Ausreißer / Hebelpunkte enthalten, um diese Verbindungen zu verzerren.
quelle
nnet
Anfangszeit werden alle Gewichte auf eine einheitliche Zufallszahl zwischen -0,7 und 0,7 initialisiert, wenn ich mich richtig erinnere. Und Sie können die Größe in einem Parameter steuern. Ich hatte ehrlich gesagt solides Glück mit demnnet
Paket und habe noch nie eine der anderen Optionen ausprobiert. Viel Glück!Ich habe nicht mit R gearbeitet, daher kann ich nur allgemeinere Tipps geben.
Haben Sie überprüft, ob der Algorithmus konvergiert? Eine mögliche Erklärung könnte sein, dass die verschiedenen Parametersätze alle irgendwo auf halbem Weg zum gleichen Optimum liegen.
Wenn der Algorithmus immer konvergiert, aber zu einem anderen lokalen Optimum, gibt es viele Heuristiken, die Sie versuchen könnten, diese zu vermeiden. Eine einfache Strategie bei Verwendung des stochastischen Gradientenabfalls (SGD) wäre die Verwendung kleinerer Chargen und eines größeren Impulses . Die kleineren Chargengrößen bringen effektiv etwas Lärm in das Training, was dazu beitragen kann, einigen lokalen Optima zu entkommen. Eine viel ausgefeiltere Strategie wäre, die Gewichte mit Autoencodern zu initialisieren .
quelle
nnet
von Basis R, verwendet es die BFGS Optimierungsverfahren aus Roptim
. Es berechnet tatsächlich die Farbverläufe, um ein Bild der Oberfläche zu erhalten. Es gibt keine Stapelverarbeitung und keinen festen Impulsparameter in der Implementierung. Trotzdem kann es leicht zu einer Konvergenz kommen. vor allem mit Müll in.