Hallo! Mein Name ist Eric Yu, und ich habe dieses Repository geschrieben, um Anfängern dabei zu helfen, mit Pytorch von der proximalen Richtlinienoptimierung (PPO) von Grund auf neu zu schreiben. Mein Ziel ist es, einen Code für PPO bereitzustellen, der nackte Knochen (kleine/keine ausgefallenen Tricks) und sehr gut dokumentiert/gestaltet und strukturiert ist. Ich ziele besonders auf Leute, die es satt haben, endlose PPO -Implementierungen zu lesen und absolut keine Ahnung zu haben, was los ist.
Wenn Sie nicht von Medium kommen, lesen Sie bitte zuerst meine Serie.
Ich habe diesen Code mit der Annahme geschrieben, dass Sie Erfahrung mit Python- und Verstärkungslernen (RL) haben, einschließlich der Art und Weise, wie Richtliniengradienten (PG) -Algorithmen und PPO -Arbeiten (für PPO, nur mit theoretischer Ebene vertraut sein sollten. Schließlich sollte dieser Code Ihnen helfen, PPO in die Praxis umzusetzen). Wenn RL, PG oder PPO nicht vertraut sind, folgen Sie den drei folgenden Links in der Reihenfolge:
Wenn RL nicht vertraut ist, lesen Sie die OpenAI -Einführung in RL (alle 3 Teile)
Wenn PG nicht vertraut ist, lesen Sie eine intuitive Erklärung des politischen Gradienten
Wenn Sie mit der PPO -Theorie nicht vertraut sind, lesen Sie den PPO -Stapelüberlaufpost
Wenn Sie mit allen 3 nicht vertraut sind, gehen Sie diese Links oben von oben nach unten durch.
Bitte beachten Sie, dass in dieser PPO -Implementierung eine kontinuierliche Beobachtung und ein Aktionsraum angenommen wird. Sie können jedoch entweder relativ leicht in diskrete diskrete ändern. Ich folge dem Pseudocode, das in OpenAs für PPO angegeben ist: https://spinningup.openai.com/en/latest/algorithms/ppo.html; Pseudocode -Zeilennummern werden in PPO.Py als "Alg -Schritt #" angegeben.
Ich hoffe, das ist hilfreich, da ich mir wünschte, ich hätte eine solche Ressource, als ich meine Reise zum Verstärkungslernen begann.
Besonderer Dank geht an Zhirui Xia für den Teil 4 dieses Tutorials.
Zuerst empfehle ich, eine virtuelle Python -Umgebung zu erstellen:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Von Grund auf neu trainieren:
python main.py
Modell zu testen:
python main.py --mode test --actor_model ppo_actor.pth
Mit vorhandenen Akteur/Kritikern zu trainieren:
python main.py --actor_model ppo_actor.pth --critic_model ppo_critic.pth
Hinweis: Um Hyperparameter, Umgebungen usw. zu ändern, tun Sie dies in Main.py; Ich hatte sie nicht als Befehlszeilenargumente, weil ich nicht mag, wie lange es den Befehl macht.
Main.py ist unsere ausführbare Datei. Es wird Argumente unter Verwendung von Argumenten analysieren und dann unsere Umgebung und unser PPO -Modell initialisieren. Abhängig von dem von Ihnen angegebenen Modus (standardmäßig trainieren) trainiert oder testet er unser Modell. Um unser Modell zu trainieren, müssen wir nur die learn aufrufen! Dies wurde so gestaltet, wie Sie PPO2 mit stable_Baselines trainieren.
Argumente.py ist das, was Main anruft, um Argumente aus der Befehlszeile zu analysieren.
ppo.py enthält unser PPO -Modell. Alle Lernmagie geschieht in dieser Datei. Bitte lesen Sie meine mittlere Serie, um zu sehen, wie es funktioniert. Eine andere Methode, die ich empfehle, ist die Verwendung von etwas namens pdb oder Python -Debugger und durch den Abbruch meines Codes, wenn ich in Main.Py learn .
network.py enthält ein Beispiel für neuronale Netze, mit dem wir unsere Akteur- und Kritikernetzwerke in PPO definieren können.
eval_policy.py enthält den Code zur Bewertung der Richtlinie. Es ist ein völlig separates Modul aus dem anderen Code.
Das Graph_Code -Verzeichnis enthält den Code zum automatischen Erfassen von Daten und zum Generieren von Diagrammen. Auf einem angemessenen Computer dauert ~ 10 Stunden, um alle Daten in meinem mittleren Artikel zu generieren. Alle Daten aus dem Medium -Artikel sollten weiterhin in graph_code/graph_data enthalten sein, falls Sie interessiert sind. Wenn Sie möchten, können Sie die Grafiken, die ich mit den Daten verwende, regenerieren. Weitere Informationen finden Sie in der Readme in Graph_Code.
Hier ist ein großartiges PDB
Oder wenn Sie ein Experte mit Debuggen sind, hier ist die Dokumentation: https://docs.python.org/3/library/pdb.html
Hier ist eine Liste von Umgebungen, die Sie ausprobieren können. Beachten Sie, dass Sie in dieser PPO -Implementierung nur diejenigen mit Box sowohl für Beobachtung als auch für Aktionsräume verwenden können.
Hyperparameter finden Sie hier.
Bitte beachten Sie meinen mittleren Artikel.
Wenn Sie Fragen haben oder mich an mich wenden möchten, können Sie mich hier finden:
E -Mail: [email protected]
LinkedIn: https://www.linkedin.com/in/eric-yu-engineer/