🚀 Bist Du bereit für eine Karriere im Bereich Data? Finde es in nur 60 Sekunden heraus!

Q-learning – Machine Learning mit verstärkendem Lernen

-
4
 Minuten Lesezeit
-

Q-learning: 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 StarCraft 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 ist Reinforcement Learning?

Reinforcement Learning ist eine Methode des maschinellen Lernens, deren Ziel es ist, einen Agenten (virtuelle Entität: Roboter, Programm usw.), der in eine interaktive Umgebung gesetzt wird (seine Handlungen verändern den Zustand der Umgebung), in die Lage zu versetzen, Handlungen auszuwählen, die die quantitativen 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 relativ einfach und ermöglicht es gleichzeitig, die Lernmechanismen zu verstehen, 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:

  • Wissen: eine Aktien-Q-Wert-Funktion definieren ;
  • Wissen festigen: die Q -Funktion aktualisieren ;
  • Handeln: eine PI-Aktionsstrategie annehmen.

Somit ist Q-Learning ein verstärkender Lernalgorithmus, der versucht, die beste Handlung unter Berücksichtigung des aktuellen Zustands zu finden. Er wird als nicht-politisch betrachtet, weil die Q-Learning-Funktion Handlungen lernt, die außerhalb der aktuellen Politik liegen, wie z. B. zufällige Handlungen 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. Anschließend aktualisieren und speichern wir unsere q-Werte 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-Aktions-Paare in unserem Array Q[state, action] durchführt.

Handeln: Erforschen oder Nutzen

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.

Die zweite Möglichkeit 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älliges 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 / Ausbeuten ausbalancieren, indem du epsilon (ε) verwendest und den Wert für die Häufigkeit, mit der du erkunden oder ausbeuten 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)    
    """

				
			

Q-Tabelle aktualisieren

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:

  1. Der Agent beginnt in einem Zustand (s1), nimmt eine Aktion (a1) vor und erhält eine Belohnung (r1).
  2. Der Agent wählt die Aktion unter Bezugnahme auf die Q-Tabelle mit dem höchsten Wert (max)
  3. ODER zufällig (epsilon, ε) aus.
    Aktualisierung der q-Werte

Hier ist die grundlegende Aktualisierungsregel 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 Werten 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 unmittelbare und die zukünftige Belohnung auszugleichen. 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: Die 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 hat den Effekt, 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.

DataScientest News

Melde Dich jetzt für unseren Newsletter an, um unsere Guides, Tutorials und die neuesten Entwicklungen im Bereich Data Science direkt per E-Mail zu erhalten.

Möchtest Du informiert bleiben?

Schreib uns Deine E-Mail-Adresse, damit wir Dir die neuesten Artikel zum Zeitpunkt der Veröffentlichung zusenden können!
icon newsletter

DataNews

Starte Deine Karriere im Bereich Data: Erhalte regelmäßig Insiderwissen und wertvolle Karrieretipps in Deinem Posteingang.