Page 1 of 1

Scripted Elements (komme nicht weiter)

Posted: Sun 19. Jan 2014, 08:45
by MrNo
Hallo,

ich beschäftige mich privat nun schon seit geraumer Zeit mit MemBrain und habe jetzt mit dem Schreiben von Skripten begonnen. Allerdings habe ich bei Verwendung der "Scripted Elements" ein Problem, das ich auch nach stundenlangem Versuchen nicht gelöst bekomme. Vielleicht kann mir jemand weiterhelfen. Zum Nachvollziehen ganz einfach:

Simples Testscript mit dem einzigen Inhalt:

double CalculateNetError(double errorSum, uint summandCount)
{
return 0.2;
}

Dannn dieses in MemBrain unter "Scripting->ScriptedElents..." aktiviert und unter "Teach->Configure Net Error Function..." die Net Error Calculation auf "User Defined (Scripted)" gestellt.

Ich würde nun erwarten, dass beim Trainieren eines Netzes ein konstanter Net Error von 0.2 angezeigt wird. Das ist aber nicht der Fall, bei mir ergibt sich konstant -1.58818683921069e-023. Bei anderen Return-Werten kommen ebenso nicht nachvollziehbare NetError-Werte heraus. Beispielsweise 89128.96875 bei einem "return 0.02;".

Unter Membrain Version V06.00.00.00, auf verschiedenen Rechnern unter Win7 und Win8, 32 und 64bit OS getestet.

Wo ist mein Denkfehler oder ist es ggf. sogar ein Bug?

Vielen Dank

----
btw: grosses Lob an den Autor von MemBrain. Das Programm begeistert einfach nur durch seine Professionalität, den enormen Funktionsumfang und dem klaren Konzept. Wollte ich mal loswerden...

Re: Scripted Elements (komme nicht weiter)

Posted: Sun 19. Jan 2014, 11:31
by TJetter
Hallo,

vielen Dank für den Post, ich kann das Problem bei mir nachvollziehen und es handelt sich leider tatsächlich um einen Bug. Dieser betrifft in ähnlicher Weise auch die andere Scripted Elements Funktion.
Ich vermute, dass das Problem mit einem der letzten Updates der Scripting Engine zum Tragen gekommen ist, der eigentliche Bug befindet sich aber im MemBrain Code.
Es tut mir sehr leid, dass Sie das mehrere Stunden Ihrer Zeit gekostet hat, ich werde schnellstmöglich einen Bugfix dafür einleiten.

Herzlichen Dank für das Lob, ich hoffe, das hat trotz des Bugs noch so Bestand ;-)

Viele Grüße,
Thomas Jetter

Re: Scripted Elements (komme nicht weiter)

Posted: Sun 19. Jan 2014, 12:22
by MrNo
Hallo zurück,

das Lob wird sogar noch größer wegen der schnellen Antwort :D
Danke, warte dann auf das Update. Wie gesagt, momentan bastel ich privat etwas mit neuronalen Netzen. Von daher ist es Hobby und da machen ein paar Stunden probieren nichts.

Re: Scripted Elements (komme nicht weiter)

Posted: Sun 19. Jan 2014, 15:55
by TJetter
Hallo,

das Bug-Fix Release 06.00.01.00 ist soeben online gegangen. Das Problem ist darin behoben.
Außerdem habe ich noch eingeführt, dass zu Beginn des Trainings die 'Scripted Elements' neu compiliert werden, für den Fall dass es Änderungen am Script gegeben hat.

Viele Grüße und viel Erfolg,

Re: Scripted Elements (komme nicht weiter)

Posted: Sun 19. Jan 2014, 16:11
by MrNo
Hallo,

vielen vielen lieben Dank!
So schnell und an einem Sonntag hätte ich keine Reaktion und schon gar nicht einen Fix erwartet. Bin begeistert.
Falls ich MemBrain auf etwas längere Zeit nutzen sollte, werde ich es auf alle Fälle registrieren.
Viele Grüße von der Mosel

MrNo

Re: Scripted Elements (komme nicht weiter)

Posted: Wed 12. Feb 2014, 17:53
by BioT
Hallo,

Ebenso, wie MrNo bin ich auf das oben beschriebene Problem gestoßen und konnte es durch das Bug-Fix Release 06.00.01.00 lösen. Tests haben aber ergeben, dass ein per Scripted Elements selber erstellter Net Error Summand bzw. Net Error zwar korrekt berechnet und angezeigt werden, jedoch keinerlei Einfluss auf das Lernverhalten des Netzes haben. Ich hatte gehofft mein Netz anstatt auf |a-e| -> 0 auf f(a,e) -> 0 optimieren zu können.
  • a: Wert am Ausgabeneuron
    e: erwarteter Wert am Ausgabeneuron
    f(a,e): nichtlineare, nicht homogene, stetige Abbildung
Gibt es für mein Vorhaben evtl. andere Lösungen, wie z.B. Anpassung der Teacher?

Vielen Dank im Voraus,

BioT

Re: Scripted Elements (komme nicht weiter)

Posted: Wed 12. Feb 2014, 19:46
by TJetter
Hallo,

zunächst vorab: Es gibt bereits eine Version 06.00.02.00, die weitere wichtige Bug Fixes und Verbesserungen enthält, ich empfehle sehr, ein weiteres Update durchzuführen.
Das von Ihnen beschriebene Problem wird es aber nicht lösen, da ich vermute, dass hier noch ein generelles Missverständnis der Bedeutung des 'Net Errors' vorliegt:

Die Berechnung des 'Net Error' hat keinen Einfluss darauf, wie der Teacher (also der ausgewählte Lernalgorithmus) die Gewichte des Netzes verändert. Vielmehr hat der Net Error grundsätzlich die folgenden zwei Funktionen:
1.) Beurteilung der Qualität des Netzes
2.) Abbruchkriterium für das Training: Wenn der Net Error die im Teacher Manager für den jeweiligen Teacher eingestellte Schwelle ('Target Net Error') erreicht, wird das Training beendet.

Wie der Lernalgorithmus hingegen die Gewichte anpasst, ist essentieller Teil seiner Definition: Bei Backprop-basierten Algorithmen ist dies die Abweichung zwischen Soll und Istwert der Aktivierung. Aber selbst unter diesen Algorithmen gibt es Unterschiede: Während bei normalem Backprop die Höhe der Abweichung die Größe der Gewichtsänderung mitbestimmt, geht bei RPROP beispielsweise nur das Vorzeichen der Änderung ein: RPROP pflegt für jedes Gewicht separate, dynamische 'Lernraten', die von der Historie der Fehler-Vorzeichen abhängen, realisiert über gewisse Trägheitsparameter, die man in den Eigenschaften des Teachers einstellen kann.
Wenn sich also durch eine andersartige Net Error Berechnung die Gewichtsveränderung während des Lernens verändern würde, dann wäre das de facto eine Änderung des Lernalgorithmus.

Keine Regel ohne Ausnahmen:
Beim Teacher 'Trial and Error' verhält es sich etwas anders: Dieser führt zufällige Gewichtsänderungen (an einer ebenfalls zufälligen Auswahl von Gewichten) durch und beobachtet dann, wie sich der Net Error verändert. Ggf macht der Algorithmus dann einen kompletten Änderungssatz rückgängig (wenn der Net Error größer geworden ist) oder verstärkt ihn in der selben Richtung (wenn er gesunken ist).
Dieser Algorithmus wird also auf eine gewisse Art auf eine abweichende Net Error Berechnung reagieren. Allerdings ist der Algorithmus nicht besonders leistungsfähig (nicht umsonst gibt es RPROP, Backprop und Co) und ist deshalb eher experimentell zu betrachten.

Klärt das die Frage?

Wenn es sich jedoch so verhält, dass bei Ihnen der Abbruch des Teachers sich nicht an Ihrem selbst berechneten Net Error fest macht, dann müsste ich das untersuchen. In diesem Fall posten Sie doch bitte Ihre 'Scripted Elements' sowie ein Netz und eine Lesson zum nachvollziehen, ebenso das Teacher File, dass Sie über den Teacher Manager generieren können. Bei vertraulichen Inhalten natürlich gerne auch als PN.
Gibt es für mein Vorhaben evtl. andere Lösungen, wie z.B. Anpassung der Teacher?
Sie können zum einen die Parameter der Teacher modifizieren. Zum andern können Sie über die Activation Functions der einzelnen Neuronen Einfluss nehmen. Was es momentan nicht gibt, ist eine Möglichkeit, eigene 'Activation Functions' per Scripting zu definieren, das könnte eine Idee für ein zukünftiges Feature sein.

Viele Grüße