Ich habe mit einem Algorithmus gespielt, der lernt, wie man Tictactoe spielt. Der grundlegende Pseudocode lautet:
repeat many thousand times {
repeat until game is over {
if(board layout is unknown or exploring) {
move randomly
} else {
move in location which historically gives highest reward
}
}
for each step in the game {
determine board layout for current step
if(board layout is unknown) {
add board layout to memory
}
update reward for board layout based on game outcome
}
}
now play a human and win :-)
Exploration: Am Anfang erforscht der Algorithmus aggressiv und dies reduziert sich linear. Nach etwa tausend Spielen wird nur in 10% der Züge erforscht. Alle anderen Bewegungen basieren auf der Ausnutzung früherer Belohnungen.
Belohnungen: Wenn das Spiel zu einem Sieg geführt hat, vergeben Sie 10 Punkte. Wenn das Spiel zu einem Unentschieden führte, 0 Punkte, sonst -5 Punkte. Tatsächlich können diese Belohnungen "abgestimmt" werden, sodass, wenn das Spiel kürzer war und gewonnen wurde, mehr Punkte vergeben werden oder wenn es länger war, weniger Punkte vergeben werden. Auf diese Weise gewinnt der Algorithmus lieber schnell. Das bedeutet, dass es lernt, so schnell wie möglich zu gewinnen, anstatt später zu gewinnen. Das ist wichtig, damit es nicht verpasst, sofort zu gewinnen - wenn es einen solchen Zug verpasst, würde der Gegner wahrscheinlich a) dorthin ziehen, um zu vermeiden, dass die KI das nächste Mal gewinnt, und b) den Algorithmus für dumm halten, weil er einen "offensichtlichen" verpasst hat " Sieg.
Dieser Algorithmus lernt tatsächlich, also kann ich ihn als Maching-Lernalgorithmus klassifizieren.
Ich denke, aber ich bin nicht sicher, ob es sich um einen verstärkten Lernalgorithmus handelt. Laut https://www.cse.unsw.edu.au/~cs9417ml/RL1/tdlearning.html handelt es sich jedoch nicht um zeitliches Differenzlernen, da die Belohnungen erst am Ende geschätzt werden und geschätzt werden sollten die Belohnung, wie es geht. Das könnte bedeuten, dass es sich nicht um verstärktes Lernen handelt.
Frage 1: Kann ich erfolgreich argumentieren, dass ich die Belohnung basierend auf der Geschichte schätze und trotzdem behaupte, dass der Algorithmus verstärktes Lernen oder sogar Q-Learning ist?
Frage 2: Wenn ich die Belohnungssuche, die auf dem Board-Layout basiert, durch ein neuronales Netzwerk ersetze, in dem das Board-Layout die Eingabe und die Belohnung die Ausgabe ist, könnte der Algorithmus als tiefgreifendes Verstärkungslernen angesehen werden?
Frage 3: Ich würde nicht glauben, dass ich entweder eine Lernrate oder einen Rabattfaktor habe. Ist das wichtig?
Mir ist aufgefallen, dass der Algorithmus ziemlich nutzlos ist, wenn ich ihn nicht mit mindestens jeder Bewegung trainiere, die ein Gegner versucht. In gewisser Weise fühlt es sich so an, als würde man brutale Gewalt anwenden, anstatt wirklich "zu lernen". Dies lässt mich fragen, ob maschinelles Lernen Tictactoe wirklich lernt oder nicht. Ich bin damit einverstanden, dass die Verwendung eines neuronalen Netzwerks zum Erlernen der Bilderkennung als Lernen eingestuft werden kann, da es, wenn es ein unbekanntes Bild sieht, seine Klassifizierung angeben kann. Aber das ist ziemlich nutzlos für Spiele wie Tictactoe, bei denen ähnlich aussehende Board-Layouts völlig unabhängig sind (eines kann zu einem Sieg führen, das andere kann zu einem Verlust führen). Damit...
Frage 4: Können Tictactoe-Algorithmen als echtes Lernen und nicht nur als Brute Force eingestuft werden?
Update: in Bezug auf Belohnungen ... Wenn der Algorithmus entscheidet, wohin er gehen soll, berechnet er die Belohnung für jede Position wie folgt:
var total = winRewards + drawRewards + lossRewards;
move.reward = (100*(winRewards/total)) + (10*(drawRewards/total)) + (-1*(lossRewards/total));
Ich dividiere durch die Gesamtzahl der Punkte (für jeden Zug), weil es sonst zu lernen scheint, dass ein Ort GROSS ist und anderen keine Chance gibt. Auf diese Weise berechnen wir die Gewinnquote unabhängig davon, wie oft sie gespielt wurde. Es ist im Vergleich zu den anderen normalisiert.
Der Code ist hier verfügbar: https://github.com/maxant/tictactoe/blob/master/ai.js
UPDATE 2: Ich habe seitdem herausgefunden, dass dieser Algorithmus nicht als Brute-Force-Algorithmus eingestuft werden kann, da er nicht so viele Spiele lernt, bevor er Experte wird. Details hier: http://blog.maxant.co.uk/pebble/2018/04/11/1523468336936.html
quelle
Ein großes Lob dafür, dass Sie einen funktionierenden Tic-Tac-Toe-Algorithmus von Grund auf neu entwickelt haben!
Das Wichtigste zuerst, dies ist definitiv kein Q-Learning.
Ich denke jedoch, dass es als Reinforcement Learning klassifiziert wird. Sie haben diese Schlüsselkomponenten von RL implementiert:
Ein Status (die aktuelle Karte), der bei jedem Schritt als Eingabe verwendet wird.
Eine Aktion (gewünschte Anordnung der nächsten Karte), die als Ausgabe verwendet wird. Wenn die Aktion effektiv darin besteht, den nächsten Status direkt auszuwählen, wird dies manchmal als Nachzustandsdarstellung bezeichnet. Es wird häufig in RL für deterministische Spiele verwendet.
Von der Umgebung generierte Belohnungen, bei denen das Ziel des Agenten darin besteht, die erwartete Belohnung zu maximieren.
Ein Algorithmus, der Daten über Zustände, Aktionen und Belohnungen erfasst und lernt, die erwartete Belohnung zu optimieren, indem er Erfahrungen in der Umgebung sammelt.
Ihr Algorithmus ist der Monte-Carlo-Steuerung , einem Standard-RL-Ansatz, IMO am nächsten .
Einer der großen Vorteile von Q Learning besteht darin, dass es auch während der Erkundung eine optimale Richtlinie lernt. Dies wird als Off-Policy- Lernen bezeichnet, während Ihr Algorithmus On-Policy ist, dh er lernt die Werte seines aktuellen Verhaltens kennen. Aus diesem Grund müssen Sie die Explorationsrate im Laufe der Zeit reduzieren - und das kann ein Problem sein, da der Zeitplan für die Explorationsrate ein Hyperparameter Ihres Lernalgorithmus ist, der möglicherweise sorgfältig angepasst werden muss.
Ja, ich nehme an, es wäre technisch. Es ist jedoch unwahrscheinlich, dass sich nur durch Hinzufügen eines neuronalen Netzwerks zur Schätzung von Aktionswerten gut auf komplexere Probleme skalieren lässt, es sei denn, Sie fügen einige der komplexeren Elemente hinzu, z. B. die Verwendung von Lernen mit zeitlichen Unterschieden oder Richtliniengradienten.
Ein Abzinsungsfaktor ist für episodische Probleme nicht wichtig. Dies ist nur bei kontinuierlichen Problemen erforderlich, bei denen Sie einen Zeithorizont benötigen, da sonst die vorhergesagte Belohnung unendlich wäre (obwohl Sie den Rabattmechanismus in der Praxis auch durch einen durchschnittlichen Belohnungsansatz ersetzen könnten).
Die Lernrate ist eine wichtige Lücke. Sie erklären nicht, was Sie an seiner Stelle haben. Sie haben gesagt
update reward for board layout based on game outcome
- dieser Aktualisierungsschritt enthält normalerweise die Lernrate. Für Tic-Tac-Toe und Q-Learning können Sie die Lernrate jedoch auf 1,0 einstellen, was meiner Meinung nach Ihrem Ansatz entspricht und funktioniert. Ich habe Beispielcode geschrieben, der genau das tut - siehe diese Zeile, in der die Lernrate auf 1,0 gesetzt wird . Komplexere Szenarien, insbesondere in nicht deterministischen Umgebungen, würden jedoch mit einer so hohen Lernrate schlecht lernen.Ihr Algorithmus lernt definitiv etwas aus Erfahrung, wenn auch ineffizient im Vergleich zu einem Menschen. Viele der grundlegenderen RL-Algorithmen weisen jedoch ähnliche Probleme auf und müssen häufig jeden möglichen Status eines Systems mehrmals anzeigen, bevor sie zu einer Antwort konvergieren.
Ich würde sagen, dass eine umfassende Baumsuche von der aktuellen Position während des Spiels "Brute Force" war. In einem einfachen Spiel wie Tictactoe ist dies wahrscheinlich effizienter als RL. Da Spiele jedoch immer ausgefeilter werden, wird der Ansatz des maschinellen Lernens mit der Suche konkurrenzfähig. Oft werden sowohl RL als auch irgendeine Form der Suche zusammen verwendet.
quelle