Direkt zum Hauptbereich

Einfaches Reinforcement Learning: Q-learning

Einer meiner Lieblingsalgorithmen, den ich während eines Reinforcement-Learning-Kurses gelernt habe, war das q-learning. Wahrscheinlich, weil er für mich am einfachsten zu verstehen und zu programmieren war, aber auch, weil er mir sinnvoll erschien.

In diesem kurzen Beitrag werde ich q-learning besprechen und den grundlegenden Hintergrund zum Verständnis des Algorithmus vermitteln.

Was ist q-learning?

Q-Learning ist ein richtlinienunabhängiger Reinforcement-Learning-Algorithmus, der versucht, die beste Aktion für den aktuellen Zustand zu finden. Es wird als Off-Policy betrachtet, weil die q-learning Funktion von Aktionen lernt, die außerhalb der aktuellen Policy liegen, wie z. B. das Ausführen von zufälligen Aktionen, und daher keine Policy benötigt wird.

 

Was ist 'Q'?

Das "q" in q-learning steht für Qualität. Qualität steht in diesem Fall dafür, wie nützlich eine bestimmte Aktion ist, um eine zukünftige Belohnung zu erhalten.


Erstellen einer q-Tabelle

Beim q-learning erstellen wir eine so genannte q-Tabelle oder Matrix, die der Form [Zustand, Aktion] folgt, und wir initialisieren unsere Werte auf Null. Wir aktualisieren und speichern dann unsere q-Werte nach einer Episode. Diese q-Tabelle wird zu einer Referenztabelle für unseren Agenten, um die beste Aktion basierend auf dem q-Wert auszuwählen.


import numpy as np # Initialisieren der q-Tabellenwerte auf 0
Q = np.zeros((state_size, action_size))

 

Q-Lernen und Aktualisierungen vornehmen

Der nächste Schritt besteht einfach darin, dass der Agent mit der Umgebung interagiert und Aktualisierungen an den Zustands-Aktions-Paaren in unserer Q-Tabelle Q[state, action] vornimmt.

 

Eine Aktion ausführen: Erkunden oder Ausnutzen

 

Ein Agent interagiert mit der Umgebung auf eine von 2 Arten. Die erste besteht darin, die q-Tabelle als Referenz zu verwenden und alle möglichen Aktionen für einen bestimmten Zustand zu betrachten. Der Agent wählt dann die Aktion aus, die auf dem Maximalwert dieser Aktionen basiert.

Dies wird als Exploiting bezeichnet, da wir die uns zur Verfügung stehenden Informationen nutzen, um eine Entscheidung zu treffen.

 

Die zweite Art zu handeln ist, zufällig zu agieren. Dies wird als Erforschen bezeichnet. Anstatt Aktionen auf der Grundlage der maximalen zukünftigen Belohnung auszuwählen, wählen wir eine Aktion nach dem Zufallsprinzip aus. Das Handeln nach dem Zufallsprinzip ist wichtig, weil es dem Agenten erlaubt, zu erforschen und neue Zustände zu entdecken, die sonst während des Ausnutzungsprozesses nicht ausgewählt werden könnten. 

Sie können ein Gleichgewicht zwischen Exploration und Exploitation herstellen, indem Sie epsilon (ε) verwenden und den Wert festlegen, wie oft Sie explorieren bzw. exploiten möchten. Hier ist ein grober Code, der davon abhängt, wie der Zustands- und Aktionsraum eingerichtet ist.

 

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)
 
    """

Aktualisieren der q-Tabelle 

 

Die Aktualisierungen erfolgen nach jedem Schritt oder jeder Aktion und enden, wenn eine Episode erledigt ist. Erledigt bedeutet in diesem Fall das Erreichen eines Endpunkts durch den Agenten. Ein Endzustand kann z. B. alles sein, wie die Landung auf einer Kassenseite, das Erreichen des Endes eines Spiels, das Erreichen eines gewünschten Ziels, usw. Der Agent wird nach einer einzigen Episode nicht viel lernen, aber mit genügend Erkundung (Schritte und Episoden) wird er schließlich konvergieren und die optimalen q-Werte oder q-Stern (Q∗) lernen.

 

Hier sind die 3 grundlegenden Schritte:


1. Agent startet in einem Zustand (s1), 

    führt eine Aktion aus (a1) und erhält eine Belohnung (r1)

2. Der Agent wählt die Aktion durch Referenzierung der Q-Tabelle 

    mit dem höchsten Wert (max) ODER durch Zufall (epsilon, ε)

3. Q-Werte aktualisieren


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 ein paar Variablen, die wir noch nicht erwähnt haben. Was hier passiert, ist, dass wir unsere q-Werte basierend auf der Differenz zwischen den diskontierten neuen Werten und den alten Werten anpassen. Wir diskontieren die neuen Werte mit Gamma und passen unsere Schrittgröße mit der Lernrate (lr) an. Nachfolgend finden Sie einige Referenzen.

 

Lernrate: lr oder Lernrate, oft auch als Alpha oder α bezeichnet, kann einfach definiert werden als die Akzeptanz des neuen Wertes gegenüber dem alten Wert. Oben nehmen wir die Differenz zwischen neuem und altem Wert und multiplizieren diesen Wert dann mit der Lernrate. Dieser Wert wird dann zu unserem vorherigen q-Wert addiert, was ihn im Wesentlichen in die Richtung unserer letzten Aktualisierung verschiebt.

 

Gamma: Gamma oder γ ist ein Diskontierungsfaktor. Er wird verwendet, um sofortige und zukünftige Belohnungen auszugleichen. Anhand unserer obigen Aktualisierungsregel können Sie sehen, dass wir den Abschlag auf die zukünftige Belohnung anwenden. Normalerweise kann dieser Wert zwischen 0,8 und 0,99 liegen.

 

Reward: Reward ist der Wert, den man nach Abschluss einer bestimmten Aktion in einem bestimmten Zustand erhält. Ein Reward kann in jedem beliebigen Zeitschritt oder nur im Endzeitschritt erfolgen.

 

Max: np.max() verwendet die Numpy-Bibliothek und nimmt das Maximum der zukünftigen Belohnung und wendet es auf die Belohnung für den aktuellen Zustand an. Dadurch wird die aktuelle Aktion durch die mögliche zukünftige Belohnung beeinflusst. Das ist die Schönheit des Q-Learnings. Wir ordnen die zukünftige Belohnung den aktuellen Aktionen zu, um dem Agenten zu helfen, die Aktion mit dem höchsten Ertrag in einem bestimmten Zustand auszuwählen.


Fazit

Nun, das war's, kurz und knapp (hoffentlich). Wir haben besprochen, dass q-learning ein Off-Policy Reinforcement Learning Algorithmus ist. Wir zeigen die grundlegende Update-Regel für q-learning mit Hilfe einer einfachen Python-Syntax und wir haben die erforderlichen Eingaben für den Algorithmus besprochen. Wir haben gelernt, dass q-learning zukünftige Belohnungen verwendet, um die aktuelle Aktion in einem gegebenen Zustand zu beeinflussen und somit dem Agenten hilft, die besten Aktionen auszuwählen, die die Gesamtbelohnung maximieren.

 

Es gibt noch viel mehr über q-learning zu lernen, aber ich hoffe, dass dies genug ist, um Ihnen den Einstieg zu erleichtern und Sie daran zu interessieren, mehr zu lernen. Ich habe unten einige Ressourcen hinzugefügt, die ich beim Lernen über Q-Learning hilfreich fand. Viel Spaß!

Kommentare

Beliebte Posts aus diesem Blog

Autoencoder verstehen (Teil I)

Warum sollten wir Autoencoder verwenden und was sind die Vorteile von Autoencodern . Wenn man sich andere Beschreibungen und Erklärungen anschaut, was Autoencoder sind, fängt man bald an, durcheinander zu kommen , warum Autoencoder so nützlich sind und warum sie versuchen, von den Eingabedaten zur Ausgabe mit minimalem Verlust zu reproduzieren.