Reinforcement Learning ist eine Methode des Machine Learning, mit der komplexe Aufgaben selbstständig gelöst werden können.
Erst kürzlich machte diese Algorithmusfamilie im E-Sport von sich reden, als AlphaStar veröffentlicht wurde, ein Algorithmus, der entwickelt wurde, um die besten Spieler der Welt in StarCarft herauszufordern. Diese Algorithmen haben ein großes Potenzial, erweisen sich aber manchmal als sehr zeitaufwendig in der Erstellung und Parametrisierung. Dieser Artikel soll dir helfen, zu verstehen, was Q-Learning ist und wie du Zeit bei der Implementierung dieser Art von Lösung sparen kannst.
Definitionen
Was genau ist Reinforcement Learning?
Reinforcement Learning ist eine Methode des maschinellen Lernens, die es einem Agenten (virtuelle Entität: Roboter, Programm usw.), der in eine interaktive Umgebung gesetzt wird (seine Aktionen verändern den Zustand der Umgebung), ermöglichen soll, Aktionen zu wählen, die quantitative Belohnungen maximieren. Der Agent probiert aus und verbessert seine Handlungsstrategie auf der Grundlage der von der Umgebung gelieferten Belohnungen.
Was ist Q-Learning?
Es gibt viele verschiedene Reinforcement-Learning-Algorithmen, die in mehrere Unterfamilien kategorisiert werden. Q-Learning ist sowohl relativ einfach und ermöglicht gleichzeitig das Verständnis von Lernmechanismen, die vielen anderen Modellen gemeinsam sind.
Zur einleitenden Veranschaulichung: Ein Q-Learning-Algorithmus arbeitet, um ein grundlegendes Problem zu lösen. Beim Labyrinth-Spiel z. B. besteht das Ziel des Spiels darin, dem Roboter beizubringen, das Labyrinth so schnell wie möglich zu verlassen, während er zufällig auf einem der weißen Felder platziert wird. Um dies zu erreichen, gibt es drei zentrale Schritte im Lernprozess:
- Kenntnis: Definition einer Aktien-Wert-Funktion Q ;
- Wissen erweitern: Q-Funktion aktualisieren ;
- Handeln: eine Strategie für PI-Aktionen beschließen
Q-Learning ist also ein verstärkender Lernalgorithmus, der versucht, die beste Handlung unter Berücksichtigung des aktuellen Zustands zu finden. Es wird als nicht-politisch betrachtet, weil die Q-Learning-Funktion Aktionen lernt, die außerhalb der aktuellen Politik liegen, wie z. B. zufällige Aktionen zu ergreifen, und daher keine Politik erforderlich ist. Genauer gesagt versucht Q-Learning, eine Politik zu erlernen, die die Gesamtbelohnung maximiert.
Das „Q“ in Q-Learning steht für Qualität. In diesem Fall steht Qualität für den Nutzen einer bestimmten Handlung, um eine zukünftige Belohnung zu erhalten.
Q-Learning: Konkrete Umsetzung
Erstellen einer Q-Tabelle
Wenn der Lernprozess abgeschlossen ist, erstellen wir eine sogenannte q-Tabelle oder -Matrix, die der Form [Zustand, Aktion] folgt, und initialisieren unsere Werte auf null. Wir aktualisieren und speichern unsere q-Werte dann nach jeder Episode. Diese Wertetabelle wird zu einer Referenztabelle für unseren Agenten, der anhand der Werte in dieser Matrix die beste Aktion auswählt.
import numpy as np
# Initialize q-table values to 0
Q = np.zeros((state_size, action_size))
Q-Learning und Updates
Der nächste Schritt besteht einfach darin, dass der Agent mit der Umgebung interagiert und Aktualisierungen der Zustand-Aktion-Paare in unserem Array Q[state, action] durchführt.
- Handeln: Untersuchen oder verwerten
Ein Agent interagiert mit der Umgebung auf zwei Arten. Die erste besteht darin, die Q-Tabelle als Referenz zu verwenden und alle möglichen Aktionen für einen bestimmten Zustand zu visualisieren. Der Agent wählt dann die Aktion aus, die auf dem maximalen Wert dieser Aktionen basiert. Dies wird als Exploitation bezeichnet, da wir die uns zur Verfügung stehenden Informationen nutzen, um eine Entscheidung zu treffen.
Der zweite Weg besteht darin, nach dem Zufallsprinzip zu handeln. Dies wird als Exploration bezeichnet. Anstatt Handlungen nach der maximalen zukünftigen Belohnung auszuwählen, wählen wir eine Handlung zufällig aus. Zufällig zu handeln ist wichtig, weil es dem Agenten erlaubt, zu erforschen und neue Zustände zu entdecken, die sonst während des Exploitationsprozesses möglicherweise nicht ausgewählt werden.
Du kannst das Erkunden / Abbauen ausbalancieren, indem du epsilon (ε) verwendest und den Wert für die Häufigkeit, mit der du erkunden oder abbauen möchtest, festlegst. Hier ist ein ungefährer Code, der davon abhängt, wie der Status und der Aktionsraum eingestellt sind.
import random
# Set the percent you want to explore
epsilon = 0.2
if random.uniform(0, 1) < epsilon:
"""
Explore: select a random action
"""
else:
"""
Exploit: select the action with max value (future reward)
"""
- Aktualisierung der q-Tabelle
Aktualisierungen finden nach jedem Schritt oder jeder Aktion statt und enden, wenn eine Episode abgeschlossen ist. In diesem Fall bedeutet „beendet“, dass der Agent einen Endzustand erreicht hat. Ein Endzustand kann z. B. auf einer Bezahlseite landen oder ein gewünschtes Ziel erreichen. Mit genügend Exploration (Schritte und Episoden) wird der Agent in der Lage sein, zu konvergieren und die optimalen Werte von q oder q-Star (Q∗) zu lernen.
Hier sind die drei grundlegenden Schritte:
- Der Agent beginnt in einem Zustand (s1), nimmt eine Aktion (a1) vor und erhält eine Belohnung (r1).
- Der Agent wählt die Aktion, indem er sich auf die Q-Tabelle mit dem höchsten Wert (max) ODER zufällig (epsilon, ε) bezieht.
- Aktualisierung der Q-Werte
Hier ist die grundlegende Update-Regel für Q-Learning :
# Update q values
Q[state, action] = Q[state, action] + lr * (reward + gamma * np.max(Q[new_state, :]) — Q[state, action])
In der obigen Aktualisierung gibt es einige Variablen, die wir noch nicht erwähnt haben. Was hier passiert, ist, dass wir unsere q-Werte entsprechend der Differenz zwischen den neuen aktualisierten und den alten Werten anpassen. Wir aktualisieren die neuen Werte mithilfe des Gamma und passen unsere Schrittgröße mithilfe der Lernrate (lr) an.
Einige Referenzen
- Lernrate: lr, oft auch als Alpha bezeichnet, kann als der Grad der Akzeptanz des neuen Wertes im Vergleich zum alten Wert definiert werden. Oben nehmen wir die Differenz zwischen dem neuen und dem alten Wert und multiplizieren diesen Wert mit der Lernrate. Dieser Wert wird dann zu unserem vorherigen q-Wert addiert, wodurch er sich in die Richtung unserer letzten Aktualisierung bewegt.
- Gamma: Gamma oder γ ist ein Aktualisierungsfaktor. Er wird verwendet, um die sofortige und die zukünftige Belohnung ins Gleichgewicht zu bringen. In unserer obigen Aktualisierungsregel kannst du sehen, dass wir den Abschlag auf die zukünftige Belohnung anwenden. Im Allgemeinen kann dieser Wert zwischen 0,8 und 0,99 variieren.
- Belohnung: Eine Belohnung (reward) ist der Wert, den du erhältst, nachdem du eine bestimmte Aktion in einem bestimmten Zustand ausgeführt hast. Eine Belohnung kann zu jedem gegebenen Zeitschritt oder nur zum Terminalzeitschritt auftreten.
- Max: np.max() verwendet die numpy-Bibliothek und nimmt das Maximum der zukünftigen Belohnung und wendet es auf die Belohnung des aktuellen Zustands an. Dies bewirkt, dass die aktuelle Handlung durch die mögliche zukünftige Belohnung beeinflusst wird. Tatsächlich sind wir durch Q-Learning in der Lage, die zukünftige Belohnung den aktuellen Handlungen zuzuordnen, um dem Agenten zu helfen, die rentabelste Handlung in jedem gegebenen Zustand auszuwählen.