Training neuronaler Netze mit Package “neuralnet”

Entscheidungsbäume, Random Forest, Support Vektor Maschinen, Neuronale Netze, ...

Moderator: consuli

Antworten
christoph67

Training neuronaler Netze mit Package “neuralnet”

Beitrag von christoph67 »

Ich wage mich erstmals an das Training größerer neuronaler Netze mit dem Package “neuralnet” heran.

Einen Musterdatensatz kann ich hier leider nicht einstellen.
Es sei soviel gesagt, das es sich um ca. 150 Eingangsparameter handelt, welche die Eigenschaften von elektronischen Bauelementen in elektronischen Systemen beschreiben.
Die Ausgangsgroesse ist die Ausbeute eines Produktionsprozesses, an dessen Ende diese 150 Eingangsparameter erfasst werden.

Sowohl Ausgangs/Eingangsgroessen wuerden vor Einsatz von neuralnet normiert.

Im folgenden zu sehen in der ersten Zeile des Codes.

Code: Alles auswählen


#Bilde Formel mit Ausgang/Eingaengen fuer das Neuralnet Kommando
#Yield ist die Ausgangsgroesse.
#cnp1 eine Liste der Eingangsparameter 
a <- as.formula(paste("yield1 ~ ",paste(cnp1,collapse = "+")))

#An den Parametern des Neuralnet KOmmandos ist (noch) nicht viel besonderes
#Die Resultate mit meinem Musterdatensatz (800 Zeilen) sind dennoch sehr gut.
f1 <- neuralnet(a,data=all1,hidden=c(100),rep=10)

Das Objekt vom Typ nn, welches das trainierte Netz beinhaltet, heisst also f1.

Die Anwendung von “compute” auf den Musterdatensatz (das trainierte Netz f1 benuetzend) bringt Resultate, die Derart gut sind, das es schon fast unheimlich ist.

Code: Alles auswählen

#Durchfuehrung compute mit allen Spalten des Musterdatensatzes ausser der ersten (Ausgangsgroesse)
netres <- compute(f1,all1[,2:n_cn1])
Soweit war alles sehr angenehm und klamme meinem Ziel recht nahe :
Der Praediktion Zukünftiger Ausbeuten mit Hilfe der genannten Eingangsparameter.

Aber :
Trainiere ich das Netz mit nur 600 von 800 Zeilen und wende dann f1 auf die nicht zum trainieren verwendeten Zeilen an, ist die Abweichung von den Ausgangswerten im Musterdatensatz (also den sollwerten) und dem, was mit Hilfe des so trainierten Netzes generiert wird, beträchtlich sind.

Da ein tatsaechlicher Zusammenhang zwischen den Eingangs - und Ausgangsgroesse besteht und immerhin 75% des Urspruenglichen Datensatzers zum Training verwendet wurden, haette ich bessere Resultate erwartet (bzw erhofft).

Besagtes Verhalten sehe ich auch mit einer größeren Anzahl von Hidden Layern (bisher habe ich 1-3 Hiddensee layer probiert).

Ich frage mich nun, was die Ursache dieses Verhaltens ist.

Möglichkeiten, welche ich aktuell sehe :
  • Etliche der Eingangsgroessen stehen nicht wirklich in Zusammenhang mit der Ausgangsgroesse und behindern auf eine mir nicht bekannte Art die Korrekte Funktion des Netzes
    Das Training bringt zwar vordergründig gute Ergebnisse, ist aber nicht wirklich gute Ergebnisse. Moegliche Einflussparameter koennten die Lernrate, die Startgewichte der Netze oder der verwendete Lernalgorithmus sein.
Meine Frage an euch ginge in diese Richtungen :
  • Gibt es Algorithmen (vorzugsweise in R packages vorhanden), um die Startgewichte bei unbefriedigenden Ergebnissen so anzupassen, das sich die Ergebnisse (Abweichung vom Sollwert) verbessern ?
    Kann das unbefriedigende Verhalten an einem nicht ausreichend guten Lernalgorithmus liegen. Welchen wuerdet ihr favoritisieren.
    Ich habe im Rahmen meiner Recherche vom Netz von Verfahrensweisen gelesen, bei welchen die Eingangsdaten “Vorbehandelt werden (keine Normierung, sondern anderes). Koennte darin die Loesung liegen ?
Nachtrag :
Das beobachte Problem entspricht wohl einer “Ueberanpassung” den Netzwe

Als zusätzliche Optionen böten sich daher vermutlich eine variation der Anzahl der Epochen wie auch eine Variation der Anzahl der Neuronen pro Hidden Layer an.

Das werde ich wohl ausprobieren... wäre aber natürlich dennoch dankbar für Inputs von anderer Seite.
Zb was die Minimierung des Aufwandes zur Bestimmung eines Optimums betrifft.

Gruss,
Christoph
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Training neuronaler Netze mit Package “neuralnet”

Beitrag von EDi »

600 beobachtungen sind nicht viel...
Schau dir mal das caret paket an, Netze sind meiner Erfahrung nach sehr Datenhungrig, andere Modelle vielleicht besser geeignet.

Im Zusammenhang mit Netzen und zu schnellem lernen, ist mir der Begriff "dropout" auch schon über den weg gelaufen, keine Ahnung ob das neuralnet paket das kann...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
christoph67

Re: Training neuronaler Netze mit Package “neuralnet”

Beitrag von christoph67 »

Danke für die Antwort !

Ich recherchiere ein wenig an diesem Wochnende in der von Dir empfohlenen Richtung.

Ich habe mittlerweile meine Applikation in der Richtung erweitert, das sie mit einem reduzierten Datensatz (ca. 140 Zeilen mit je 150 Parametern) bei verschiedenen Werten Fuer die Anzahl der Epochen und der Anzahl der Neuronen pro Layer.

Auch eine Variation der Anzahl der hidden Layer habe ich probiert.

Alle 3 Parameter haben einen Einfluss auf den Fehler des berechneten Netzes.
Und es ist mit recht geringem Rechenaufwand moeglich, ein Optimum zu bestimmen.

Auf meinem Yogabook mit Atom x5 Prozessor langen knapp 10 Minuten Rechenzeit.
Bei einer Vorhersagegenauigkeit von ca. 3.5% - was erst mal ausreichend ist.

Das Zielsystem ist massiv leistungsfähiger.
Die Datenmenge allerdings auch erheblich größer.

Ich bin recht froh, den ersten Teil dieser Lernkurve durchschritten zu haben.
Antworten