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:
- 9 Eingangsneuronen, eine für jedes Quadrat. Ein
0
Hinweis auf einen freien Platz,-1
den Gegner und sich1
selbst. - 9 Eingangsneuronen, aber mit unterschiedlichen Werten wie
0
für den Gegner,0.5
kostenlos und1
für sich selbst? - Könnten Sie größere Werte verwenden? LIke
0
,1
und2
? - 27 Eingangsneuronen. Die ersten 3 sind Quadrat 1, die nächsten 3 sind Quadrat 2 usw. Jedes Neuron ist
1
oder0
. 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 haben1
, die anderen beiden werden ein haben0
. - 18 Eingangsneuronen. Das erste ist
1
für den X-Spieler, das zweite1
für den O-Spieler und beide0
fü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 -20
für eine gegnerische Königin und +20
fü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?
quelle
-1
,0
,1
vs0
,0.5
,1
wird durch die Aktivierungsfunktion im Einsatz bestimmt?-1
Gegner ist,0
frei und1
dein eigener? Wie in, könnte-1
frei sein,0
dein eigenes und1
wie dein Gegner arbeiten? Ich vermute, es würde, solange es immer konsistent ist?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.
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.
Ich hoffe das kann hilfreich sein.
quelle
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 diesf(w, w, v, ...) = 1
genü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 ist20
und 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
.quelle