Steigerung meiner GA mit Neuronalen Netzen und / oder Reinforcement Learning

8

Wie ich in früheren Fragen erwähnt habe, schreibe ich eine Labyrinth-Lösung, die mir hilft, mehr theoretische CS-Themen zu lernen. Nach einigen Schwierigkeiten habe ich einen genetischen Algorithmus, der eine Reihe von Regeln entwickeln kann (behandelt mit booleschen Werten) ) um eine gute Lösung durch ein Labyrinth zu finden.

Abgesehen davon ist die GA alleine in Ordnung, aber ich würde es gerne mit einem Neuronalen Netzwerk verbessern, obwohl ich keine wirklichen Kenntnisse über Neuronale Netze habe (keine formale theoretische CS-Ausbildung). Nachdem ich ein wenig über das Thema gelesen hatte, fand ich heraus, dass ein neurales Netzwerk verwendet werden könnte, um ein Genom zu trainieren, um die Ergebnisse zu verbessern. Nehmen wir an, ich habe ein Genom (eine Gruppe von Genen), wie zum Beispiel

%Vor%

Wie könnte ich ein neuronales Netzwerk (ich nehme MLP an?) dazu nutzen, mein Genom zu trainieren und zu verbessern?

Zusätzlich dazu, da ich nichts über neuronale Netzwerke weiß, habe ich mich bemüht, irgendeine Form von Reinforcement Learning zu implementieren, indem ich meine Labyrinth-Matrix (zweidimensionales Array) benutze, obwohl ich ein bisschen festhalte, was der folgende Algorithmus will von mir:

(aus Ссылка )

%Vor%

Das große Problem für mich ist, eine Belohnungsmatrix R zu implementieren und was genau eine Q-Matrix ist, und den Q-Wert zu erhalten. Ich benutze ein multi-dimensionales Array für meine Labyrinth- und Enum-Zustände für jede Bewegung. Wie würde dies in einem Q-Learning-Algorithmus verwendet werden?

Wenn jemand helfen könnte, indem er erklärt, was ich tun müsste, um das Folgende zu implementieren, vorzugsweise in Java, obwohl C # auch nett wäre, vielleicht mit einigen Quellcode-Beispielen, würde es geschätzt werden.

    
AlexT 17.03.2010, 14:44
quelle

3 Antworten

3

Wie in einigen Kommentaren erwähnt, beinhaltet Ihre Frage in der Tat eine große Menge an Hintergrundwissen und Themen, die bei stackoverflow kaum eloquent behandelt werden können. Was wir hier jedoch versuchen können, ist Vorschläge zu machen, um Ihr Problem zu umgehen.

Zunächst einmal: Was macht Ihre GA? Ich sehe eine Reihe von Binärwerten; was sind Sie? Ich sehe sie als entweder:

  • schlecht : eine Abfolge von Anweisungen "rechts abbiegen" und "nach links abbiegen". Warum ist das schlecht? Weil Sie im Grunde einen zufälligen, brutalen Versuch unternehmen, Ihr Problem zu lösen. Sie entwickeln keinen Genotyp: Sie verfeinern zufällige Vermutungen.
  • besser : Jedes Gen (Ort im Genom) stellt ein Merkmal dar, das im Phänotyp exprimiert wird. Es sollte keine 1-zu-1-Zuordnung zwischen Genom und Phänotyp geben!

Lassen Sie mich ein Beispiel geben: In unserem Gehirn gibt es 10 ^ 13h Neuronen. Aber wir haben nur etwa 10 ^ 9 Gene (ja, es ist kein genauer Wert, bloß mit mir für eine Sekunde). Was sagt uns das? Dass unser Genotyp nicht jedes Neuron codiert. Unser Genom kodiert die Proteine, die dann die Bestandteile unseres Körpers bilden.

Daher arbeitet die Evolution direkt am Genotyp, indem sie Merkmale des Phänotyps auswählt. Wenn ich an jeder Hand 6 Finger hätte und wenn dies mich zu einem besseren Programmierer machen würde, würde ich mehr Kinder bekommen, weil ich erfolgreicher im Leben bin, nun, mein Genotyp würde dann von der Evolution ausgewählt, weil er das Fähigkeit , mir einen besseren Körper zu geben (ja, da gibt es ein Wortspiel angesichts des durchschnittlichen Geekiness-zu-Reproduzierbarkeit-Verhältnisses der meisten Menschen hier).

Denken Sie jetzt an Ihre GA: Was wollen Sie erreichen? Sind Sie sicher, dass sich entwickelnde Regeln helfen würden? Mit anderen Worten - wie würde Sie in einem Labyrinth durchführen? Was ist die erfolgreichste Sache, die Ihnen helfen kann: einen anderen Körper zu haben oder sich den richtigen Weg zu merken? Vielleicht möchten Sie Ihren Genotyp noch einmal überdenken und ihn zu Gedächtnisfähigkeiten kodieren lassen. Vielleicht kodieren Sie im Genotyp, wie viele Daten gespeichert werden können und wie schnell Ihre Agenten darauf zugreifen können - messen Sie dann die Fitness in Bezug darauf, wie schnell sie aus dem Labyrinth herauskommen. Ein anderer (schwächerer) Ansatz könnte darin bestehen, die Regeln zu verschlüsseln, nach denen Ihr Agent entscheidet, wohin er gehen soll. Die Take-Home-Nachricht ist, Funktionen zu kodieren, die, einmal ausgedrückt, durch Fitness ausgewählt werden können.

Nun zum Problem des neuronalen Netzwerks. Eine Sache zu erinnern ist, dass NN Filter sind. Sie erhalten eine Eingabe. Operationen ausführen und eine Ausgabe zurückgeben. Was ist das Ergebnis? Vielleicht müssen Sie nur eine wahre / falsche Bedingung unterscheiden; Wenn Sie zum Beispiel eine Labyrinthkarte einem NN zuführen, kann es Ihnen sagen, ob Sie aus dem Labyrinth herauskommen oder nicht. Wie würdest du so etwas tun? Sie müssen die Daten encodieren .

Dies ist der entscheidende Punkt bei NNs: Ihre Eingabedaten müssen korrekt codiert sein. Normalerweise normalisieren Leute es, vielleicht skalieren Sie es, vielleicht können Sie eine Sigma-Funktion darauf anwenden, um Werte zu vermeiden, die zu groß oder zu klein sind; das sind Details, die sich mit Fehlermaßnahmen und Leistung befassen. Was Sie jetzt verstehen müssen, ist, was ein NN ist und wofür Sie es nicht verwenden können.

Zu Ihrem Problem jetzt. Sie haben erwähnt, dass Sie auch NNs verwenden möchten: Was ist mit

?
  • Verwenden eines neuronalen Netzwerks, um den Agenten zu leiten, und
  • Verwenden eines genetischen Algorithmus, um die neuronalen Netzwerkparameter zu entwickeln?

Umformuliert wie folgt:

  • Nehmen wir an, Sie haben einen Roboter: Ihr NN steuert das linke und rechte Rad und erhält als Eingabe die Entfernung der nächsten Wand und wie viel sie bisher zurückgelegt hat (es ist nur ein Beispiel)
  • Sie beginnen mit der Generierung eines zufälligen Genotyps
  • machen den Genotyp zu einem Phänotyp: das erste Gen ist die Netzwerksensitivität; das zweite Gen kodiert das Lernverhältnis; das dritte Gen .. so weiter und so weiter
  • Nun, da Sie ein neuronales Netzwerk haben, führen Sie die Simulation
  • aus
  • Sehen Sie, wie es funktioniert
  • erzeuge einen zweiten Zufallsgenotyp, entwickle zweites NN
  • Sehen Sie, wie diese zweite Person funktioniert
  • Holen Sie sich das beste Individuum, dann mutieren Sie entweder seinen Genotyp oder rekombinieren Sie es mit dem Verlierer
  • wiederhole

Es gibt eine ausgezeichnete Lesung zu diesem Thema hier: Inman Harvey Mikrobielle GA .

Ich hoffe, ich habe Ihnen einen Einblick in solche Fragen gegeben. NNs und GA sind keine Wunderwaffe, um alle Probleme zu lösen. In einigen können sie sehr viel bewirken, in anderen sind sie nur das falsche Werkzeug. Es ist (immer noch!) An uns, den Besten zu bekommen, und dazu müssen wir sie gut verstehen.

Viel Spaß dabei! Es ist toll, solche Dinge zu wissen, macht den Alltag ein bisschen unterhaltsamer:)

    
lorenzog 18.03.2010, 15:24
quelle
1

Es gibt wahrscheinlich kein "Labyrinth-Gen" zu finden,

genetische Algorithmen versuchen, einen Vektor von Eigenschaften und ein "Filtersystem" einzurichten, um durch irgendeine Art von "Überleben des geeignetsten" Algorithmus zu entscheiden, welcher Satz von Eigenschaften den besten Job machen würde.

Der einfachste Weg, einen Ausweg aus einem Labyrinth zu finden, ist, sich immer nach links (oder rechts) entlang einer Wand zu bewegen.

Der Q-Algorithmus scheint ein Problem mit lokalen Maxima zu haben. Dies war eine Problemumgehung, da ich mich daran erinnere, indem ich kickte (zufälliges Hinzufügen) Werte zur Matrix), wenn sich die Ergebnisse nicht verbessert haben.

EDIT: Wie oben erwähnt, passt ein Backtracking-Algorithmus besser zu dieser Aufgabe als GA oder NN. Wie man beide Algorithmen kombiniert, wird hier beschrieben NeuroGen beschreibt, wie GA zum Training eines NN verwendet wird.

    
stacker 17.03.2010 21:16
quelle
0
  • Versuchen Sie, die freie quelloffene NerounDotNet C # -Bibliothek für Ihre neuronalen Netzwerke zu verwenden, anstatt sie zu implementieren.

  • Für die Reinforcement Learning-Bibliothek suche ich gerade nach einer speziell für Dot NET Framework.

Betamoo 27.04.2010 20:22
quelle