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