Teaching mit CC(RPROP)

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
Post Reply
Leopold
Posts: 7
Joined: Wed 17. Jun 2015, 02:51

Teaching mit CC(RPROP)

Post by Leopold »

Hallo zusammen,
als Teil meiner Abschlussarbeit erstele ich derzeit ein NN von der Größe ~500 Inputs und 1 skalarer Output.
Dieses Netz lerne ich in mehren Durchgängen mithilfe des CC(RPROP)-Algorithmus an. Dies war meine Wahl, da ich keinen Anhaltspunkt für die beste Anzahl der Hidden-Units habe. Bei der gegebenen Größe helfen etwaige in der Literatur existieren Faustregeln (zB nicht größer als der Input-Layer) nicht wirklich weiter.
Leider kann ich damit bisher nicht das erwartete Ergebnis erreichen.

In allen Durchläufen zeigen die Netze das ähnliche Lernverhalten, dass der net-error sinkt und dann nach der eingestellten "Geduldigkeit" im ALgorithmus (5% Abweichung über 300 Läufe) die Kandidaten (Anzahl 10) getesten werden. Hier ist der Verlauf Correlation Sum so, dass sich zuerst ein Berg ergibt und dann immer weiter sinkt, bis die Werte in einer gewissen Bandbreite oszillieren. Soweit, so gut.
Hier ergibt sich das Problem, dass ich im Algorithmus mit einer hohen prozentualen Akzeptanz (Stable Toleranz) arbeiten muss, dass überhaupt Neuronen eingefügt werden, da die oben genannte Oszillation in den Werten prozentual so groß ist. Noch vielen Testläufen konnte ich den Stable Tolerance Wert mittlerweile auf 20% senken. Mir erscheint dieser Wert aber immernoch ein bisschen hoch.
Gibt es da noch irgentwelche Stellschrauben an den man drehen könnte? (Es ist doch aber richtig, dass dieser Wert keinen Einfluss auf die Qualität der eingefügten Kandidaten an sich hat!?)

Ein weiteres Phenomen zeigt sich darin, dass das beste Netz aus dem Stock (niedrigster net-error) in allen Fällen entweder garkein oder nur 1 hidden-unit hatte. Alle weiteren Neuronen die im Laufe des Trainings eingefügt wurden, führten zu einer Verschlechterung.
Da stellt sich mir die Frage, ob
a) das einfach die beste Lösung ist oder aber
b) die beste Lösung in einem so hohen Bereich an Hidden-Units bzw -Layern liegt, dass ich mit dem CC-Algorithmus dort nie hinkomme, weil die Trainingszeit viel zu lange dauern würde (zB wenn die beste Lösung 300 Hidden-Units wären)?

Wie seht ihr das?
Habt ihr da Tipps wie ich am besten Trainiere um den niedrigsten Net-Error zu bekommen?

Mein bestes Netz hat einen net-error von 0.01 (mean sum of squared devition), niedriger komme ich einfach nicht.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Teaching mit CC(RPROP)

Post by TJetter »

Hallo,

Cascade Correlation funktioniert tatsächlich häufig nicht sehr gut, dass musste ich auch immer wieder feststellen.
Bisher konnte ich die Gründe dafür noch nicht feststellen. Die Literatur gibt leider - wie in diesem Bereich üblich - auch nicht viel mehr her. Natürlich ist auch nicht ganz auszuschließen, dass meine Implementierung in MemBrain noch fehlerhaft ist. Meine Vermutung liegt aber eher in der Qualität des prinzipiellen Algorithmus CC als solches.

Wie sehen denn die Ergebnisse aus, wenn man einfach ein mal ein, zwei Hidden-Schichten einfügt und den normalen RPROP darauf ansetzt?
Prinzipiell wird die Frage nach der Anzahl und Mächtigkeit der Schichten überbewertet. 95 % der Vorhersagequalität kommen meiner Erfahrung nach aus den Daten und deren Kodierung.

Bei 500 Eingangsneuronen würde ich einen ersten Versuch mit 10 Hidden-Neuronen in einer Schicht machen. Dann als nächsten Versuch noch eine weitere Schicht mit 5 Neuronen hinzufügen und alles nur Schicht für Schicht verbinden. Ein weitere typischer Versuch wäre, Links von der 10-er Schicht direkt zum Output zu ziegen, die 5-er Schicht also zu überspringen.
Leopold wrote:Gibt es da noch irgentwelche Stellschrauben an den man drehen könnte?

Nein, leider nicht
Leopold wrote:(Es ist doch aber richtig, dass dieser Wert keinen Einfluss auf die Qualität der eingefügten Kandidaten an sich hat!?)
Das ist korrekt, ja.

Es handelt sich um ein zeitinvariantes Netz, nehme ich an?

Viele Grüße
Thomas Jetter
Leopold
Posts: 7
Joined: Wed 17. Jun 2015, 02:51

Re: Teaching mit CC(RPROP)

Post by Leopold »

TJetter wrote: 95 % der Vorhersagequalität kommen meiner Erfahrung nach aus den Daten und deren Kodierung.
Das merke ich auch. Derzeit habe ich noch Netze mit verschiedene Kodierungen, und bin durch Testläufe dabei herauszufinden, welche in meinem Fall am besten ist.
TJetter wrote:Es handelt sich um ein zeitinvariantes Netz, nehme ich an?
Ja
TJetter wrote: Bei 500 Eingangsneuronen würde ich einen ersten Versuch mit 10 Hidden-Neuronen in einer Schicht machen. Dann als nächsten Versuch noch eine weitere Schicht mit 5 Neuronen hinzufügen und alles nur Schicht für Schicht verbinden. Ein weitere typischer Versuch wäre, Links von der 10-er Schicht direkt zum Output zu ziegen, die 5-er Schicht also zu überspringen.
Wenn ich die beste Kodierung determiniert habe, werde ich wohl mal solche Try-and-Error-Versuche machen und das ganze irgendwie systematisch aufziehen. Werd mich dann mal melden ob das den CC-Algo schlägt.

Kann man eigentlich solche Vorhersagen treffen wie "Wenn das Ergebnis (net error) mit 100 Hidden-Neuronen in einem Layer schlechter war als mit 50, wird das mit 200 auch nicht besser."?

Pruning-Verfahren sind nicht Teil des Tools?

Vielen Dank und Viele Grüße
Leopold
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Teaching mit CC(RPROP)

Post by TJetter »

Leopold wrote:Kann man eigentlich solche Vorhersagen treffen wie "Wenn das Ergebnis (net error) mit 100 Hidden-Neuronen in einem Layer schlechter war als mit 50, wird das mit 200 auch nicht besser."?
Ja, das ist jedenfalls meine Erfahrung. Allerdings kann man nicht jedes einzelne Trainingsergebnis mit jedem anderen direkt vergleichen, da die Zufallsinitialisierung auch eine manchmal nicht unerhebliche Rolle spielt. Also immer mehrere Trainingsversuche mit jweils vorhergehendem 'Randomize' durchführen.

Viele Grüße und viel Erfolg,
Thomas Jetter
Leopold
Posts: 7
Joined: Wed 17. Jun 2015, 02:51

Re: Teaching mit CC(RPROP)

Post by Leopold »

bin gerade über folgenden Sachverhalt gestolpert:
Membrain-Help-File sagt zur Aktivierung eines Neurons (S. 59):
Act = Act * ActSustainFactor + ActFunc ( InputSum - ActivationThreshold )

Dies würde doch bedeuten, dass man den ActSustainFactor (="Aktivierung-Beibehaltungsfaktor") auf 0 stellen müsste, wollte man ein zeit-unabhängiges Netz.
Tut man dies aber in Membrain, bekommt man den Hinweis, dass das Netz nun "time-variant" ist und der Trainingsprozess abhängig ist von der Reihenfolge wie die Muster präsentiert werden.

Meiner Meinung wiederspricht sich das.
Wenn ich ein zeit-unabhängiges Netz haben will, muss ich den SustainFactor also auf "1" lassen?
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Teaching mit CC(RPROP)

Post by TJetter »

Leopold wrote:Dies würde doch bedeuten, dass man den ActSustainFactor (="Aktivierung-Beibehaltungsfaktor") auf 0 stellen müsste, wollte man ein zeit-unabhängiges Netz.
Diese Überlegung ist korrekt für Hidden- und Output-Neuronen: Diese bekommen bei jedem 'Think Step' einen neuen Input (da ihr Eingang i.d.R. angeschlossen) und sollen diesen - bei einem zeitunabhängigen Netz - übertragen, ohne die bisherige Aktivierung mit einzubeziehen.
Bei Input-Neuronen verhält es sich genau umgekehrt: Diese haben keinen Eingang, ihr Aktivierungs-Wert wird direkt (z.B. über den Lesson Editor oder per Hand durch den User) gesetzt. Wenn jetzt mehrere Think Steps stattfinden, dann soll das EIngangsneuron seinen Wert beibehalten, deshalb der Act Sustain Factor = 1. Reduziert man ihn bei einem Eingangsneuron und klickt mehrmals auf 'Think Step', dann kann man sehen, wie das Eingangsneuron bei jedem Think Step in seiner Aktivierung abklingt. Es wird also zeitabhängig.
Dazu muss man noch bedenken: Das Setzen einer Aktivierung eines Neurons ist kein Anlegen an dessen Input, (das Input-Neuron zum Beispiel hat ja nicht einmal einen solchen). Vielmehr ist es ein direktes Setzen der Aktivierung des Neurons, der Act Sustain Factor geht hier nicht ein.

Viele Grüße
Thomas Jetter
Leopold
Posts: 7
Joined: Wed 17. Jun 2015, 02:51

Re: Teaching mit CC(RPROP)

Post by Leopold »

Leopold wrote: Wenn ich die beste Kodierung determiniert habe, werde ich wohl mal solche Try-and-Error-Versuche machen und das ganze irgendwie systematisch aufziehen. Werd mich dann mal melden ob das den CC-Algo schlägt.
Mit verschiedenen fixen Topologien konnte ich tatsächlich bessere Ergebnisse als mit CC erreichen.
Post Reply