Scripted Elements (komme nicht weiter)

Dieses Forum beschäftigt sich mit allen Fragen, Kommentaren und Anregungen zu MemBrain Skripten. Auch der Austausch von Skripten zwischen MemBrain Benutzern soll hiermit gefördert werden.
Wenn Sie ein interessantes Skript haben, das Sie anderen MemBrain Benutzern zur Verfügung stellen wollen, dann Erstellen Sie dafür jeweils bitte ein neues Thema in diesem Forum. Der Titel des Themas sollte es anderen Benutzern erlauben möglichst schnell zu erfassen, wozu Ihr Skript dient.
Post Reply
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Scripted Elements (komme nicht weiter)

Post 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...
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Scripted Elements (komme nicht weiter)

Post 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
Thomas Jetter
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Re: Scripted Elements (komme nicht weiter)

Post 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.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Scripted Elements (komme nicht weiter)

Post 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,
Thomas Jetter
MrNo
Posts: 28
Joined: Sun 19. Jan 2014, 08:36

Re: Scripted Elements (komme nicht weiter)

Post 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
BioT
Posts: 1
Joined: Wed 12. Feb 2014, 17:34

Re: Scripted Elements (komme nicht weiter)

Post 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
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Scripted Elements (komme nicht weiter)

Post 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
Thomas Jetter
Post Reply