4 Punkte von GN⁺ 2024-05-06 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2024-05-06
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

    • Ich frage mich, ob das Material stark von Python abhängt oder ob man ihm auch mit anderen Sprachen folgen kann.
    • Ich habe heute die ersten drei Notebooks durchgearbeitet; sie waren ziemlich gut. Atari Gymnasium habe ich zum ersten Mal verwendet und fand es zufriedenstellend und spaßig.
    • Eine separate SoTA-Seite, auf der aktuelle Methoden und Ergebnisse zusammengefasst sind, wäre schön.
  • 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.

    • Der übliche Rat lautet tatsächlich: „Passe die Hyperparameter an, bis du die richtige Kombination findest.“ Das stimmt und kann helfen, aber die Probleme verstecken sich meist an vielen Stellen: im Problemraum und in der Formulierung, im Algorithmus selbst oder in der großen Leistungsstreuung je nach Random Seed.
      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.

    • Ich habe einige Geschäftsprobleme des Unternehmens als Multi-Armed-Bandit-Problem modelliert, die größten Kosten um 10 % gesenkt und außerdem automatisierte Ground-Truth-Signale sichtbar gemacht, die zeigen, was bei verschiedenen Features funktioniert und was nicht.
      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.
    • Ich stimme zu, dass Reinforcement Learning sehr enttäuschend sein kann, und auch, dass es schwierig ist, es tatsächlich zum Laufen zu bringen.
      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/
    • Reinforcement Learning scheint sich derzeit in einer seltsamen Zwischenzone zu befinden. Niemand weiß wirklich sicher, wie man es zuverlässig zum Funktionieren bringt, aber die meisten führenden Machine-Learning-Forscher scheinen es als essenziellen Baustein für den nächsten Fortschritt in der KI zu sehen.
  • 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.

    • Ich bin gespannt, ob der Agent am Ende Fortschritte zeigt und ob diese Notebooks auch nur ein kleines bisschen helfen.
      Wenn du nur sehen willst, ob der Algorithmus tatsächlich läuft, kannst du im Ordner solution einen 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.
    • Solche Materialien sind großartig, aber Reinforcement Learning selbst ist ein ziemlich dichtes und schweres Thema, daher weiß ich nicht recht, ob man die inhärente Schwierigkeit wirklich senken kann.
      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.

    • Im Notebook konnte das definitiv verwirrend sein, und ich habe einen kleinen Commit hochgeladen, damit etwas klarer wird, dass der Nichtdeterminismus nicht daher kommt, dass der Agent versehentlich eine andere Aktion auswählt, sondern aus der stochastischen Natur der Umgebungsdynamik.
      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 TODO markierten 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.

    • Ich hatte nicht bedacht, dass TODO verwirrend 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.

    • Ich bin gespannt, wie diese Notebooks helfen und welche Erfahrungen du beim Durcharbeiten machst; jedes Feedback ist willkommen.
  • Sieht gut aus, aber es wäre schön, wenn im README ein Link zu den YouTube-Videos ergänzt würde.

    • Das war ein Fehler im README; ich habe die YouTube-Videos noch nicht erstellt.
      Da es in der Community aber offenbar Interesse gibt, werde ich versuchen, sie zu machen, und bis dahin das README korrigieren.