Hi,
ich benutzt MemBrain momentan sehr gern da es sehr bedienfreundlich ist und die wichtigsten Funktionen die ich benötige enthält. Jedoch würde ich für meine aktuelle Studienarbeit gerne einerseits noch andere Lernverfahren (alles Supervised Learning Algorithmen) testen die jedoch in MemBrain (noch) nicht implementiert sind. Im JavaNNS (der Uni Stuttgart glaub ich) wären zwar einige noch dabei, aber dafür ist die Bedienung der Software bei weitem nicht so angenehm und vorallem müsste ich meine Lerndaten neu anpassen
Dies wäre jedoch nur mein kleineres Anliegen, da ich wohl dennoch mit den Teachern "RPROP" und "Backprop mit Momentum" ausreichend bedient bin.
Mein sehr sehr seeeeehr viel größeres Anliegen wäre die Möglichkeite eine "eigene Art" von Neuronen zu implementieren. (Nein nein, die idee ist nicht auf meinem Mist gewachsen, ich wills nur umsetzen )
Und zwar würde ich gerne Rekurrente Netze verwenden die ein besseres Kurzzeitgedächtnis als Elman-/Jordan-Netze (also "normale" Recurrent Neural Networks) haben. Bei diesen lässt sich im Normalfall ja nur ein "Gedächtnis" von etwa 10 Schritten verwirklichen. Nun bin ich in der Literatur und über eine Doktorarbeit nun auf LSTM-Neuronen gestoßen (LSTM = Long-Short-Term-Memory).
Dürfte dem ein oder andren vllt bekannt sein, mal mein Kurzversuch einer Erklärung (hoffentlich hab ichs richtig verstanden):
LSTM-Neuronen sind i.d.R. wie gewöhnliche rekurrente Neuronen aufgebaut mit einer Verbindung zu sich selbst (also eigener Ausgang zu eigenem Eingang!). Zur klaren Abgrenzung wird das Neuron auch einfach Block genannt. Zusätzlich besitzen sie aber noch die Möglichkeit den "Schreib- und Lesezugriff" auf sich selbst zu kontrollieren. D.h. es werden nicht zwangsläufig alle Daten die am Eingang des Neurons ankommen auch verarbeitet (entspricht Schreibzugriff). Genauso wird nicht immer der Ausgabewert des Neurons an die nachfolgenden Neuronen weitergegeben - auch wenn der Schwellenwert erreicht ist (entspricht Lesezugriff). Diese Zugriffe werden wiederum durch Neuronen gesteuert die am Eingang und Ausgang des Blocks sitzen und "Gates" genannt werden. Die Entscheidung ob die Gates "öffnen" oder "schließen" erfolgt wie bei normalen Neuronen auch durch einnen Schwellenwert der Gates.
Hier mal zwei Bildchen davon:
Quelle
Hoffe das war verständlich genug. Nun nochmal meine Frage: gibts eine Möglichkeit, dass man das selber in MemBrain implementiert (über AngelScript sicher nicht, oder?)?
/* Edit: Kann bei Interesse übrigends auch versuchen ausführliche Lektüre bzgl LSTM zur Verfügung zu stellen. Hab meine Infos aus der Dissertation "Generalisierung bei Neuronalen Netzen geringer Komplexität" von Josef Hochreiter. */
Grüße,
Jonathan
P.S.: Sorry, dass ich zwei Threads gleichzeitig starte, aber so bleibts dann wenigstens übersichtlicher und eindeutig zu welcher Frage die Antworten gehören.
Eigene Lernverfahren/-algos und Neuronen implementieren
Eigene Lernverfahren/-algos und Neuronen implementieren
________________________________________________
"Sooooo, this is engineering, huh? [...] Engineering - where the noble semi-skilled laborers execute the vision of those who think and dream... Hello Oompa Loompas of science!"
"Sooooo, this is engineering, huh? [...] Engineering - where the noble semi-skilled laborers execute the vision of those who think and dream... Hello Oompa Loompas of science!"
Re: Eigene Lernverfahren/-algos und Neuronen implementieren
Hallo,
habe Deinen Thread zur Kenntnis genommen, brauch' aber ein bisschen mehr Zeit zum Antworten. Antwort folgt so bald wie möglich.
Viele Grüße,
habe Deinen Thread zur Kenntnis genommen, brauch' aber ein bisschen mehr Zeit zum Antworten. Antwort folgt so bald wie möglich.
Das ist genau richtig soNNTUM wrote:P.S.: Sorry, dass ich zwei Threads gleichzeitig starte, aber so bleibts dann wenigstens übersichtlicher und eindeutig zu welcher Frage die Antworten gehören.
Viele Grüße,
Thomas Jetter
Re: Eigene Lernverfahren/-algos und Neuronen implementieren
Nein, die Skript-Sprache ermöglicht (bisher) keine Eigenimplementierung von Neuronen-Typen.NNTUM wrote:Hoffe das war verständlich genug. Nun nochmal meine Frage: gibts eine Möglichkeit, dass man das selber in MemBrain implementiert (über AngelScript sicher nicht, oder?)?
Das ist zwar prinzpiell denkbar. Die Skriptsprache wäre mächtig genug dazu, objektorientiert ist auch und schnell sowieso, da die Skripte vor der Ausführung in einen sehr effizienten Bytecode übersetzt werden, es ist also keine Interpretersprache. Allerdings wäre die Integration einer solchen Option in MemBrain alles andere als trivial. Trotzdem stellt das eine höchst interessante Idee dar, über die ich gerne nochmal nachdenken werde. Auf die Schnelle ist hier aber auf jeden Fall nichts zu erwarten, das wäre ein größeres Projekt.
Etwas anderes möchte ich Dir aber noch als Versuch ans Herz legen, falls Du es noch nicht ausprobiert hast: Es gibt in MemBrain auch das Konstrukt der 'Decay-Neuronen', die man auch komfortabel über einen Menüpunkt im 'Extras'-Menü einfügen kann. In der MemBrain Hilfe gibt es dazu auch einen beschreibenden Abschnitt ('Neurons in MemBrain - Adding Decay Neurons').
Diese Decay-Neuronen haben ein parametrisierbares 'Trägkeitsverhalten', das Informationen über langfristige Änderungen abbilden kann.
Schon versucht?
Viele Grüße und weiterhin viel Erfolg!
Thomas Jetter