Neuronale Netzwerkgröße für das Animationssystem

9

Ich entschied mich für ein Neuronales Netzwerk, um Verhaltensweisen für eine Animations-Engine zu erstellen, die ich habe. Das neuronale Netz nimmt für jeden Körperteil, den ich habe, 3 Vektor3 und 1 Eulerwinkel auf. Der erste Vektor3 ist die Position, der zweite ist seine Geschwindigkeit und der dritte ist seine Winkelgeschwindigkeit. Der Euler-Winkel ist die Rotation des Körperteils. und ich habe 7 Körperteile. Jeder dieser Datentypen hat 3 Gleitkommazahlen. 7 * 4 * 3 = 84, also habe ich 84 Eingänge für mein neuronales Netzwerk. Die Ausgänge werden den Muskeln des Charakters zugeordnet. Sie geben die Stärke an, die auf jeden Muskel angewendet wird, und es gibt 15 von ihnen.

Ich betreibe 15 Netzwerke gleichzeitig für 10 Sekunden, bewerte ihre Fitness durch Berechnung des niedrigsten Energieverbrauchs, mit der geringsten Z- und X-Bewegung und wenn die Körperteile in der richtigen Y-Position sind im Vergleich zum Rest (Hüften) .y & gt; Oberbein.y, Oberbein.y & gt; Unterbein.y usw.), und dann laufen sie durch einen genetischen Algorithmus. Ich führte ein neuronales Netzwerk von 168 Neuronen pro versteckter Schicht mit 8 versteckten Schichten. Ich versuche, den Charakter dazu zu bringen, aufrecht zu stehen und sich nicht zu sehr zu bewegen. Ich habe das für 3000 Generationen getan, und ich bin nicht einmal nahe gekommen.

Das neuronale Netzwerk und der genetische Algorithmus sind C # -Versionen von diesem Tutorial . Ich habe die Crossover-Methode von einem Punkt zum anderen geändert.

Ich habe 84 Eingänge und 15 Ausgänge. Wie groß sollte mein Neuronales Netzwerk sein?

    
DrSammyD 16.08.2010, 18:50
quelle

3 Antworten

5

Das Problem, das Sie lösen wollen, ist ziemlich kompliziert. Ich bezweifle, dass irgendwelche "Vanille" -AS (vor allem, die eine feste Architektur für die Netzwerke verwenden) es (in einer vernünftigen Zeit) lösen werden. Ich glaube auch nicht, dass Sie jemals die "richtige Anzahl von Neuronen" in der versteckten Schicht finden werden.

Wenn Sie jedoch bereit sind, etwas Zeit damit zu verbringen, schauen Sie sich HyperNEAT für Locomotion Control in modularen Robotern , die sich mehr oder weniger dem gleichen Problem widmen. Sie verwenden eine ziemlich fortgeschrittene GA-Technik namens HyperNEAT und berichten von einigen guten Ergebnissen.

HyperNEAT baut auf NEAT ( Neuroevolution erweiterter Topologien ) auf. NEAT ist in der Lage, nicht nur die Gewichte von KNNs, sondern auch deren Struktur zu entwickeln. Es beginnt mit einfachen Netzwerken und macht sie langsam komplexer, bis Sie Ihr Ziel erreichen (oder aufgeben).

Dann wird NEAT geringfügig verändert, um verschiedene Aktivierungsfunktionen nutzen zu können. Es wird es ermöglichen, eine große Vielfalt von "Mustern" zu erzeugen, wenn es auf eine Reihe von Punkten, z. in einem Koordinatensystem. Die Muster können einige interessante Merkmale aufweisen, wie perfekte / unvollständige Symmetrie oder sie können periodisch sein. Diese Variante wird Kompositionsmuster-produzierendes Netzwerk oder CPPN genannt. Eine spektakuläre Anwendung dieser Technologie ist PicBreeder , wo die Netzwerke zum "Zeichnen" von Bildern verwendet werden.

In HyperNEAT werden die CPPNs verwendet, um andere KNNs zu erstellen. Die verborgene Schicht der neuen Netzwerke wird durch ein sogenanntes Substrat repräsentiert, das man sich so vorstellen kann, als würden die Neuronen der Schicht in ein 2D / 3D-Koordinatensystem gebracht. Dann wird für jedes mögliche Paar der Neuronen (alle von der Eingabeschicht bis zu allen verborgenen, von allen versteckten zu allen Ausgaben) das CPPN verwendet, um das Gewicht zu bestimmen. Somit haben wir eine indirekte Kodierung, welche

  • an sich ist klein
  • kann am Ende beliebig große Netzwerke erzeugen
  • was auch ziemlich komplexes Verhalten zeigen kann
  • Muster, die in der Realität / Natur auftauchen (wiederum Symmetrie, periodisches Verhalten) können relativ leicht entstehen. Beachten Sie, dass beide für die Animation / effektive Fortbewegung sehr vorteilhaft sind (wenn nicht ein Muss).

Alles in allem würde es Ihnen eine Chance geben, Ihr komplexes Problem zu lösen.

Wie Sie sehen können, gibt es verschiedene Schichten dieser Technik, deshalb ist es nicht so einfach, sie für sich zu implementieren. Glücklicherweise gibt es einige gute Implementierungen, die Sie auf der NEAT Homepage zusammen mit finden können viele andere Dokumente, Papiere und Tutorials.

    
Sandor Murakozi 17.08.2010, 08:56
quelle
0

Können Sie das auf das Notwendigste reduzieren? Einen Fuß und ein Schienbein haben, und das ist es; zwei Körperteile, zwei Winkel, und es zum Stehen bringen.

    
Dean J 16.08.2010 19:00
quelle
0

Interessanter Ansatz! Ich habe eine Weile über etwas Ähnliches nachgedacht, würde gerne hören, welche Ergebnisse du bekommst.

Sie müssen testen, aber ich vermute, Sie haben zu viele versteckte Ebenen. Ich denke, diese Anwendung könnte höchstens mit einem oder zwei funktionieren.

Sie sollten sich auch Ihre Fitnessfunktion ansehen - ich vermute, dass es "zu schwierig" ist, das Lernen zu ermöglichen, in dem Sinne, dass es am Anfang keine Hoffnung hat, aufzustehen. Daher ist es das "lokale Minimum", in das Sie fallen, wenn Sie lernen, wie Sie mit der geringsten Anstrengung herunterfallen. Nicht sehr nützlich. GA leiden im Allgemeinen sehr unter lokalen Minima.

Um Ihre Fitness-Funktion zu verbessern, würde ich versuchen, eine Abweichung von jedem Bild zu vermeiden. Dies wird einigen Lösungen, die das Teilguthaben verwalten, Anerkennung zuteil, so dass es einen Verbesserungspfad geben sollte. Ich würde mich überhaupt nicht um den Energieverbrauch kümmern, bis man sie ins Gleichgewicht gebracht hat.

    
mikera 16.08.2010 19:02
quelle