Frage

Ich habe ein künstliches neuronales Netzwerk, das Tic-Tac-Toe spielt - aber es ist noch nicht vollständig.


Was ich noch habe:

  • das Belohnungsarray "R [t]" mit ganzzahligen Werten für jeden Zeitschritt oder jede Bewegung "t" (1= Spieler A gewinnt, 0= Unentschieden, -1= Spieler B gewinnt)
  • Die Eingabewerte werden korrekt über das Netzwerk weitergegeben.
  • die Formel zum Einstellen der Gewichte:

    Bildbeschreibung hier eingeben


    Was fehlt:

    • das TD-Lernen: Ich brauche noch eine Prozedur, die die Netzwerkfehler unter Verwendung des TD (λ) -Algorithmus "zurückpropagiert".

      Aber ich verstehe diesen Algorithmus nicht wirklich.


      Mein bisheriger Ansatz ...

      Der Trace-Decay-Parameter λ sollte "0,1" sein, da distale Zustände nicht so viel von der Belohnung erhalten sollten.

      Die Lernrate beträgt in beiden Ebenen (Eingabe und ausgeblendet) "0,5".

      Es handelt sich um eine verspätete Belohnung: Die Belohnung bleibt "0", bis das Spiel endet. Dann wird die Belohnung "1" für den Gewinn des ersten Spielers, "-1" für den Gewinn des zweiten Spielers oder "0" im Falle eines Unentschieden.


      Meine Fragen:

      • Wie und wann berechnen Sie den Netzfehler (TD-Fehler)?
      • Wie können Sie die "Backpropagation" des Fehlers implementieren?
      • Wie werden die Gewichte mit TD (λ) eingestellt?

        Vielen Dank im Voraus :)

War es hilfreich?

Lösung

Wenn Sie es ernst meinen, diese Arbeit zu machen, wäre es sehr hilfreich, TD-Lambda zu verstehen.Das Buch "Reinforcement Learning" von Sutton und Barto ist kostenlos erhältlichHTML-Format und behandelt diesen Algorithmus im Detail.Grundsätzlich erstellt TD-Lambda eine Zuordnung zwischen einem Spielstatus und der erwarteten Belohnung am Ende des Spiels.Während Spiele gespielt werden, erhalten Zustände, die eher zu Gewinnzuständen führen, tendenziell höhere erwartete Belohnungswerte.

Für ein einfaches Spiel wie Tic-Tac-Toe ist es besser, mit einer tabellarischen Zuordnung zu beginnen (verfolgen Sie einfach einen erwarteten Belohnungswert für jeden möglichen Spielstatus).Sobald dies funktioniert hat, können Sie versuchen, stattdessen eine NN für das Mapping zu verwenden.Aber ich würde vorschlagen, zuerst ein separates, einfacheres NN-Projekt auszuprobieren ...

Andere Tipps

Ich war auch darüber verwirrt, aber ich glaube, dass es so funktioniert:

Ausgehend vom Endknoten überprüfen Sie R (Ausgabe empfangen) und E (Ausgabe erwartet).Wenn E= R, ist es in Ordnung und Sie müssen keine Änderungen vornehmen.

Wenn E!= R, sehen Sie, wie weit es entfernt war, basierend auf Schwellenwerten und so weiter, und verschieben Sie dann die Gewichte oder Schwellenwerte ein wenig nach oben oder unten.Dann gehen Sie basierend auf den neuen Gewichten wieder hinein und raten, ob es zu hoch oder zu niedrig war oder nicht, und wiederholen dies mit einem schwächeren Effekt.

Ich habe diesen Algorithmus nie wirklich ausprobiert, aber das ist im Grunde die Version der Idee, wie ich sie verstehe.

Soweit ich mich erinnere, führen Sie das Training mit einer bekannten Ergebnismenge durch - also berechnen Sie die Ausgabe für eine bekannte Eingabe und subtrahieren Ihren bekannten Ausgabewert davon - das ist der Fehler.

Dann verwenden Sie den Fehler, um das Netz zu korrigieren - für eine einzelne Schicht NN, die mit der Delta-Regel angepasst wurde, weiß ich, dass ein Epsilon von 0,5 zu hoch ist - so etwas wie 0,1 ist besser - langsamer, aber besser.Mit Backpropagation ist es etwas fortgeschrittener - aber soweit ich mich erinnere, ist die Beschreibung der mathematischen Gleichung eines NN komplex und schwer zu verstehen - es ist nicht so kompliziert.

werfen Sie einen Blick darauf http://www.codeproject.com/KB/recipes/BP.aspx

oder Google für "Backpropagation c" - es ist wahrscheinlich einfacher im Code zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top