Einführung in das Reinforcement Learning. Part 3: Q-Learning mit neuronalen Netzen, Algorithmus DQN

Sie können den TensorFlow-Code unter diesem Link selbst ausführen (oder eine PyTorch-Version unter diesem Link), oder weiter lesen, um den Code zu sehen, ohne ihn auszuführen. Da der Code etwas länger ist als in den vorherigen Teilen, werde ich hier nur die wichtigsten Teile zeigen. Der gesamte Quellcode ist über den obigen Link verfügbar.

Hier ist die CartPole-Umgebung. Ich verwende OpenAI Gym, um diese Umgebung zu visualisieren und auszuführen. Das Ziel ist es, den Wagen nach links und rechts zu bewegen, um die Stange in einer vertikalen Position zu halten. Wenn die Neigung der Stange mehr als 15 Grad von der vertikalen Achse abweicht, endet die Episode und wir beginnen von vorne. Video 1 zeigt ein Beispiel für den Ablauf mehrerer Episoden in dieser Umgebung durch zufällige Aktionen.

Video 1: Zufälliges Spiel in der CartPole-Umgebung.

Um den DQN-Algorithmus zu implementieren, erstellen wir zunächst die DNNs main (main_nn) und target (target_nn). Das Zielnetz wird eine Kopie des Hauptnetzes sein, aber mit einer eigenen Kopie der Gewichte. Wir benötigen auch einen Optimierer und eine Verlustfunktion.

Algorithmus 1. Die Architektur der tiefen neuronalen Netze.

Als Nächstes werden wir den Erfahrungswiedergabepuffer erstellen, um die Erfahrung zum Puffer hinzuzufügen und sie später für das Training zu verwenden.

Algorithmus 2. Erfahrungswiedergabepuffer.

Wir werden auch eine Hilfsfunktion schreiben, um die ε-greedy-Politik auszuführen und das Hauptnetz mit den im Puffer gespeicherten Daten zu trainieren.

Algorithmus 3. Funktionen für die ε-greedy-Politik und für das Training des neuronalen Netzes.

Wir werden auch die notwendigen Hyperparameter definieren und das neuronale Netz trainieren. Wir spielen eine Episode mit der ε-greedy-Politik ab, speichern die Daten im Erfahrungswiedergabepuffer und trainieren das Hauptnetz nach jedem Schritt. Alle 2000 Schritte kopieren wir die Gewichte aus dem Hauptnetz in das Zielnetz. Wir werden auch den Wert von Epsilon (ε) verringern, um mit einer hohen Exploration zu beginnen und die Exploration im Laufe der Zeit zu verringern. Wir werden sehen, wie der Algorithmus nach jeder Episode zu lernen beginnt.

Algorithmus 4. Hauptschleife.

Das ist das Ergebnis, das angezeigt wird:

Episode 0/1000. Epsilon: 0.99. Reward in last 100 episodes: 14.0 Episode 50/1000. Epsilon: 0.94. Reward in last 100 episodes: 22.2 Episode 100/1000. Epsilon: 0.89. Reward in last 100 episodes: 23.3 Episode 150/1000. Epsilon: 0.84. Reward in last 100 episodes: 23.4 Episode 200/1000. Epsilon: 0.79. Reward in last 100 episodes: 24.9 Episode 250/1000. Epsilon: 0.74. Reward in last 100 episodes: 30.4 Episode 300/1000. Epsilon: 0.69. Reward in last 100 episodes: 38.4 Episode 350/1000. Epsilon: 0.64. Reward in last 100 episodes: 51.4 Episode 400/1000. Epsilon: 0.59. Reward in last 100 episodes: 68.2 Episode 450/1000. Epsilon: 0.54. Reward in last 100 episodes: 82.4 Episode 500/1000. Epsilon: 0.49. Reward in last 100 episodes: 102.1 Episode 550/1000. Epsilon: 0.44. Reward in last 100 episodes: 129.7 Episode 600/1000. Epsilon: 0.39. Reward in last 100 episodes: 151.7 Episode 650/1000. Epsilon: 0.34. Reward in last 100 episodes: 173.0 Episode 700/1000. Epsilon: 0.29. Reward in last 100 episodes: 187.3 Episode 750/1000. Epsilon: 0.24. Reward in last 100 episodes: 190.9 Episode 800/1000. Epsilon: 0.19. Reward in last 100 episodes: 194.6 Episode 850/1000. Epsilon: 0.14. Reward in last 100 episodes: 195.9 Episode 900/1000. Epsilon: 0.09. Reward in last 100 episodes: 197.9 Episode 950/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0 Episode 1000/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0

Nun, da der Agent gelernt hat, die Belohnung für die CartPole-Umgebung zu maximieren, werden wir den Agenten ein weiteres Mal mit der Umgebung interagieren lassen, um das Ergebnis zu visualisieren und zu sehen, dass er nun in der Lage ist, die Stange für 200 Frames im Gleichgewicht zu halten.

Video 2. Ergebnis der Visualisierung des trainierten DQN-Agenten, der mit der CartPole-Umgebung interagiert.

Sie können den TensorFlow-Code unter diesem Link selbst ausführen (oder eine PyTorch-Version unter diesem Link).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.