- drlzh.ai ist ein praxisorientierter Kurs, in dem man Deep-Reinforcement-Learning-Algorithmen selbst implementiert, statt nur darüber zu lesen; er reicht von MDPs und tabellarischem RL bis zu RLHF, Decision Transformers, Dreamer und Meta-Learning
- Die Root-Notebooks bilden einen Übungspfad, in dem Teile des Codes durch angeleitete TODOs ersetzt sind; die Notebooks unter
solution/ enthalten vollständig ausführbare Versionen, auf die man zurückgreifen kann, wenn man feststeckt
- Das Curriculum besteht aus den Notebooks
00 bis 18; der Grundlagenpfad ist auf eine Bearbeitung in Reihenfolge ausgelegt, während die fortgeschrittenen Notebooks in sich abgeschlossen sind, ihre Nummerierung aber den Standard-Lernpfad vorgibt
- Der Docker-Workspace liefert code-server, Notebooks, Python
>=3.13,<3.14, Jupyter-Kernel, Abhängigkeiten und die VS-Code-Erweiterung DRL-ZH AI Companion in einem Paket
- Lernende sollten mit Python, PyTorch-Grundlagen sowie ML-Mathematik wie Wahrscheinlichkeit, Statistik, linearer Algebra und Differentialrechnung vertraut sein; die Notebooks setzen voraus, dass man echten Trainingscode lesen und ändern kann
Projektüberblick
- drlzh.ai ist ein praxisorientierter Deep-Reinforcement-Learning-Kurs, der darauf ausgelegt ist, Algorithmen selbst zu bauen
- Der Lernumfang beginnt bei MDPs und tabellarischem RL und erweitert sich auf folgende Themen
- Atari-Agenten-basierte Algorithmen
- Roboter für kontinuierliche Steuerung
- Planung im Stil von AlphaZero
- RLHF für Sprachmodelle
- Decision Transformers
- Policies im VLA-Stil
- World Models
- Dreamer
- Meta-Learning
- Die Root-Notebooks sind der Übungspfad; Code wurde absichtlich durch angeleitete
TODO-Abschnitte ersetzt
- Die Notebooks unter
solution/ bieten vollständige, ausführbare Versionen, damit Lernende blockierte Stellen lösen können, ohne den Kurs zu verlassen
Aufbau des Curriculums
- Der Kurs besteht aus Notebooks von
00 bis 18
00-07 Foundations
- Implementierung von MDPs, tabular RL, DQN, REINFORCE, actor-critic methods, DDPG, TD3, SAC und PPO
08-10 Breaking assumptions
- Behandelt RND curiosity, multi-agent RL sowie offline RL mit BC und IQL
11 Planning
- Behandelt Monte Carlo Tree Search, self-play und policy/value learning im AlphaZero-Stil
12-13 Modern AI stack
- Behandelt PPO-basiertes RLHF, DPO, GRPO, Decision Transformers und NanoVLA (
DTVLA)
14 Production
- Behandelt TensorBoard, Checkpoints, Debugging, multiple seeds, Ray und Optuna
15-16 World models
- Behandelt SAC-basiertes MBPO und
DR3AM/Dreamer mit RSSM latent imagination
17-18 Meta + wrap-up
- Umfasst MAML, FOMAML, fast adaptation und den Abschluss des Kurses
- Die Grundlagen-Notebooks setzen voraus, dass man sie der Reihe nach bearbeitet
- Die fortgeschrittenen Notebooks sind in sich abgeschlossen, ihre Nummerierung bietet jedoch einen Standardpfad von Exploration bis zum Kurs-Capstone
DRL-ZH AI Companion
- Der Docker-Workspace enthält DRL-ZH AI Companion, eine VS-Code-Erweiterung für diesen Kurs
- Die Erweiterung erkennt das Notebook und die
TODOs, an denen der Nutzer gerade arbeitet
- Statt die Lösung direkt zu liefern, gibt sie sokratische Hinweise
- Text- und Sprachmodus werden unterstützt
- LLM-Schlüssel müssen Nutzer selbst mitbringen
- Gemini ist die Standardeinstellung
- OpenAI, Anthropic und Groq werden ebenfalls unterstützt
Ausführungsumgebung und erste Schritte
- Die empfohlene Einrichtung ist Docker
- Docker stellt die folgenden Elemente als einen reproduzierbaren Workspace bereit
- code-server
- Notebooks
- Python
>=3.13,<3.14
- Jupyter-Kernel
- Abhängigkeiten
- AI Companion
- Grundlegender Startablauf
- Docker und Git installieren, das Repository klonen und in das entsprechende Verzeichnis wechseln
- Unter Linux/macOS
printf "UID=$(id -u)\nGID=$(id -g)\n" > .env ausführen, um den Dateibesitz an den Nutzer anzupassen
- Die Standardumgebung starten
docker compose up --build -d
- In einem Chromium-basierten Browser
http://localhost:8080 öffnen und den Kernel Python (drl-zh) auswählen
00_Intro.ipynb öffnen und mit dem Ausfüllen der TODOs beginnen
- Wenn Zugriff auf eine NVIDIA-GPU benötigt wird, folgenden Befehl verwenden
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build -d
- Für ein kleineres CPU-only-Image folgenden Befehl verwenden
docker compose -f docker-compose.yml -f docker-compose.cpu.yml up --build -d
- Wer eine native Einrichtung bevorzugt, findet in MANUAL.md Anweisungen zu Python, Poetry, VS Code und dem Companion
Vorausgesetztes Wissen und Lizenz
- Lernende sollten mit Folgendem vertraut sein
- Python
- PyTorch-Grundlagen
- Für ML nötige Wahrscheinlichkeit, Statistik, lineare Algebra und Differentialrechnung
- Die Notebooks vermitteln RL selbst, setzen aber voraus, dass man echten Trainingscode lesen und ändern kann
- Die Lizenz ist MIT; Details stehen in LICENSE
1 Kommentare
Hacker-News-Kommentare
Beim Lernen moderner Deep Reinforcement Learning gab es zwar viele gute Materialien, aber ich fand nichts, bei dem die Balance aus Theorie und Praxis genau zu meiner Erfahrung passte. Also habe ich selbst etwas erstellt und als Open Source veröffentlicht.
In einer Reihe von Python-Notebooks habe ich Algorithmen wie QLearning, DQN, SAC und PPO von Grund auf neu implementiert. Die Reihe ist so aufgebaut, dass man sich schrittweise durch Theorie und Coding-Übungen bis hin zu den damals aktuellen Verfahren um 2018/2019 arbeitet.
Der Titel ist von Andrej Karpathys „Neural Network: Zero To Hero“ übernommen, und ich hatte auch vor, YouTube-Videos zu machen, hatte bisher aber keine Zeit dafür.
Referenzen: https://github.com/alessiodm/drl-zh/blob/main/00_Intro.ipynb, https://karpathy.ai/zero-to-hero.html
Falls die Kapitel später erweitert werden, wäre es gut, nicht nur einfache Dinge zu behandeln, die bereits gut funktionieren, sondern auch, was man tun sollte, wenn etwas kaputtgeht.
Gemeint sind zum Beispiel Probleme, bei denen Aktionen dauerhaft beim Maximalwert stuck bleiben oder bei denen trotz beliebigem Rauschen beim Off-Policy-Lernen keine Exploration einsetzt.
Die Grundlagen laufen meist irgendwie, aber ich hätte gern mehr praxisnahe Materialien für Situationen, in denen plötzlich Probleme auftreten, über die kaum jemand spricht.
In realen Deep-Reinforcement-Learning-Anwendungen gibt es mehr Fälle, in denen es nicht funktioniert, als solche, in denen es funktioniert, und auch dieses Tutorial ist bei Fehlersuche, Tuning und Produktivsetzung noch dünn.
Wenn ich Zeit zum Erweitern habe, will ich diesen Teil priorisieren: https://www.alexirpan.com/2018/02/14/rl-hard.html
Ich habe an der Uni drei Semester lang Reinforcement Learning gelernt, war aber ziemlich enttäuscht, als ich erfuhr, dass moderne Reinforcement-Learning-Methoden bei Tetris nicht einmal einfache Heuristiken schlagen können.
Bei Reinforcement-Learning-Konzepten ist es wie bei anderen Werkzeugen wichtig, den passenden Einsatzort zu finden.
Im Unterricht fehlt oft der Teil, der zeigt, wo solche starken Ideen in der realen Welt eingesetzt werden können.
Über optimale Policies zu sprechen ist gut, aber wenn man nicht versteht, wo sie anwendbar sind, bleibt es leicht nur ein Bündel interessanter Mathematik.
Trotzdem denke ich, dass es sich lohnt, zumindest die Grundlagen zu lernen.
Anders als Supervised Learning, Unsupervised Learning und das zuletzt stark beachtete Semi-Supervised Learning modelliert Reinforcement Learning Lernprobleme sehr elegant als Agenten, die mit einer Umgebung interagieren und Feedback erhalten.
Auch heute gibt es praktische Erfolgsgeschichten, etwa LLM-Finetuning mit RLHF, Robotikfirmen wie Covariant oder Forschung, die LLMs und Reinforcement Learning kombiniert, wie Nvidia Eureka: https://www.alexirpan.com/2018/02/14/rl-hard.html, https://blogs.nvidia.com/blog/eureka-robotics-research/
Ich habe ein Deep-Reinforcement-Learning-Framework für Musikgenerierung gebaut, ähnlich wie OpenAI Gym.
Wer die Algorithmen aus dem ursprünglichen Beitrag testen möchte, kann es gern verwenden; Issues und PRs sind ebenfalls willkommen.
https://github.com/chaosprint/RaveForce
Ich hatte mir früher selbst Deep Reinforcement Learning angesehen, aber der Agent machte keinen sinnvollen Fortschritt. Da ich kaum Hintergrund in Statistik oder Machine Learning hatte, war es schwer zu debuggen, was falsch lief.
Ich will dieses Material durcharbeiten und sehen, was passiert.
Wenn du nur sehen willst, ob der Algorithmus tatsächlich läuft, kannst du im Ordner
solutioneinen funktionsfähigen Algorithmus auswählen und direkt ausführen.Wenn das klappt, kannst du danach den Spaß genießen, ihn von Grund auf neu zu implementieren.
Ich finde, Anfängern sollte man das klar sagen.
Das ist für mich einer der größten Schwachpunkte bei Machine-Learning-Themen, besonders bei Themen rund um Reinforcement Learning.
Vor ein paar Jahren habe ich etwas Ähnliches gebaut. Es geht nicht bis PPO und hat auch einen anderen Stil.
https://learndrl.com/
Ich will nicht sagen, dass es besser oder schlechter ist, aber aus Lernperspektive ist es immer gut, dieselben Informationen in mehreren Formen zu sehen.
Nachdem ich das MDP-Beispiel gesehen habe, möchte ich eine Anregung dazu geben, wie die nichtdeterministische Übergangsfunktion eingeführt wird.
Im aktuellen Beispiel entsteht Nichtdeterminismus dadurch, dass der Agent nach oben oder unten gehen will, aber versehentlich nach links oder rechts geht. Im Text wird jedoch nicht ausreichend erklärt, dass der Agent Fehler macht, weshalb die Kommentare zur Funktion
transition()anfangs verwirrend sind.Außerdem wäre es didaktisch womöglich besser, Nichtdeterminismus als etwas einzuführen, das aus der Umgebung kommt, nicht vom Agenten. Zum Beispiel bewegt man sich über eine raue Oberfläche, sodass das Bewegen von Ketten oder Gliedmaßen nicht immer zum beabsichtigten Ergebnis führt.
Die aktuelle Formulierung wirkt wie eine Funktion von einer Aktion zu einer zufälligen Aktion und dann zu einem zufälligen Zustand, während die Definition eine Funktion von einer Aktion zu einem zufälligen Zustand ist.
Ursprünglich wollte ich Lücken im Text per Voice-over im Video schließen, aber da ich keine Zeit hatte, Videos zu machen, behebe ich erst einmal solche Lücken.
Erst nachdem ich das dritte Notebook eine Weile gelesen hatte, wurde mir klar, dass die mit
TODOmarkierten Codeabschnitte tatsächlich Coding-Übungen sind, die der Leser implementieren soll, und dass die anschließenden Tests dazu dienen, die eigene Lösung zu überprüfen.Das ist ein cleverer Ansatz, aber am Anfang nicht sofort ersichtlich.
Zunächst dachte ich, kleine Details seien als TODO stehen gelassen worden, um das große Ganze nicht zu stören; tatsächlich waren genau diese Teile aber zentral.
TODOverwirrend sein könnte, und habe die Anleitung aktualisiert, sodass in README.md ausdrücklich steht, dass es sich um abzuschließende Coding-Abschnitte handelt.Ich hatte die Theorie gelernt, blieb aber in einer unklaren Lage, weil mir das praktische Wissen fehlte, das man braucht, um Reinforcement Learning tatsächlich einzusetzen. Das sieht genau nach der Art Kurs aus, nach der ich gesucht habe.
Sieht gut aus, aber es wäre schön, wenn im README ein Link zu den YouTube-Videos ergänzt würde.
Da es in der Community aber offenbar Interesse gibt, werde ich versuchen, sie zu machen, und bis dahin das README korrigieren.