Teaching mit CC(RPROP)
Posted: Sat 4. Jul 2015, 00:54
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.
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.