Wie man Tic-Tac-Toe gegen Dame oder Schach für ein neuronales Netzwerk darstellt


7

Ich habe in letzter Zeit viel über TD-Gammon gelesen, als ich in einem Videospiel, das ich mache, Optionen für KI erkunde. Das Videospiel ist eine rundenbasierte Positionsart, dh die Position einer "Einheit" oder eines Spielstücks wirkt sich stark auf die Nützlichkeit in diesem Brettzustand aus.

Um mich darauf vorzubereiten, hielt ich es für ratsam, zuerst ein neuronales Netzwerk für einige verschiedene Spiele zu implementieren.

Die Idee, die mir gefällt, besteht darin, den Board-Status für das Neuronale Netzwerk mit einem einzelnen Ausgangsneuron zu codieren, das diesen Board-Zuständen im Vergleich zu anderen Board-Zuständen eine relative Stärke verleiht. So wie ich es verstehe, hat TD-Gammon so funktioniert.

Wenn ich mir jedoch den Code und die Beispiele / Tutorials anderer Leute anschaue, scheint es große Unterschiede in der Art und Weise zu geben, wie sie den Board-Status darstellen. Sogar für etwas so Einfaches wie Tic-Tac-Toe.

Damit; speziell für Tic-Tac-Toe, was ist eine bessere, oder was ist die richtige Darstellung für den Board-Status? Ich habe gesehen:

  1. 9 Eingangsneuronen, eine für jedes Quadrat. Ein 0Hinweis auf einen freien Platz, -1den Gegner und sich 1selbst.
  2. 9 Eingangsneuronen, aber mit unterschiedlichen Werten wie 0für den Gegner, 0.5kostenlos und 1für sich selbst?
  3. Könnten Sie größere Werte verwenden? LIke 0, 1und 2?
  4. 27 Eingangsneuronen. Die ersten 3 sind Quadrat 1, die nächsten 3 sind Quadrat 2 usw. Jedes Neuron ist 1oder 0. Der erste der Dreiergruppen gibt an, ob dieses Quadrat frei ist oder nicht. Die zweite zeigt an, ob das Feld von Ihrem Gegner besetzt ist oder nicht. Am Ende wird nur eines von 3 Neuronen ein haben 1, die anderen beiden werden ein haben 0.
  5. 18 Eingangsneuronen. Das erste ist 1für den X-Spieler, das zweite 1für den O-Spieler und beide 0für ein Leerzeichen

Dann; Wie würden Sie dies darstellen, wenn Sie in Spiele verzweigen, in denen die spezifischen Fähigkeiten der Figuren ins Spiel kommen, wie im Schach?

Wäre es so einfach, höhere Eingabewerte für wertvollere Stücke zu verwenden? Dh -20für eine gegnerische Königin und +20für deine eigene Königin? Oder benötigen Sie etwas Komplexeres, bei dem Sie für jedes Feld mehr als 10 Werte definieren, einen für jede Kombination aus Einheitentyp und Spieler?

Antworten:


3

Wenn Sie mit neuronalen Netzen arbeiten, kann das Netzwerk, solange die Daten vorhanden sind, in der Regel lernen, wie sie zu einem nützlichen Ergebnis verarbeitet werden. In der Regel möchten Sie auch die Anzahl der Gewichte auf ein Minimum beschränken. Wenn Sie zusätzliche Gewichte verwenden, dauert das Trainieren des Netzwerks länger, da Sie noch mehr Werte für ein optimales Netzwerk einstellen müssen. Für Tic-Tac-Toe sollte also jede Ihrer Lösungen mit 9 Eingängen einwandfrei funktionieren. Es ist auch hilfreich, wenn Sie die Eingaben zwischen 0 und 1 halten, wenn Sie Log Sigmoid verwenden, und -1 und 1, wenn Sie eine hyperbolische Tangente für Ihre Aktivierungsfunktion verwenden. Sie können wahrscheinlich leicht herausfinden, was für andere Aktivierungsfunktionen verwendet werden soll. Sie können Ihre Daten durch einen als Bereichsnormalisierung bezeichneten Prozess in ein anderes Dataset mit Werten innerhalb eines bestimmten Bereichs umwandeln. Für Schach, Sie können jedes Stück einfach auf verschiedene Arten codieren, und es wird wahrscheinlich keinen großen Unterschied machen. Die allgemeine Faustregel lautetSie möchten die Anzahl der Gewichte minimieren und gleichzeitig dem Netzwerk die bestmöglichen Variablen geben .


Hilft das Erstellen einer vollständig verbundenen Ebene nicht dabei, das Problem mit der Anzahl der von Ihnen beschriebenen Gewichte zu lösen? Wie die Netzwerkstruktur in arxiv.org/pdf/1509.01549.pdf (Seite 21)
NeomerArcana

@NeomerArcana, das funktioniert vielleicht, aber Sie erhalten immer noch nicht die effizienteste Codierung. Es wäre besser, nur 9 Eingänge zu haben, als 18 in einer nicht vollständig verbundenen Schicht.
Aiden Grossman

und die Entscheidung zu verwenden -1, 0, 1vs 0, 0.5, 1wird durch die Aktivierungsfunktion im Einsatz bestimmt?
NeomerArcana

@NeomerArcana ja.
Aiden Grossman

Ist es wichtig, ob es ein -1Gegner ist, 0 frei und 1dein eigener? Wie in, könnte -1frei sein, 0dein eigenes und 1wie dein Gegner arbeiten? Ich vermute, es würde, solange es immer konsistent ist?
NeomerArcana

2

Die Darstellung von Zuständen ist sehr wichtig, um die Daten für das neuronale Netzwerk vorzubereiten. Sie können verschiedene Methoden ausprobieren und auswählen, welche am besten zu Ihrem Fall passen.

  • Sie können 18 Neuronen als Eingabe verwenden, wobei jeder Zustand durch die 2 Bits dargestellt wird. Vermeiden Sie jedoch 0 und 1, wenn Sie die Sigmoid-Aktivierungsfunktion verwenden, die am Ausgang eine Sättigung verursachen kann. Wenn also Ausgang (y) auf einer beliebigen Ebene 1 wird, haben wir bei einem Rückausbreitungsfehler y (1-y) dE / dy in weight update part, das mit der Sättigung Null wird, was bedeutet, dass es immer im gleichen Zustand bleibt.

Dieses Problem kann mit folgender Methode gelöst werden:

Lösung 1. Sie können die Eingabe mit einem Rand von 0 und 1 initialisieren. Beispielsweise kann die Eingabe [0,1, 0,9] anstelle von [0, 1] sein.

Lösung 2. Zum anderen können Sie sehr kleine Gewichte im Bereich von [-0,01, 0,01] initialisieren.

Lösung 3. Sie können die Regularisierungstechnik verwenden, deren Zweck darin besteht, die Gewichte zu unterdrücken, indem Sie einen fehlerhaften Strafbegriff hinzufügen.

  • Um das Varianzproblem zu lösen, können Sie einige Daten für ein ordnungsgemäßes Training erweitern. Denn in Tic-Tac-Toe haben Sie einen kleinen Datensatz. Um die Daten zu erweitern, können Sie bei Eingängen mit denselben Ausgängen einen Bereich zwischen -0,1 und +0,1 hinzufügen.

Ich hoffe das kann hilfreich sein.


1

Die Grundlage für Verstärkungslernmethoden besteht darin, jedem (Spiel-) Zustand (oder jeder Aktion) einen Wert zu geben, der irgendwie darstellt, wie gut dieser Zustand (oder diese Aktion) ist. Um diese Werte zu speichern, könnten wir etwas so Einfaches wie eine Tabelle / Hashmap verwenden, jedoch haben komplexe Spiele wie Schach oder Go so viele Zustände, dass sie nicht in den Speicher passen. Als Abhilfe betrachten wir die Hashmap als eine Funktion und versuchen, sie mit einem neuronalen Netzwerk (NN) zu approximieren. Glücklicherweise sind NNs universelle Approximatoren, was bedeutet, dass sie jede Funktion lernen können , einschließlich einer willkürlichen Zuordnung von einem Schachbrett zu einer Zahl.

Die Frage ist nun, wie ein Spielbrett dargestellt und dem neuronalen Netzwerk zugeführt werden kann. Im Fall von Tic-Tac-Toe können alle 5 aufgeführten Methoden als korrekt angesehen werden.

Theoretisch spielt es keine Rolle, welchen (w, b, v)Nummern zugewiesen wird (weiße, schwarze oder freie Kacheln). Wenn wir dem NN dies f(w, w, v, ...) = 1genügend oft beibringen , wird es diese Assoziation lernen, ob es sich um eine handelt (w, b, v) = (0, -1, 1)oder nicht (w, b, v) = (0, 0.5, 1).

In Ihren ersten drei Beispielen wird diese Methode verwendet. Ein kleiner Fehler besteht jedoch darin, dass nominellen Dingen Zahlen zugewiesen werden, dh Zahlen können bestellt werden, aber das können wir nicht wirklich sagen black > white > vacant. Ihre letzten beiden Beispiele versuchen, dies mithilfe von One-Hot-Vektoren zu beheben .

Wenn wir also für ein Spiel wie Schach Zahlen verwenden, um nur die Figuren darzustellen, könnte der NN fälschlicherweise zwei Figurentypen verwechseln (z. B.: Bauer ist 19, Königin ist 20und es glaubt, dass eine Königin versucht, Ihren König anzugreifen, während es gerecht ist ein Bauer) und eine schlechte Entscheidung treffen. Es wird jedoch erfahren, dass die Entscheidung schlecht war, und dem Staat und der Entscheidung auf lange Sicht den richtigen Wert zuweisen.

Ein letzter Hinweis: Die Auswahl der richtigen Zustandsdarstellung für ein Problem ist ein entscheidender Bestandteil des Verstärkungslernens (ähnlich wie bei der Auswahl der richtigen Merkmale für ein Klassifizierungsproblem), und manchmal hat man möglicherweise zu viel Angst, einen sehr hochdimensionalen Zustandsraum auszuwählen. Aber denken Sie daran, dass Schach kein einfaches Spiel ist, so dass ein großer Staatsraum möglicherweise nicht unangemessen ist. Auch als Referenz wurden Atari-Spiele mit einer Eingabedimension von trainiert 84*84*4.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.