- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 21

Thema: weltweit erstes Neuronales Jordan Netz auf Arduino Due !

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    was die Praktikabilität in bestimmten technischen oder industriellen Steuerungen angeht, gebe ich euch völlig recht -
    man kann sicher umschriebene Probleme durch andere Algorithmen oder Filter ebenfalls lösen, ich denke da nur an den Kalmanfilter oder den Partikelfilter oder AStern oder Bug2 oder Probleme wie das des "travelling Salesman".
    Die "Durchschaubarkeit und Nachvollziehbarkeit" ist hier für mich gar nicht das durchschlagende Argument, gerade bei AI lege ich hier dieselben Maßstäbe an wie in der Psycholgie beim operanden Konditionieren - da weiß ich ja auch nicht, was genau im Hirn des Trainierten vorgeht, ich sehe nur die Reize, und dann die daraus erfolgende Reaktion.
    Mein Ansatz war eher: mal auf einem Due ein wirklich komplexes KI Programm zu programmieren, das alle beliebigen Situationen trainierbar macht, samt Erinnerungsvermögen per Rückkopplung, in einem Umfang, was hier grade so machbar ist.

    Letzlich war ich bei der Entwicklung selber sehr erstaunt, was da so an cpu-Resourcen nötig wird, wenn man etwas umsetzen will. Ich dachte zwar schon, ein DUE käme damit an seine Grenzen, und ich habe ehrlich gesagt auch vorgehabt, die eigentliche spätere Weiterentwicklung auf einem viel mächtigeren TRE vorzunehmen (den es ja wohl jetzt nicht mehr geben wird). Herausgestellt hat sich dann aber, dass der DUE in der vorliegenden Implementierung nur gut 60 Reiz-Reaktionsmuster lernen kann (ich hatte ursprünglich schon mindestens 10 mal so viele von allen auf dem DUE vorgesehen gehabt), aber immerhin konnte ich zeigen, dass sowohl die Implementierung eines rückgekoppelten Backpropagation Netzes und auch dann dessen autonomes Training theoretisch und auch praktisch auf einem DUE möglich und durchführbar ist. Mit den sehr beschränkten Möglichkeiten des DUE für diese Applikation zeigt es aber doch hier erstmalig immerhin: Es geht, es funktioniert prinzipiell und auch praktisch, und das Verhaltens-Training samt User-Interface sogar zum manuellen Patchen der Neuron-Matrix ist mit einfachen Button- und Display-Menü-Steuerungen machbar !
    Auch lässt sich das antrainierte "Wissen" multipel abspeichern, dann ein alternatives Training durchführen, dieses ebenfalls abspeichern und dann wieder ein anderes (früheres oder leeres) "Gedächtnis" während der Laufzeit laden: Total Recall auf dem Arduino ^^.

    Das hat immerhin bisher noch niemand auf dieser Plattform etablieren und zeigen können.

    Das Programm spannt hierbei ein skalierbares Netz aus 60 Neuronen auf (plus Input-Layer von gut 100 reelen und virtuellen Sensor-Inputs), man muss zur Erweiterung nur die Konstanten für die Neuronen-Layer und die max. Lernmusterzahl vergößern:

    Code:
    #define  NMAXIN    108       // max number of inputs (sensors)
    #define  NMAXHID    20       // max number of hidden layer neurons
    #define  NMAXOUT    20       // max number of output layer neurons
    #define  NMAXCONT  NMAXOUT   // max number of context neurons
    #define  NMAXPAT    60       // <<< max number of possibly trained patterns;
    und schon hat man sein persönliches Netz an seine persönlichen Anforderungen auch größerer cpus mit mehr Speicher-Resourcen angepasst.
    Mein Wunsch hierbei:

    Code:
    #define  NMAXIN   1000       // max number of inputs (sensors)
    #define  NMAXHID   250       // max number of hidden layer neurons
    #define  NMAXOUT   250       // max number of output layer neurons
    #define  NMAXCONT  NMAXOUT   // max number of context neurons
    #define  NMAXPAT  5000       // <<< max number of possibly trained patterns;
    Legt man zugrunde, dass der DUE 96kB RAM hat, und dass dieses mit den bisherigen Neuronen bis Oberkante Unterlippe ausgelastet ist, kann man sich schnell ausrechnen, in welche RAM-Größenordnungen man hier vorstoßen müsste, denn die Mächtigkeit der Netz-Matrix (d.h. des Neuronennetzes und das Gedächtnis für alle seiner trainierten Lernmuster) beträgt ja etwa (Neuronenzahl * Lernmuster).

    Aber es geht!

    Man reiche mir eine cpu mit entsprechender Leistungsfähigkeit und portiere das Sketch-Programm auf diese andere Plattform,
    dann braucht man einzig und allein die #define-Konstanten auf die gewünschte Größe zu ändern und zu kompilieren, und, voila, schon hat man ein weit größeres lernfähiges rückgekoppeltes Netz mit Erinnerungsvermögen.

    Hätte ich einen TRE, der mit Sketch/Wiring programmierbar ist, würde ich es innerhalb von 30 Sekunden eben mal schnell machen. 8-)
    Geändert von HaWe (19.08.2015 um 12:28 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Hallo HaWe,

    einige Fragen hab ich dazu.

    - Ist diese Funktion "Summe(Eingänge) * Gewicht - Schwellwert" in der gezeigten Grafik "Schematischer Aufbau eines Computerneurons" die intern ablaufende Neuronfunktion? (Klingt so überraschend simpel).
    - Im ersten verlinkten Video sehe ich am unteren Rand so eine Pünktchengrafik. 5 Pünktchen hoch und gaaanz breit. Was zeigt die genau? Sind die flimmernden Pünktchen die Ausgänge der Neuronen? Und in welche Richtung laufen die Schichten? Bei 5 eingezeichneten Linien als Abstandswerte liegt der Verdacht nahe, es läuft horizontal durch die Schichten? Allerdings sehe ich dann die Ausgänge nicht.
    - Wenn Du so ein Netz aufbaust und anlernst, wie legst Du fest, wieviele Schichten du brauchst und wie breit eine Schicht sein muss? Ist das einfaches Ausprobieren oder steckt da eine Logik hinter? (Ich hab mal so was ähnliches, wie im ersten Video mit mehreren PID-Reglern durchsimuliert, da war mir recht schnell klar, was ich an Reglern brauchte und wie ich sie untereinander in Relation zu setzen habe. Naja, die Regelparameter musste ich natürlich selbst einstellen).
    - In Bezug auf die vorhergehende Frage: Ein neuronales Netz löst eine Problemstellung. Bezogen auf das erste Video kann ich mir gut vorstellen, dass die Bahn des Autochens auch ein Rundkurs sein kann oder einige Kurven mehr haben kann. Die Problemstellung ist ja gelöst, das Autochen wird auch diese neuen Routen meistern können. Wenn ich jetzt aber z.B. eckige 90°-Winkel-Kurven in den Parcours einführe und deshalb ein Umlernen/ Erweitern des Netzes erforderlich ist (du bekommst ja ganz andere Eingangswerte der Sensoren mit sprunghaften Änderungen), ist dann der gesamte vorhergehende Lernvorgang für die Katz oder kannst Du dann nach der Erweiterung des Netzes noch irgendetwas von den alten Neuron-Parametern verwenden? Also hat das Netz dann etwas dazugelernt oder die neue Problemstellung komplett neu erlernt?

    Sorry, die Fragen mögen etwas naiv klingen, allerdings hab ich überhaupt keine praktische Erfahrung mit neuronalen Netzen. Aber interessieren tut's mich trotzdem.

  3. #3
    HaWe
    Gast
    hallo,
    was das einzelne Neuron angeht: ja, das stimmt, es folgt aber noch die Aktivierungsfunktion.
    Trainiert werden die Gewichte und die Schwellwerte eines jeden einzelnen Neurons, und bei jedem einzelnen Lernschritt innerhalb eines zusammenhängenden Lern- bzw. Trainings-Zyklus' wird dazu-gelernt, nichts wird gelöscht - aber möglicherweise wird altes Wissen modifiziert, eingeschränkt, erweitert, generalisiert, was auch immer, damit jetzt immer noch oder wieder alles gelernte zusammenpasst. Nur wenn eine bestimmte Input-Konstellation aller 100 oder 1000 Inputs 100%ig mit einer früher trainierten identisch ist und wenn nun die neue Reaktion die alte ersetzen soll, wird die neue die alte überschreiben - leicht unterschiedliche Muster-Konstellationen werden nebeneinander existent bleiben.

    Wie das genau funktioniert, kann ich hier nicht erklären, ich müsste dazu hier ein eigenes Lehrbuch schreiben - ich muss daher auf die beiden oben erwähnten Lehrbücher verweisen.

    Was die Programme in den Videos genau machen, weiß ich nicht, sie sind nur illustrativ und stammen nicht von mir selber, aber in dem darüber stehenden Suchlink findest du weitere, die ggf. besser erklärt und weiter verlinkt sind.

    In meinem NN-Thread
    http://www.mindstormsforum.de/viewto...&t=5601#p67273
    http://www.mindstormsforum.de/viewto...&t=5601#p47811
    habe ich erklärt, was mir in der Kürze eines Forums-Topics möglich ist, daher muss ich für weitergehende Erklärungen auf Fachbücher verweisen, auch im Internet findet sich einiges - z.B. auch
    http://www.cs.bham.ac.uk/~jxb/NN/nn.html
    Geändert von HaWe (19.08.2015 um 12:30 Uhr)

  4. #4
    Robobionic
    Gast
    Zitat Zitat von HaWe Beitrag anzeigen
    Mein Ansatz war eher: mal auf einem Due ein wirklich komplexes KI Programm zu programmieren, das alle beliebigen Situationen trainierbar macht, samt Erinnerungsvermögen per Rückkopplung, in einem Umfang, was hier grade so machbar ist.
    Hallo HaWe, erstmal Gratulation für Dein Projekt.

    Ein Lernfähiges System ist natürlich auch unabhängig von der Rechendauer etwas ziemlich kostbares, vor allem wenn man es unter diesen Voraussetzungen entwickelt hat.
    Die Realtime Berechnungsgrenzen und Lernzeit über native code zu optimieren hat Dir wieviel an Zeit gebracht?

    Du hattest das Projekt ja mit Backpropagation begonnen, also keine Möglichkeit die erlernten Erfahrungswerte und Muster abzurufen.
    Demnach war das Stunden oder Tagelange lernen umsonst und musstest nachträglich jede Menge Aufwand investieren um es überhaupt irgendwie autonom hinzubiegen.

    Dein Aufwand ist schon bemerkenswert, aber wie gehst Du mit der Skalierbarkeit um?
    Ich meine für den praktischen Einsatz müssen die Neuronengrenzen doch Hardwarebedingt echt ein Alptraum für Dich sein.

    Wie auch immer, danke das Du Deine Leidenschaft mit uns teilst ... Tolles Projekt.

  5. #5
    HaWe
    Gast
    ich bin nicht sicher, ob ich dich richtig verstehe - aber über Backpropagation Learning laufen sowohl das "einfache" als auch das Jordan Backpropagation Netz.
    Beide Netze können grundsätzlich ihre Lern-Matrix auf SD Card speichern und wieder abrufen.
    Der Unterschied ist, dass das Jordan-Netz auch bei identischen punktuellen Sensorkonstellationen berücksichtigen kann, wie sich ihr ZUstand in der zurückliegenden Vergangenheit entwickelt hat: hier habe ich es erklärt:
    http://www.mindstormsforum.de/viewto...&t=5601#p67272

    Begonnen habe ich aber nicht mit Backpropagation, sondern mit einschichtigen Feed-Forward-Netzen und der der Perception Training Rule.

    Die Skalierbarkeit heißt nichts anderes, als dass ich die Netzmatrix-Dimension frei durch einfache Definitionen der Arraygrößen vorwählen kann, so kann ich die Netzgröße und die Anzahl der gelernten Input-Output-Pattern den Erfordernissen und der cpu bzw. dem verfügbaren RAM jederzeit anpassen, ohne das ganze Programm neu schreiben zu müssen. Alle Neuronen samt allen ihren Verknüpfungen miteinander in sämtlichen Schichten werden automatisch angepasst und korrekt initialisiert. Einfach nach Größenänderung neu kompilieren, fertig, läuft.

    Im Moment ist es für den DUE ausgereizt, für größere cpus / RAM könnte man es noch ein Riesen-Stück hochskalieren (hätte man z.B. einen TRE mit Sitara und mit 1GB statt 96kB RAM samt Sketch/Wiring per Arduino IDE). Da es den aber nicht gibt, ist hier für mich erstmal Ende Gelände mit dem momentanen Ausbau.
    https://blog.arduino.cc/category/arduino/tre/

    Aber vielleicht kommt er ja doch noch irgendwann, oder irgendwer bringt irgendwann WiringPi samt Arduino-IDE auf einem Raspi etc. zum Laufen.

    Nicht verstanden habe ich allerdings deine Frage "Die Realtime Berechnungsgrenzen und Lernzeit über native code zu optimieren hat Dir wieviel an Zeit gebracht?"
    Geändert von HaWe (19.08.2015 um 22:40 Uhr)

  6. #6
    Robobionic
    Gast
    Zitat Zitat von HaWe

    Begonnen habe ich aber nicht mit Backpropagation, sondern mit einschichtigen Feed-Forward-Netzen und der der Perception Training Rule.
    Klar, mir gings um Deinen Plan und Implementierung der mehrschichtigen Netze.
    Dein Netz hat zu dem Zeitpunkt also immer alles neu berechnet aber noch nicht gelernt , zumindest konnte es durch Erfahrung noch keine Entscheidungen treffen.


    Zitat Zitat von HaWe
    Nicht verstanden habe ich allerdings deine Frage "Die Realtime Berechnungsgrenzen und Lernzeit über native code zu optimieren hat Dir wieviel an Zeit gebracht?"
    Speichergrenzen waren für Dich ja keine optimalen Voraussetzungen wegen limitierter Neuronen.
    Durch die Abhängigkeit mehrschichtiger Netze musstest Du ja das Lerntraining optimieren.

    Waren native Executables nur Deine Theorie, oder hast Du dadurch die Performance der NXC VMs in den Griff bekommen?

    Zitat Zitat von HaWe

    Im Moment ist es für den DUE ausgereizt, für größere cpus / RAM könnte man es noch ein Riesen-Stück hochskalieren (hätte man z.B. einen TRE mit Sitara und mit 1GB statt 96kB RAM samt Sketch/Wiring per Arduino IDE). Da es den aber nicht gibt, ist hier für mich erstmal Ende Gelände mit dem momentanen Ausbau.
    https://blog.arduino.cc/category/arduino/tre/
    Das hatte mich interessiert, danke.

  7. #7
    HaWe
    Gast
    Ach so, du meinst die beiden Plattformen NXT vs. DUE im Vergleich...:

    cpu-Takt NXT=48MHz, DUE=84 MHz,
    RAM NXT =48kB , DUE=96kB

    Viel extremer sind aber execution speed und auch verfügbares RAM während der Laufzeit, da der NXC-Bytecodeinterpreter sehr langsam ist und selber als VM auch RAM benötigt (frei mit NXC-VM=30kB). Mein Benchmark-Test http://www.mindstormsforum.de/viewto...p=64772#p64772 verdeutlicht es besser.

    Die Geschwindigkeit von Sketch C Execetubles auf Arduino DUE gegenüber NXC-Bytecode ist bei dieser Applikation (mit überwiegend float-Arithmetik, aber auch umfangreicher Pointer-Nutzung ) in etwa 200x schneller.

    (edit: ) Was die Netzarchitektur angeht, so bietet der DUE grob geschätzt ein halbes Dutzend mal so viel Speicher für Neuronen, direkt vergleichen kann ich es nicht, da FF- und Jordan-Netze in ihrem Code nicht vergleichbar sind. Allein die Jordan-Netzstruktur verschlingt aber schon extrem viel RAM, besonders beim Training für temporäre Variablen (gut noch mal so viel wie das reine Netz).
    Geändert von HaWe (20.08.2015 um 09:13 Uhr)

  8. #8
    HaWe
    Gast
    gerade erst gelesen...:
    Dein Netz hat zu dem Zeitpunkt also immer alles neu berechnet aber noch nicht gelernt , zumindest konnte es durch Erfahrung noch keine Entscheidungen treffen.
    nee, wie kommst du darauf? Dinge lernen und entsprechend der Netzmatrix aus den Inputs (Reizen) die entsprechenden Outputs (Reaktionen) generieren, dann gelernte Dinge als "Gedächtnis" auf Flash oder SD speichern, später wieder ein "Gedächtnis" der gelernten Dinge laden:
    das könnrn bzw. konnten alle Netze (bereits schon die FF-Netze auf dem NXT), es ist ja nur eine simple Datensatz-schreib/lese-Funktion, die unabhängig vom Netz mit allen möglichen Daten funktioniert. Ich habe lediglich ein paar neue SD-API-Funktionen ähnlich denen von stdio.h dafür zusätzlich geschrieben (u.a. fprintf und fscanf), da es sie bei Arduino noch nicht gab.

  9. #9
    Robobionic
    Gast
    Hallo HaWe, da habe ich mich wohl etwas missverstaendlich ausgedrueckt.

    Ich war davon ausgegangen das Du Dir am Anfang noch nicht sicher ueber die Anforderungen und zukuenftige Entwicklung warst.

    Ich kam darauf weil Backpropagation keine Moeglichkeiten fuer "Erinnerungen" bietet. Ich dachte dies sei der Grund fuer Dich gewesen weshalb Du es dann erst spaeter mit Jordan umgesetzt hast.

Ähnliche Themen

  1. weltweit erstes Neuronales Jordan Netz auf Arduino Due !
    Von HaWe im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 7
    Letzter Beitrag: 26.10.2016, 20:25
  2. weltweit erstes Neuronales Jordan Netz auf Arduino Due
    Von HaWe im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 17.08.2015, 15:02
  3. Neuronales Netz zur Mustererkennung
    Von Che Guevara im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 14.02.2012, 12:06
  4. Neuronales Netz mit dem Atmega8
    Von Spartakus im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 19.03.2006, 08:46
  5. Neuronales Netz
    Von matren im Forum Software, Algorithmen und KI
    Antworten: 39
    Letzter Beitrag: 26.07.2004, 00:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress