Wie gehe ich mit ungültigen Zügen beim Lernen um?


20

Ich möchte eine KI erstellen, die Five-in-A-Row / Gomoku spielen kann. Wie ich bereits im Titel erwähnt habe, möchte ich dafür das verstärkende Lernen verwenden.

Ich verwende die Policy-Gradient- Methode, nämlich REINFORCE, mit Baseline. Für die Näherung von Wert und Richtlinienfunktion verwende ich ein neuronales Netz . Es hat Faltungsschichten und vollständig verbundene Schichten. Mit Ausnahme der Ausgabe werden alle Ebenen gemeinsam genutzt. Die Ausgabeebene der Richtlinie enthält die Ausgabeeinheit 8×8=64 (die Größe der Karte ) und den Softmax . Es ist also stochastisch. Was aber, wenn das Netzwerk eine sehr hohe Wahrscheinlichkeit für einen ungültigen Zug erzeugt? Ein ungültiger Zug liegt vor, wenn der Agent ein Feld mit einem "X" oder "O" überprüfen möchte. Ich denke, es kann in diesem Spielzustand stecken bleiben.

Könnten Sie eine Lösung für dieses Problem empfehlen?

Ich vermute, die Schauspieler-Kritik- Methode zu verwenden. Für einen ungültigen Zug sollten wir eine negative Belohnung geben und den Zug an den Gegner weitergeben.

Antworten:


10

Ignoriere einfach die ungültigen Züge.

Für die Erkundung ist es wahrscheinlich, dass Sie den Zug nicht nur mit der höchsten Wahrscheinlichkeit ausführen, sondern stattdessen Züge zufällig basierend auf der ausgegebenen Wahrscheinlichkeit auswählen. Wenn Sie nur illegale Züge bestrafen, behalten diese eine gewisse Wahrscheinlichkeit (wie gering sie auch sein mögen) und werden daher von Zeit zu Zeit (wie selten sie auch sein mögen) ausgeführt. So behalten Sie immer einen Agenten, der gelegentlich illegale Aktionen ausführt.

Für mich ist es sinnvoller, die Wahrscheinlichkeiten aller illegalen Züge auf Null zu setzen und den Ausgabevektor neu zu normalisieren, bevor Sie Ihren Zug wählen.


Vielen Dank. wahrscheinlich war mir nicht klar, aber ich habe den Zug zufällig anhand der ausgegebenen Wahrscheinlichkeiten ausgewählt. Ich werde Ihren Rat versuchen, um die Wahrscheinlichkeit der illegalen Bewegungen auf Null zu setzen und zu sehen, was passieren wird. Einen schönen Tag noch.
Molnár István

8

Normalerweise verwenden Softmax-Methoden in Policy-Gradienten-Methoden unter Verwendung der linearen Funktionsnäherung die folgende Formel, um die Wahrscheinlichkeit für die Auswahl der Aktion a zu berechnen . Hier werden die Gewichte θ , und die Funktionen ϕ a in Abhängigkeit von dem aktuellen Zustand ist s und eine Aktion aus der Menge von Aktionen A .

π(θ,a)=eθϕ(s,a)bAeθϕ(s,b)

Um illegale Aktionen zu eliminieren, würde man die Menge der Aktionen auf diejenigen beschränken, die legal waren, daher Legal(A) .

π(θ,a)=eθϕ(s,a)bLegal(A)eθϕ(s,b),aLegal(A)

Im Pseudocode kann die Formel so aussehen:

action_probs = Agent.getActionProbs(state)
legal_actions = filterLegalActions(state, action_probs)
best_legal_action = softmax(legal_actions)

Unabhängig davon, ob Sie eine lineare oder eine nichtlineare Funktionsnäherung (Ihr neuronales Netz) verwenden, sollten Sie bei der Berechnung Ihres Softmax nur die zulässigen Schritte verwenden. Diese Methode bedeutet, dass der Agent nur gültige Züge ausgibt. Dies ist gut, wenn Sie Ihr Spiel später ändern möchten, und dass der Agent den Wertunterschied zwischen der eingeschränkten Auswahl an Aktionen leichter erkennen kann. Es ist auch schneller, wenn die Anzahl der möglichen Aktionen abnimmt.


Sehr hilfreich. Vielen Dank für das Posten der Gleichungen und des Pseudocodes!
DukeZhou

1
Mathematik und Pseudocode stimmen hier nicht überein. Softmax über den legalen Bewegungswahrscheinlichkeiten passt die relativen Wahrscheinlichkeiten an. Beispiel: (0,3, 0,4, 0,2, 0,1), gefiltert mit entferntem ersten und dritten Element, würde mit Ihrer Formel (0,0, 0,8, 0,0, 0,2) lauten, würde aber mit dem Pseudocode (0,0, 0,57, 0,0, 0,42) lauten. Der Pseudocode muss die Protokolle vor der Berechnung der Aktionswahrscheinlichkeit aufnehmen.
Neil Slater

4
Wie berechnet man den Gradienten der gefilterten Version von Softmax? Das scheint notwendig zu sein, damit die Rückübertragung erfolgreich funktioniert, ja?
Brianberns

@brianberns Hast du eine Antwort gefunden? Es scheint so , dass der Fall für mich sein würde , aber irgendwie in meinem Spielzeug Beispiel ich nur die richtige Antwort bekommen , wenn die Log - Wahrscheinlichkeiten der unfilitered softmax mit ...
tryingtolearn

5

IMHO ist die Idee der ungültigen Bewegungen selbst ungültig. Stellen Sie sich vor, Sie platzieren ein "X" an den Koordinaten (9, 9). Sie könnten es als ungültigen Zug ansehen und es negativ belohnen. Absurd? Sicher!

Tatsächlich sind Ihre ungültigen Züge jedoch nur ein Relikt der Darstellung (die selbst einfach und in Ordnung ist). Die beste Behandlung von ihnen besteht darin, sie vollständig von jeder Berechnung auszuschließen.

Dies wird im Schach deutlicher:

  • In einer Positionsdarstellung können Sie den Zug in Betracht ziehen a1-a8, der nur dann zum Spiel gehört, wenn sich ein Turm oder eine Königin im Spiel befindet a1(und einige andere Bedingungen erfüllt sind).

  • In einer anderen Darstellung könnten Sie den Umzug in Betracht ziehen Qb2. Auch dies kann zum Spiel gehören oder nicht. Wenn der aktuelle Spieler keine Dame hat, dann hat er sicherlich keine.

Da die ungültigen Züge eher mit der Darstellung als mit dem Spiel zusammenhängen, sollten sie überhaupt nicht berücksichtigt werden.


1
Großartiger Punkt. In [M] -Spielen, die auf Sudoku gespielt werden, machen die Einschränkungen viele Positionen (Koordinaten + Wert) nach der ersten Platzierung ungültig. Es gibt keinen Wert diese illegalen Positionen vom Standpunkt der Platzierung bei der Prüfung, sondern eine wichtige strategische Lage ist zu erkennen , welche Placements Wert der verbleibenden, nicht gespielten Positionen minimieren. (Wenn ich hier eine 8 platziere, wird mein Gegner daran gehindert, eine 8 in dieser Zeile, Spalte oder Region zu platzieren. Im Wesentlichen: "Wie viele strategische Positionen werden durch diese Platzierung vom Spielbrett entfernt?")
DukeZhou

5

Ich hatte kürzlich ein ähnliches Problem mit Minesweeper.

Die Art und Weise, wie ich es gelöst habe, war, die illegalen / ungültigen Züge vollständig zu ignorieren.

  1. Verwenden Sie das Q-Netzwerk, um die Q-Werte für alle Ihre Aktionen (gültig und ungültig) vorherzusagen.
  2. Verarbeiten Sie die Q-Werte vorab, indem Sie alle ungültigen Züge auf einen Q-Wert von Null / negative Zahl setzen (abhängig von Ihrem Szenario).
  3. Verwenden Sie eine Richtlinie Ihrer Wahl, um eine Aktion aus den verfeinerten Q-Werten (dh gierig oder Boltzmann) auszuwählen.
  4. Führen Sie die ausgewählte Aktion aus und setzen Sie Ihre DQN-Logik fort

Hoffe das hilft.


1
Das Einzige, was ich hinzufügen möchte, ist, dass Sie daran denken müssen, ein Backprop auf dem DQN durchzuführen, wenn Sie die Q-Werte für illegale (s, a) Paare auf einen großen negativen Wert setzen, damit es trainiert ist, diesen Zustand nicht auszuwählen Paar beim nächsten Mal.
SN

Ich frage mich jedoch, wie sich die Einstellung von Q-Zielwerten mit großen Werten auf die Kontinuität oder Form der Verlust- / Fehlerfunktion auswirkt (wodurch die Gradientensuche beeinflusst wird). Was war deine Erfahrung?
SN

1
@ SN Ich verstehe deinen Standpunkt. Die Idee ist , die Aktion mit dem holen höchsten Q-Wert , das ist nicht eine ungültige Aktion . Als Nächstes führen Sie diese Aktion aus und verwenden sie in Ihrer Aktualisierungsregel (dh trainieren Sie Ihren DQN, um diese Aktion auf lange Sicht zu bevorzugen). Dadurch werden die zukünftigen Q-Werte der ausgewählten Aktion höher und somit günstiger. Der Q-Wert für illegale Aktionen wird jedoch NICHT gesenkt, was keine Rolle spielt, da sie immer herausgefiltert werden (nicht berücksichtigt). Lassen Sie es mich wissen, wenn Sie möchten, dass ich mit einem Beispiel näher darauf eingehen kann. :)
Sanavesa

1
@Sanavesa macht sicherlich Sinn, Sie verlassen sich im Wesentlichen darauf, dass der DQN irgendwann lernt, wie die richtigen Entscheidungen durch die Schule der harten Schläge aussehen. Aber in Situationen, in denen es nur eine oder wenige legale Möglichkeiten gibt, werden Sie nur sehr langsam lernen. Der Ansatz, den ich vorschlage, besteht darin, Domäne K in das Problem einzubeziehen, um dieses Lernen zu beschleunigen. Es ist auch das, was ich dachte, dass Sie in Ihrem ursprünglichen Beitrag geschrieben haben: "Setzen ungültiger Züge auf einen Q-Wert von Null / negative Zahl"
SN

1
@ SNPrecisely! Beide Ansätze haben ihre Vorzüge. Hängt von der Anwendung ab, ob es einfacher ist, die rechtlichen Schritte zu lernen oder sie einfach zu ignorieren. Bei großen komplexen Anwendungen ist es für den Agenten viel schneller, die ungültigen Bewegungen zu ignorieren, aber zitieren Sie mich nicht dazu.
Sanavesa
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.