Q Learning in Python: Was ist das, Definitionen [Codierungsbeispiele]
Veröffentlicht: 2020-03-26Reinforcement Learning ist, wenn ein Lernagent durch ständige Interaktionen lernt, sich entsprechend seiner Umgebung optimal zu verhalten. Der Agent durchläuft verschiedene Situationen, die auch als Zustände bezeichnet werden. Wie Sie sich denken können, hat Reinforcement Learning viele Anwendungen in unserer Welt. Erfahren Sie mehr, wenn Sie mehr über Data-Science-Algorithmen erfahren möchten.
Außerdem hat es viele Algorithmen, zu den beliebtesten gehört Q Learning . In diesem Artikel werden wir diskutieren, was dieser Algorithmus ist und wie er funktioniert.
Also, ohne weitere Umschweife, fangen wir an.
Inhaltsverzeichnis
Was ist Q-Learning?
Q-Learning ist ein Reinforcement-Learning-Algorithmus und konzentriert sich darauf, die beste Vorgehensweise für eine bestimmte Situation zu finden. Es ist außerhalb der Richtlinie, da die Aktionen, aus denen die Q-Lernfunktion lernt, außerhalb der vorhandenen Richtlinie liegen, sodass keine erforderlich ist. Es konzentriert sich auf das Erlernen einer Richtlinie, die seine Gesamtbelohnung erhöht. Es ist eine einfache Form des bestärkenden Lernens, das Aktionswerte (oder Q-Werte) verwendet, um das Verhalten des lernenden Agenten zu verbessern.
Q-Learning ist einer der beliebtesten Algorithmen im Reinforcement Learning, da es mühelos zu verstehen und zu implementieren ist. Das „Q“ beim Q-Lernen steht für Qualität. Wie bereits erwähnt, konzentriert sich das Q-Lernen darauf, die beste Aktion für eine bestimmte Situation zu finden. Und die Qualität zeigt, wie nützlich eine bestimmte Aktion ist und welche Belohnung Sie damit erreichen können.
Wichtige Definitionen
Bevor wir mit der Diskussion beginnen, wie es funktioniert, sollten wir uns zunächst einige grundlegende Konzepte des q-Lernens ansehen. Lass uns anfangen.
Q-Werte
Q-Werte werden auch als Aktionswerte bezeichnet. Sie werden durch Q(S, A) dargestellt und geben Ihnen eine Schätzung, wie gut die Aktion A im Zustand S zu ergreifen ist. Das Modell berechnet diese Schätzung iterativ unter Verwendung der Zeitdifferenzaktualisierungsregel, die wir später besprechen in diesem Abschnitt.
Episoden und Belohnungen
Ein Agent beginnt bei einem Startzustand, durchläuft mehrere Übergänge und bewegt sich dann entsprechend seiner Aktionen und seiner Umgebung von seinem aktuellen Zustand zum nächsten. Immer wenn der Agent handelt, erhält er eine Belohnung. Und wenn keine Übergänge möglich sind, ist es der Abschluss der Episode.
TD-Update (Zeitlicher Unterschied)
Hier ist die TD-Update- oder Zeitunterschiedsregel:
Q(S,A) Q(S,A) + (R + Q(S',A')-Q(S,A))
Hier stellt S den aktuellen Zustand des Agenten dar, während S' den nächsten Zustand darstellt. A repräsentiert die aktuelle Aktion, A' repräsentiert die folgende beste Aktion gemäß der Q-Wert-Schätzung, R zeigt die aktuelle Belohnung gemäß der aktuellen Aktion, steht für den Diskontierungsfaktor und zeigt die Schrittlänge.
Lesen Sie auch: Voraussetzung für Data Science. Wie verändert es sich im Laufe der Zeit?
Beispiel für Q Learning Python
Der beste Weg, Q Learning Python zu verstehen, ist, sich ein Beispiel anzusehen. In diesem Beispiel nutzen wir die Gym-Umgebung von OpenAI und trainieren unser Modell damit. Zunächst müssen Sie die Umgebung installieren. Sie können dies mit dem folgenden Befehl tun:
Pip installieren Fitnessstudio
Jetzt importieren wir die Bibliotheken, die wir für dieses Beispiel benötigen:
Fitnessstudio importieren
itertools importieren
matplotlib importieren
matplotlib.style importieren
importiere numpy als np
pandas als pd importieren
System importieren
aus Sammlungen import defaultdict
aus windy_gridworld import WindyGridworldEnv
Plotten importieren
matplotlib.style.use('ggplot')
Ohne die erforderlichen Bibliotheken könnten Sie diese Vorgänge nicht erfolgreich ausführen. Nachdem wir die Bibliotheken importiert haben, erstellen wir die Umgebung:
env = WindyGridworldEnv()
Jetzt erstellen wir die Richtlinie -greedy:
def createEpsilonGreedyPolicy(Q, epsilon, num_actions):
"""
Erstellt eine epsilon-gierige Richtlinie basierend
auf einer gegebenen Q-Funktion und Epsilon.
Gibt eine Funktion zurück, die den Zustand annimmt
als Eingabe und gibt die Wahrscheinlichkeiten zurück
für jede Aktion in Form eines numpy-Arrays
der Länge des Aktionsraums (Menge möglicher Antworten).
"""
def PolicyFunktion(Zustand):
Aktionswahrscheinlichkeiten = np.ones(num_actions,
dtype = float) * epsilon / num_actions
beste_aktion = np.argmax(Q[Zustand])
Aktionswahrscheinlichkeiten[beste_Aktion] += (1,0 – Epsilon)
Aktionswahrscheinlichkeiten zurückgeben
RückgaberechtFunktion
Hier ist der Code zum Erstellen eines Q-Learning-Modells:

def qLearning(env, num_episodes, discount_factor = 1.0,
Alpha = 0,6, Epsilon = 0,1):
"""
Q-Learning-Algorithmus: Off-Policy-TD-Steuerung.
Findet die optimale Greedy-Policy bei gleichzeitiger Verbesserung
nach einer epsilon-gierigen Politik“““
# Aktionswertfunktion
# Ein verschachteltes Wörterbuch, das abbildet
# state -> (action -> action-value).
Q = defaultdict(lambda: np.zeros(env.action_space.n))
# Verfolgt nützliche Statistiken
stats = plotting.EpisodeStats(
episode_lengths = np.zeros(num_episodes),
episode_rewards = np.zeros(num_episodes))
# Erstellen Sie eine Epsilon-Greedy-Policy-Funktion
# geeignet für Umgebung Aktionsraum
policy = createEpsilonGreedyPolicy(Q, epsilon, env.action_space.n)
# Für jede Folge
für ith_episode in range(num_episodes):
# Setzen Sie die Umgebung zurück und wählen Sie die erste Aktion aus
state = env.reset()
für t in itertools.count():
# Wahrscheinlichkeiten aller Aktionen aus dem aktuellen Zustand erhalten
Aktionswahrscheinlichkeiten = Richtlinie (Zustand)
# Aktion auswählen gemäß
# die Wahrscheinlichkeitsverteilung
Aktion = np.random.choice(np.arange(
len(action_probabilities)),
p = Aktionswahrscheinlichkeiten)
# Maßnahmen ergreifen und Belohnung erhalten, zum nächsten Zustand übergehen
next_state, Belohnung, fertig, _ = env.step(action)
# Statistiken aktualisieren
stats.episode_rewards[i_episode] += Belohnung
stats.episode_lengths[i_episode] = t
# TD-Update
beste_nächste_aktion = np.argmax(Q[nächster_zustand])
td_target = Belohnung + Rabattfaktor * Q[next_state][best_next_action]
td_delta = td_target – Q[Zustand][Aktion]
Q[Zustand][Aktion] += alpha * td_delta
# done ist True, wenn die Episode beendet ist
falls erledigt:
brechen
Zustand = nächster_Zustand
Rückgabe Q, Statistiken
Lassen Sie uns jetzt das Modell trainieren:
Q, Statistiken = qLearning(env, 1000)
Nachdem wir das Modell erstellt und trainiert haben, können wir die wesentlichen Statistiken desselben darstellen:
plotting.plot_episode_stats (Statistiken)
Verwenden Sie diesen Code, um das Modell auszuführen und das Diagramm zu zeichnen. Welche Ergebnisse sehen Sie? Teilen Sie uns Ihre Ergebnisse mit, und lassen Sie es uns wissen, wenn Sie auf Verwirrung oder Zweifel stoßen.
Lesen Sie auch: Algorithmen für maschinelles Lernen für die Datenwissenschaft
Lernen Sie Datenwissenschaftskurse von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Abschließende Gedanken
Wenn Sie das Diagramm zeichnen, werden Sie sehen, dass die Belohnung pro Episode im Laufe der Zeit progressiv zunimmt. Und nach bestimmten Episoden spiegelt die Handlung auch wider, dass sie das hohe Belohnungslimit pro Episode nivelliert. Was bedeutet dies?
Dies bedeutet, dass Ihr Modell gelernt hat, die Gesamtbelohnung, die es in einer Episode verdienen kann, zu erhöhen, indem sichergestellt wird, dass es sich optimal verhält. Sie müssen auch gesehen haben, warum q learning Python in so vielen Branchen und Bereichen Anwendung findet.
Welche Nachteile hat Reinforcement Learning?
1. Übermäßiges bestärkendes Lernen kann zu einem Übermaß an Zuständen führen und die Qualität der Ergebnisse verringern.
2. Reinforcement Learning wird nicht zur einfachen Problemlösung empfohlen.
3. Reinforcement Learning erfordert eine große Menge an Daten und Berechnungen.
4. Reinforcement Learning hat seine eigenen einzigartigen und sehr komplizierten Hindernisse, wie z. B. ein herausforderndes Trainingsdesign und Probleme mit der Balance von Erkundung und Verstärkung.
Ist Q Learning modellbasiert?
Nein, Q Learning ist nicht von Modellen abhängig. Q-Learning ist eine modellfreie Reinforcement-Learning-Technik zur Bestimmung des Werts einer bestimmten Aktion in einem bestimmten Zustand. Q-Learning ist einer von mehreren aktuellen Reinforcement-Learning-Algorithmen, der modellfrei ist, was bedeutet, dass er in einer Vielzahl von Kontexten verwendet werden kann und sich schnell an neue und unbekannte Bedingungen anpassen kann. Es kann Probleme mit stochastischen Übergängen und Belohnungen ohne die Notwendigkeit von Anpassungen handhaben und erfordert kein Umgebungsmodell. Q-Learning ist ein Lernalgorithmus, der auf Werten basiert. Wertbasierte Algorithmen verwenden eine Gleichung, um die Wertfunktion zu aktualisieren (insbesondere die Bellman-Gleichung).
Wie unterscheiden sich Q Learning und SARSA voneinander?
SARSA lernt beim Erkunden eine nahezu optimale Richtlinie, während Q-Learning die optimale Richtlinie direkt lernt. Off-Policy-SARSA lernt Aktionswerte in Bezug auf die Richtlinie, der es folgt, während On-Policy-SARSA Aktionswerte in Bezug auf die Richtlinie lernt, der es folgt. In Bezug auf die gierige Politik tut es Q-Learning. Beide konvergieren unter ähnlichen Bedingungen, aber mit unterschiedlichen Geschwindigkeiten, zur Realwertfunktion. Q-Learning braucht etwas länger, um zu konvergieren, aber es kann weiter lernen, während Vorschriften geändert werden. In Verbindung mit einer linearen Approximation wird Q-Learning nicht garantiert konvergieren. SARSA berücksichtigt Strafen von explorativen Schritten, wenn es sich der Konvergenz nähert, während Q-Learning dies nicht tut. Wenn die Möglichkeit einer erheblichen negativen Belohnung entlang des idealen Pfads besteht, versucht Q-Learning, diese während der Erkundung auszulösen. SARSA versucht jedoch, einen riskanten optimalen Pfad zu vermeiden und lernt erst, ihn zu nutzen, nachdem die Erkundungsparameter verringert wurden.