PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neuronale Netze Editor und SImulator



Friggle
21.03.2005, 18:18
Hallo zusammen,

für alle, die sich gerne mit NNs befassen: Unter

http://www.uni-bonn.de/~uzsjv6/membrain/membrain.zip

gibt's von mir einen Editor und Simulator für neuronale Netze inkl. Setup und HTML Hilfe. Wäre für Feedback dazu sehr dankbar!

Grüße,
Friggle

Felix G
21.03.2005, 19:25
Ein wirklich beeindruckendes Stück Software!

Die Bedienung ist zwar anfangs etwas gewöhnungsbedürftig, aber dank der Hilfe findet man sich ja schnell zurecht.


Ich finde es sehr praktisch, daß man die Trainingsdaten ex- bzw. importieren kann,
aber wie sieht es denn mit einer Exportmöglichkeit für das Netz aus?

Das wäre sicher interessant, z.B. wenn man Neuronale Netze bei einem Roboter einsetzen möchte.
Man könnte das Netz am Rechner designen und trainieren, und müsste dann nurnoch die Daten in den Controller laden.

21.03.2005, 21:58
Hei, das ging ja mal schnell, dass einer damit rungespielt hat, vielen Dank für das Feedback!

Du hast recht, der Ex- und Import ist einer der Punkte, die bereits auf der Liste für weitere Versionen stehen.
Bin aber zunächst noch am rumdenken bzgl. eines erweiterten Neuronen-/Linkmodells. Würde gerne Laufzeiten auf den Links und Erholungsraten beim Feuern der Neuronen etc. einführen, um dem ganzen etwas mehr Leben und Flexibilität einzuhauchen. Das hat natürlich wieder Folgen für ein Export/Import Format...
Für die ferne Zukunft denke ich aber auch daran, die Schnittstellen des PC mit entspr. Hardware einbinden zu können, z.B. ein I/O Modul über USB oder so. Damit könnte man das Netz nicht nur abstrakt simulieren, sondern tatsächlich mit der Welt verbinden. Ist aber natürlich noch Zukunftsmusik, da viel Arbeit... Ich komme halt nur so hobbymäßig dazu, es bleibt nicht so viel Zeit, wie ich gerne hätte...

Grüße,
Friggle

Friggle
21.03.2005, 21:59
Tja, da hätt ich mich wohl vor dem Tippen einloggen sollen... ;-)

Friggle

Tasm-Devil
02.04.2005, 16:59
was macht man mit dem prog

hast du evtl n paar beispiele
im installationsordner find ich nix

Friggle
03.04.2005, 18:24
was macht man mit dem prog

Tja, das mit der Anwendbarkeit ist bei Neuronalen Netzen immer so ne Sache, im Moment kann man mit der Software eigentlich lediglich ein ganz gutes Gefühl dafür bekommen, wie Neuronale Netze arbeiten, was man damit so machen oder nicht machen kann und vor allem, welche Netzarchitekturen Sinn machen und welche weniger.
Ein bißchen akademisch also.
Geplant ist aber für die Zukunft, auch Hardware mit einbeziehen zu können, so dass man damit vielleicht sogar mal wirklich etwas über den PC ansteuern könnte.

hast du evtl n paar beispiele
im installationsordner find ich nix

Bin die meiste Zeit dabei, die Software weiterzuentwickeln, so dass ich kaum Beispiele habe, die der Veröffentlichung wert wären. Hoffe da eher auf externe "User".

:-b

Habe aber mal ein Netz angehängt, das Ziffern in einem Eingabefeld mit 1600 Neuronen ("= Pixeln") erkennen soll. Mit dabei ist auch eine Lesson (Trainingsdaten) mit über 1100 Ziffer-Mustern, die das Netz bereits alle beherrscht (es ist schon trainiert). Es mangelt dem Netz allerdings noch an Generalisierungsfähigkeit, das heißt neue, unbekannte Muster erkennt es noch zu schlecht. Vielleicht hat ja jemand Lust, an der Netzarchitektur zu schrauben, damit sich das verbessert...

In der nächsten Version wird es dann ein erweitertes Neuronen- und Linkmodell geben, die Links erhalten zum Beispiel einstellbare Längen, so dass sich im Netz Laufzeiten ergeben, wie das auch in biologischen Gehirnen der Fall ist. Dann kann man auch Signale zwischen den Neuronen hin- und herflitzen sehn usw.

Grüße,
Friggle

NumberFive
03.04.2005, 18:29
Ich gebe zu das mit dem teil noch nicht gespielt habe aber vielleicht hätte
ich da ein Idee die un beiden hilfe man könnte es doch in meine software ein binden so konnte man das hirn auch mit der hardware füttern.

Ob csv oder die daten per TCP kommen währe doch fast egal.

Sie dir mal die links in meine fuss leiste an.

Gruß

Friggle
07.04.2005, 14:53
Klingt nicht schlecht. Könnte mir die Anbindung an Euren "Standard" über
einen Treiber vorstellen, der dann über TCP Daten mit anderen Prozessen
austauschen würde.
Muss allerdings gestehen, dass ich im Moment nicht dazu kommen werde, da
noch ganz andere Dinge auf der Todo Liste stehen: Bin dabei, das Neuronen-
und Link Modell wesentlich zu erweitern, um so mehr Zeitabhängigkeit und
"Biologie" reinzubringen...

Aber für die Zukunft durchaus denkbar.

Friggle
07.04.2005, 15:00
... da war ich ja schon ein bißchen geschockt, als ich mir die erste
Bewertung von MemBrain im Download-Bereich angesehen habe...
Ich gebe ja zu, dass der konkrete Nutzen im Moment noch etwas
im Nebel liegt, aber eine 1 von 10 finde ich dann doch hart!

Hallo BewerterIn: Kannst Du mir ein bisschen Feedback geben, was Du so mies an der Software findest? Notfalls auch als PN, Hauptsache ich weiss was Sache ist...

Danke schon mal!

Gruß,
Friggle

NumberFive
07.04.2005, 18:16
also wenn du willst bzw. das machst fände ich klasse
dann hätte ich ein neuronales netzt im robi irdenwie eine genial
vorstellung. hAbe das mit auch schon experimetiert aber
der rest ist mir im moment wichtiger das er stabil und schnell
wird. Aussdem habe ich bei drein neronen aufgeben.

Gruß

Friggle
16.05.2005, 21:40
Im Download Bereich liegt seit heute eine neue Version von MemBrain, die ein erweitertes Neuronen- und Linkmodell unterstützt. Die Links haben jetzt auch funktionale Längen, man kann sehen, wie Aktivitätsmuster zwischen den Neuronen hin- und herflitzen und das ganze kann nun wesentlich mehr zeitabhängig gestaltet werden.

Also wer Lust hat: Einfach ausprobieren.

Grüße,
Friggle

Freiheitspirat
17.05.2005, 09:34
Hey Friggle, super interessant !
Ich würde das Programm gerne mal für ein paar Aufgaben auf meinem Roboter nutzen, aber da brauche ich dringend ein Interface von den IO-Neuronen zu meinen Hardwaretreibern.
Braucht gar nicht so aufwendig sein, nur z.B. irgendwie defininieren welche Message bei einem Outputneuron "gefeuert" wird, bzw. wie ein Event ein Input-Neuron setzt...

Friggle
17.05.2005, 11:22
Ja, das mit der Anbindung an die "echte Welt" steht jetzt so langsam als nächstes an. Muss allerdings wie immer schauen, wann ich Zeit dazu finde...
Eigentlich schwebt mir dazu ein universelles Treiberkonzept vor, das ist im Moment allerdings noch alles andere als ausgegoren, da muss ich erst noch ein bißchen über der Softwarearchitektur grübeln...

Hast Du schon eine bestimmte Vorstellung davon, welche Aufgaben ein NN in Deinem Roboter übernehmen könnte? Denkst Du an ein "Hybrid"-Konzept aus NN und klassischer KI oder an ein vollständig NN gesteuertes Vehikel?

Grüße,
Friggle

Freiheitspirat
17.05.2005, 12:26
Mehr an ein Hybrid-Konzept.
Ich habe ein paar kleine Treiber gebaut, die einzelne "intelligente" Aufgaben haben.
Bsp.: ein Ultraschall-Entfernungs-Modul; Liefert in einem Output-Register permanent die aktuelle Entfernung, hat ein Input-Register für einen Schwellenwert und feuert "automatisch" eine Message bei Schwellenwertunterschreitung.
Wenn jetzt so ein "Event" auftaucht, soll das NN diese Situation "verarbeiten", also z.B. mit Entfernungen anderer Entfernungs-Module abgleichen und daraus Richtung bestimmen.
Später dann vieleicht Abgleich mit einem Umgebungskartenmodul (XY-Array) für die Objekterkennung...
Ein Beispiel für eine Ausgabe könnte einfach eine Message an einen Motortreiber sein: "Output-Neuron Linksdrehung" sendet einfach einen vordefinierten Message-String an einen entsrechenden Port, hinter dem ein Modul die Anweisung in die Steuerung der Schrittmotoren umwandelt.

Letztlich brauch man pro Schnittstellenneuron neben dem eigentlichen Wert, eine Datenaustauschart, einen Empfänger (Port) und ein "freidefinierbares" Messageprotokoll.

Also z.B.
Art = "TCP"
Port = 4711
Message = "Befehlzumlinksdrehen"

Wenn Art = "TCP"
ConnectWinsock(Port)
Send Message
...

Friggle
20.05.2005, 19:37
Hallo Freiheitspirat,

ja, ich denke auch die Anbindung über einen Socket wäre die zunächst wichtigste, dann könnte man auch problemlos über WLAN auf andere Rechner zugreifen (z.B. Laptop auf dem Roboter, gesteuert über PC sonst wo) etc.
Muss mich allerdings erst noch in die Socket-Programmierung einarbeiten, MSDN bietet hier zwar einiges an Doku über die konkrete Verwendung der entsprechenden MFC-Klassen, aber es fehlt mir so ein bisschen an Netzwerk-Hintergrundwissen. Hast Du vielleicht einen guten Link oder Büchertipp hierzu?

Finde natürlich auch selber was, nur mit guten Tipps ist es immer deutlich effizienter...

Grüße,
Friggle

Freiheitspirat
23.05.2005, 10:03
Fürs rein Technische vieleicht erstmal so was:
http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/kap20.htm
Oder ist das zu Oberflächlich ?

Wenn es an ein irgend geartetes Protokoll geht, sollten wir dazu hier nochmals ein paar Ideen austauschen...

Friggle
23.05.2005, 22:49
Ist gar nicht so übel für einen Einstieg, jedenfalls wenn man bzgl. Netzwerktechnologie so unbeleckt ist, wie ich. Das Wesentliche ist drin und ich denke auch genug, um für meine Anwendung weiterzudenken, vielen Dank auch, Freiheitspirat!

Bzgl. eines App. Layer Protokolls muss ich sowieso noch ein bißchen grübeln... Neben der Anbindung von Sensorik und Motorik sollte es auf jeden Fall auch erlauben, mehrere Instanzen von MemBrain zu größeren Netzen auf verschiedenen Rechnern verteilt zusammenzulinken. Somit sollte es wohl wirklich möglich sein, für jedes I/O Neuron einen eigenen Port festzulegen. Auf der anderen Seite möchte ich auch die Möglichkeit bieten, mehrere I/Os über den selben Port laufen zu lassen, wenn sie sowieso an den selben Addressaten gehen (oder von diesem kommen), da dies bestimmt wesentlich performanter ist.
Auch die Frage bzgl. Server oder Client läßt sich wohl nicht so auf die Schnelle und einheitlich klären, das sollte man vielleicht sogar für Gruppen von Neuronen unterschiedlich festlegen können, inkl. Servernamen im Falle eines Clients natürlich.
Hinzu kommt, dass ich den Benutzern von MemBrain möglichst viel Freiheit beim Gestalten des Protokolls geben möchte, vielleicht sogar die Möglichkeit, für verschiedene I/O Neuronen unterschiedliche Protokolle zu definieren, da sie vielleicht mit verschiedenen Anwendungen kommunizieren müssen.

Werde mir wohl erst einmal alle Anforderungen an ein Protokoll- und ein Verbindungsmanagement aufschreiben müssen, damit das von vorn herein ein sauberes Konzept ergibt.

Auf jeden Fall möchte ich das Protokoll schlank halten bzw. zumindest ermöglichen, auch ein schlankes zu definieren, wenn man das möchte. Deshalb muß es die Möglichkeit bieten, Floating Point Zahlen und Neuron-IDs effizient zu übertragen. Damit sollte es nicht auf Text-Repräsentation beschränkt sein, sondern auch binär arbeiten. Außerdem sollte man kompakte Start/Stop Sequenzen definieren können, nach denen sich sicher synchronisieren lässt (z.B. DLE/STX, DLE ETX mit DLE Verdopplung o.ä.). Auch eine Fixed-Point Formatierung sollte man in Betracht ziehen, schließlich braucht man keinen riesigen Wertebereich...
Vielleicht möchte man in manchen Fällen sogar nur binär ("= feuern") übertragen, was man mit noch weniger Daten übertragen könnte.

Ich freue mich jedenfalls weiterhin über jeden Input, schließlich will ich so viele unterschiedlich Anforderungen wie möglich unter einen Hut bringen, damit das Programm auch in der Praxis einsetzbar wird!

Grüße,
Friggle

Freiheitspirat
24.05.2005, 16:07
Hier noch ein paar Ideen:

- Mehrere Instanzen von MemBrain sowohl auf einem Rechner, als auch auf mehreren Rechnern verteilt.

- Relationale Verknüpfungen der Instanzen bzw. der entsprechenden Steuerprogramme

- Dynamische DLL - Schnittstelle
- Output-Schnittstelle zum Starten eine .EXE mit Parametern

Betr.:Client / Server
Bei Zentralistischen Systemen werden die Verbindungen von einem Server auf mehrere Clients organisiert.
So z.B. auch bei ssmirs von Johannes/mindrobots wo alle Module sich als Clients an ein "Obermodul" anmelden und dieses die einzelnen Messages deligiert.
Ich würde mehr ein relationales System bevorzugen, bei dem eine freie Wahl zwischen Client/Server-Status gewählt werden kann.
Bevorzugt sollte dabei ein Modul, welches Output-Informationen liefert als Server angesehen werden und eines, welches Input-Information benötigt, als Client - Information ist eine Holschuld !

Protokolle:
Das einfachste Protokoll ist sicherlich ein "Beep" / "feuern"
Dann ein Übermitteln von Einzelwerten (in welcher Darstellung auch immer)
Dann die Übermittlung einer Kombination aus Konstanten/Text und Werten
Dann die zusätzliche Integration von Steuerbefehlen (z.B.:Start/Stop)
Bis hin zu einem Schichtenmodell (siehe z.B.: ISO/OSI)

Friggle
24.05.2005, 19:09
Also soviel ist mir schon klar: Was ich auf keinen Fall will, ist irgend eine Art "Zentralserver" o.ä. Alle Teilnehmer müssen gleichberechtigt sein, völlig egal, wo Sie laufen und wie Sie konfiguriert sind. Möglichst sollten sie auch gar nichts voneinander wissen, ein völlig verteiltes System von gleichberechtigten Makro-Einheiten, egal ob es sich um MemBrain Instanzen, I/O Treiber oder sonstwas handelt.
Das ist mir auch aus Gründen der Fehlertoleranz des Gesamtsystems sehr wichtig. Wenn irgendwelche Teilnehmer nicht erreichbar sind, oder permanent Übertragungsfehler haben, so sollte das die anderen nicht stören.

Ich gehe mit Dir D'Accord, daß zumindest bzgl. der Verbindungsanfrage die Inputs die Clients und die Outputs Server sind. Wahrscheinlich ist es ausreichend, einen Listening-Server für alle Outputs eines Netzes zu haben, d.h. einen Server Port (und ggf. eine IP-Adresse im Falle mehrerer Netzwerkkarten) für jede MemBrain Instanz, soweit ich das bis jetzt überblicke.
Ob die Clients die Output-Daten des Servers dann zyklisch abfragen müssen, oder automatisch permanent gesendet bekommen, weiß ich noch nicht. Abfragen hat natürlich den Vorteil, dass man einen Client nicht mit Daten zuballert, die er u.U. so schnell gar nicht verarbeiten kann...

Bei den Input Neuronen müsste ich dann wohl soweit gehen, dass man für jedes die IP-Adresse und den Port angeben kann auf die es verbinden soll sowie natürlich eine ID oder einen Namen des Output Neurons von dem es input erhalten soll. Am besten sollte ein input Neuron sich sogar mit mehreren Servern und/oder Neuronen verbinden können, im lokalen NN kann es schließlich auch Signale von vielen anderen Neuronen erhalten.
MemBrain (und jeder andere Teilnehmer) muss dann eben so schlau sein und erkennen, welche Inputs auf den selben Server gehen und die Datenübertragung für diese über einen einzigen Socket abwickeln (aus Performanzgründen), das sollte ja aber kein größeres Problem sein.

Ich denke, es wäre für's erste doch eine Option, das Protokoll festzuschreiben. Erweiterungen über zwischengeschaltete Konverter sind dann schließlich immer noch möglich.

Was möchtest Du mit einer DLL Schnittstelle erreichen? Möchtest Du DLLs für unterschiedliche Protokolle einbinden oder woran hast Du dabei gedacht? Auch die .Exe Start-Option habe ich noch nicht ganz begriffen. Meinst Du das Starten einer Exe durch ein Output-Neuron getriggert? Wäre natürlich auch eine Idee, die relativ "kostengünstig" zu implementieren ist.

25.05.2005, 05:50
Brainstorming:


Wenn ich mit mehreren Internet-Explorer-Instanzen gleichzeitig surfe, dann gehen alle Anfragen von mir und meinen Browser-Fenstern über den selben Port ab (80 oder 8080), gerichtet an den Standard-Port des Dienstes, den ich von dem Server erwarte (80 oder 8080), und dann mit dem Hinweis, auf welchem Port meine jeweilige IE-Instanz die Antwort vom Server erwartet (irgendein Port jenseits der 4000-Grenze). So müsste MemBrain mit mehreren Instanzen doch auch agieren.

Eigentlich wäre doch zu überlegen,ob die Netzwerkwege sich nicht irgendwie als Links in MemBrain verstehen lassen. Sozusagen mit variabler Länge (je nach momentaner Internet-Geschwindigkeit). Uuhh, dann stellt sich die Frage, wie man ein Netz, das sich auf diverse PCs verteilt, die zwar übers Netz verbunden sind, trainiert.

Ich würde es mal so formulieren: Andauerndes Abfragen der Clients im Netz führt dazu, daß jeder Client dauernd in der Gegend rumschreit, ob einer im Netz ihm was gesagt hat. Clients müssen schnell genug sein, die Infos, die sie bekommen, entgegenzunehmen (Vielleicht könnte man ja doch was drehen an der Priorität von MemBrain, damit auch stärkerer Netzwerkverkehr noch durchkommt:-)). Wenn die Clients ein Datenpäckchen bekommen und zu beschäftigt sind, dann geht es besser
verloren, find ich.

Ein (MemBrain-)Netz über ein (TCP-)Netzwerk zu verteilen, stößt meiner Ansicht nach an schon fast philosophische Grenzen. Wie will man das bei unbekannten Laufzeiten zwischen den Teilnetzen je trainieren? Interessant auf jeden Fall...

Die Werte der IO-Neuronen übers Netz zu senden/empfangen ist in dieser Hinsicht wohl machbarer. Die Frage ist doch, wer deutet die Werte? Der Sender oder der Empfänger?
MemBrain kann doch nur die Output-Daten senden, die Output-Neuronen liefern, nämlich ihren Namen und ihren Zustand. Andere Daten sind nicht vorhanden.
Die Deutung, daß z.B. Start "1" bedeutet und Stop "0", kann man dem
Client oder jedenfalls der Gegenstelle überlassen.

Andererseits könnte man es auch so angehen, daß es bei MemBrain eine
Programmerweiterung gibt (Jippieh), bei der ich explizit definieren kann,
(Alarmanlage-Beispiel) wenn das Output-Neuron den Wert 1 erreicht, dann starte diese .exe oder .bat Datei oder schicke den Befehl "Einbruch_Vollzogen" an die IP-Adresse und diesen Port (mit dem und jenem Protokoll, die wissen dann schon, was mit anzufangen).
Genauso könnte es bei Input-Neuronen laufen, aber wahrscheinlich viel komplizierter.
Da könnte man ja rumspinnen mit Bildimporten, die man in Echtzeit auf ein Netz loslässt, Pixel für Neuron, um Signale einer Kamera auszuwerten, lauschen auf dem MemBrain-Port auf eingehende neue Werte für die und die Neuronen u.s.w.

gutzufuss2005
25.05.2005, 05:53
Öhm, hab mich wohl nicht eingeloggt...

Freiheitspirat
25.05.2005, 09:41
Ob die Clients die Output-Daten des Servers dann zyklisch abfragen müssen, oder automatisch permanent gesendet bekommen, weiß ich noch nicht. Abfragen hat natürlich den Vorteil, dass man einen Client nicht mit Daten zuballert, die er u.U. so schnell gar nicht verarbeiten kann...


Ich würde gerne nochmal das Beispiel von der Entfernungsmessung nehmen:
Ein Entfernungswert könnte jederzeit bei Bedarf abgeholt werden (Reaktion).
Dieser Bedarfsfall sollte nicht die Regel sein, um zu überprüfen, ob eine "gefährliche" Distanz unterschritten wurde, sonder um sie z.B. für die Auswertung eines anderen Ereignisses heran zu ziehen.
Sollte im Gegensatz dazu eine Schwellenwert unterschreitung stattfinden, so sollte eine Aktion ausgelöst werden (Aktion).



Ich denke, es wäre für's erste doch eine Option, das Protokoll festzuschreiben.

Das letzte Wort irritiert mich aus Deinem "Munde". O:)
Ich würde es gerne so formulieren:
Um zeitnahe erste Tests machen zu können, sollte ein Basisprotokoll geschaffen werden, auf dem sich weitere (höhere) Protokollschichten aufsetzen lassen. Oder ?


Meinst Du das Starten einer Exe durch ein Output-Neuron getriggert? Wäre natürlich auch eine Idee, die relativ "kostengünstig" zu implementieren ist.

Jep, einfach und in vielen Fällen ausreichend, da häufig keine Rückmeldung (Dialog) erforderlich ist.
Bsp.: Das Starten einer "Shutdown.exe" erklärt sich von selbst...


Was möchtest Du mit einer DLL Schnittstelle erreichen? Möchtest Du DLLs für unterschiedliche Protokolle einbinden oder woran hast Du dabei gedacht?

Unabhängig von irgendwelchen Protokollen könnte eine "Plugin"-Funktion, ev. auch selbstprogrammierte, Aufgaben getriggert durchführen.
Bsp.: Perfomancekritische Aktionen


Die Werte der IO-Neuronen übers Netz zu senden/empfangen ist in dieser Hinsicht wohl machbarer. Die Frage ist doch, wer deutet die Werte? Der Sender oder der Empfänger?


Eine Information ist ein Datum mit einer zugehörigen Interpretation.
Eine Nachricht ist das Übermitteln einer Information von einem Sender zu einem Empfänger.
Eine Nachricht kommt also nur dann zustande, wenn Sender UND Empfänger die Daten interpretieren können !

26.05.2005, 10:56
Hi zusammen,

wollte nur schnell sagen, dass ich im Moment nicht so zum Antworten komme, aber trotzdem zwischendurch immer mit Interesse mitlese.
Da sind einige Punkte aufgetaucht, die ich gerne nochmal aufgreifen würde.. habe hoffentlich bald wieder einen Zeitschlitz dafür frei... 8-[

Hat nebenbei außerdem einer ne Idee, warum ich in diesem Forum immer wieder mal plötzlich ausgeloggt bin, wenn ich eine Antwort schreibe oder in ein anderes Forum wechsle?!

Grüße,
Friggle

Friggle
26.05.2005, 11:00
... wie zum Beispiel gerade eben, als ich definitiv beim Abschicken der Antwort eingeloggt war!

Mal sehen, ob's diesmal klappt... da muß man ja zur Sicherheit immer den Namen drunterschreiben...

Friggle

Pascal S.
26.05.2005, 14:26
Ziemlich gutes Programm.
Blick nur noch nicht ganz mit der Bedienung durch

26.05.2005, 18:26
Freut mich!

Wenn Du konkrete Fragen hast, einfach stellen. Wenn man so eine Software schreibt, wird man auch irgendwann "betriebsblind" und kann nicht mehr ganz einschätzen, ob bestimmte Dinge für andere verständlich sind oder nicht.
Und dann kommt's natürlich auch noch darauf an, ob man schon gewisse Grundkenntnisse über NNe hat, oder nicht...

Gruß,
Friggle

Friggle
29.05.2005, 22:56
So müsste MemBrain mit mehreren Instanzen doch auch agieren
Ich denke, dass das nicht ganz vergleichbar ist: Bei MemBrain müsste ein Client ja schließlich bestimmen können, mit welcher MemBrain Instanz er sich verbinden möchte (jede enthält ja u.U ein völlig anderes Netz mit anderen I/O Namen etc.). Dementsprechend müsste jede MemBrain Instanz ein eigener Server sein, der auf einem in bestimmten Grenzen zuweisbaren Port lauscht.


Uuhh, dann stellt sich die Frage, wie man ein Netz, das sich auf diverse PCs verteilt, die zwar übers Netz verbunden sind, trainiert.
Da hab' ich sowieso Bedenken: Für Backpropagation müsste man jeder MemBrain Instanz auch noch Fehler-Signale übermitteln. Außerdem müsste das Ganze synchronisiert ablaufen, in einer bestimmten, bekannten Reihenfolge der Sub-Netze. Eine Instanz müsste "Master" sein, die I/O Daten kennen und dann das Lernen triggern, welches dann in einer Art Kettenreaktion über alle Instanzen laufen müsste, bis zurück zum Master. In einem ersten Anlauf möchte ich das ganz bestimmt noch nicht realisieren. Hinzu kommt, dass der Backprop Algorithmus sowieso ein Problem mit Netzen mit vielen Layern hat: Die Fehlersignale werden beim Zurückpropagieren per Definition immer kleiner, so dass Schichten, die weit vom Ausgang weg liegen, kaum trainiert werden.
Was ich mir da schon eher vorstellen kann, ist eine Art Hebb'scher Lernalgorithmus, bei dem ein Neuron lediglich seine direkten Nachbarn kennen muss, um seine Aktivierungsschwelle und sein Verbindungsstärken zu ändern. Das entspricht auch vielmehr der Biologie, es muss keine bestimmte Netzarchitektur vorliegen. Allerdings habe ich mit solchen Teachern bisher keine Erfolge gehabt, da bin ich noch am Tüfteln.
Mit einem solchen Teacher könnte jede MemBrain Instanz für sich selbst lernen, ohne von den anderen zu wissen. Dann bräuchte man vielleicht nur noch so eine Art Botenstoff-Arsenal, welches als globale Messages von verschiedenen MemBrain Instanzen verteilt werden könnte... fantasier...


Vielleicht könnte man ja doch was drehen an der Priorität von MemBrain, damit auch stärkerer Netzwerkverkehr noch durchkommt:-)
Kann man doch schon mit Hilfe der Think- und Teach-Geschwindigkeit. Gibt es da immer noch Probleme?

Ein (MemBrain-)Netz über ein (TCP-)Netzwerk zu verteilen, stößt meiner Ansicht nach an schon fast philosophische Grenzen.
Allerdings... der Gedanke macht mir auch wirklich Spaß!!


Ich würde gerne nochmal das Beispiel von der Entfernungsmessung nehmen:
Ein Entfernungswert könnte jederzeit bei Bedarf abgeholt werden (Reaktion).
Dieser Bedarfsfall sollte nicht die Regel sein, um zu überprüfen, ob eine "gefährliche" Distanz unterschritten wurde, sonder um sie z.B. für die Auswertung eines anderen Ereignisses heran zu ziehen.
Sollte im Gegensatz dazu eine Schwellenwert unterschreitung stattfinden, so sollte eine Aktion ausgelöst werden (Aktion).
Generell würde ich das einheitlich gestalten (z.B. Inputs pollen, Outputs berechnen und bei Anfragen nach außen zur Verfügung stellen). Prinzipiell benötigt ein Netz bei jedem Berechnungsschritt einen möglichst aktuellen Satz Input Daten. Ob es die nun gesendet bekommt oder zyklisch pollt ist aus meiner Sicht gar nicht so wichtig, ich denke man sollte hier auf ein möglichst robustes und performanzoptimiertes Modell zielen.


Ich würde es gerne so formulieren:
Um zeitnahe erste Tests machen zu können, sollte ein Basisprotokoll geschaffen werden, auf dem sich weitere (höhere) Protokollschichten aufsetzen lassen. Oder ?
Schön gesagt... dieser Formulierung kann ich natürlich nur zustimmen ;-)

NumberFive
31.05.2005, 21:54
bin auf die Software gespannt.

Gruß

Friggle
31.05.2005, 22:44
Ich auch ;-)

Bitte nicht ungeduldig werden, das kann noch ein Weilchen dauern...

Grüße,
Friggle

Friggle
06.06.2005, 20:27
Hallo zusammen,

es gab einen Bug Fix, so dass im Download-Bereich jetzt die MemBrain Version 02.00.00.08 zu haben ist.

Die Simulation hatte die Unart, einzufrieren, sobald im sichtbaren Fensterbereich keine Änderung mehr auftrat.

Grüße,
Friggle