4 points par GN⁺ 2024-05-06 | 1 commentaires | Partager sur WhatsApp
  • drlzh.ai est un parcours pratique de deep reinforcement learning où l’on implémente soi-même les algorithmes au lieu de se contenter de les lire, et couvre les MDP, le RL tabulaire, puis RLHF, les Decision Transformers, Dreamer et le meta-learning
  • Les notebooks à la racine constituent la piste d’apprentissage pratique, où une partie du code est remplacée par des sections TODO guidées, et les notebooks solution/ contiennent des versions complètes et exécutables à consulter en cas de blocage
  • Le cursus est composé des notebooks 00 à 18 ; la piste de base est conçue pour être suivie dans l’ordre, tandis que les notebooks avancés sont autonomes, même si leur numérotation fournit le parcours d’apprentissage principal
  • L’espace de travail Docker fournit en une seule fois code-server, les notebooks, Python >=3.13,<3.14, le kernel Jupyter, les dépendances et l’extension VS Code DRL-ZH AI Companion
  • Les apprenants doivent être à l’aise avec Python, les bases de PyTorch et les mathématiques du ML comme les probabilités, les statistiques, l’algèbre linéaire et le calcul différentiel ; les notebooks partent du principe que l’on sait lire et modifier du vrai code d’entraînement

Présentation du projet

  • drlzh.ai est un cours de deep reinforcement learning centré sur la pratique, conçu pour faire implémenter directement les algorithmes
  • Le périmètre d’apprentissage commence avec les MDP et le RL tabulaire, puis s’étend aux sujets suivants
    • algorithmes basés sur des agents Atari
    • robotique en contrôle continu
    • planification de style AlphaZero
    • RLHF pour les modèles de langage
    • Decision Transformers
    • politiques de style VLA
    • world models
    • Dreamer
    • meta-learning
  • Les notebooks à la racine constituent la piste d’exercices, et du code y est volontairement remplacé par des sections TODO guidées
  • Les notebooks solution/ fournissent des versions complètes et exécutables, afin que les apprenants puissent débloquer un point sans quitter le cours

Structure du cursus

  • Le cours est composé de notebooks allant de 00 à 18
  • 00-07 Foundations
    • implémentation de MDPs, RL tabulaire, DQN, REINFORCE, méthodes actor-critic, DDPG, TD3, SAC et PPO
  • 08-10 Breaking assumptions
    • couvre la curiosité RND, le multi-agent RL et l’offline RL avec BC et IQL
  • 11 Planning
    • couvre Monte Carlo Tree Search, self-play et l’apprentissage policy/value de style AlphaZero
  • 12-13 Modern AI stack
    • couvre le RLHF basé sur PPO, DPO, GRPO, les Decision Transformers et NanoVLA (DTVLA)
  • 14 Production
    • couvre TensorBoard, les checkpoints, le débogage, multiple seeds, Ray et Optuna
  • 15-16 World models
    • couvre MBPO basé sur SAC et DR3AM/Dreamer utilisant l’imagination latente RSSM
  • 17-18 Meta + wrap-up
    • comprend MAML, FOMAML, l’adaptation rapide et la conclusion du cours
  • Les notebooks de base supposent une progression dans l’ordre
  • Les notebooks avancés sont autonomes, mais leur numérotation fournit un parcours de référence, de l’exploration jusqu’au projet final du cours

DRL-ZH AI Companion

  • L’espace de travail Docker inclut DRL-ZH AI Companion, une extension VS Code pour ce cours
  • L’extension reconnaît le notebook en cours et les TODO
  • Au lieu de donner directement la réponse, elle fournit des indices de type socratique
  • Elle prend en charge un mode texte et un mode vocal
  • La clé LLM doit être fournie par l’utilisateur
    • Gemini est la valeur par défaut
    • OpenAI, Anthropic et Groq sont également pris en charge

Environnement d’exécution et démarrage

  • La configuration recommandée est Docker
  • Docker fournit les éléments suivants dans un espace de travail reproductible unique
    • code-server
    • notebooks
    • Python >=3.13,<3.14
    • kernel Jupyter
    • dépendances
    • AI Companion
  • Procédure de démarrage de base
    • installer Docker et Git, cloner le dépôt, puis se déplacer dans ce répertoire
    • sous Linux/macOS, exécuter printf "UID=$(id -u)\nGID=$(id -g)\n" > .env pour aligner la propriété des fichiers sur l’utilisateur
    • démarrer l’environnement par défaut
docker compose up --build -d
  • Ouvrir http://localhost:8080 dans un navigateur basé sur Chromium et sélectionner le kernel Python (drl-zh)
  • Ouvrir 00_Intro.ipynb et commencer à remplir les TODO
  • Si l’accès à un GPU NVIDIA est nécessaire, utiliser la commande suivante
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build -d
  • Pour une image plus légère, CPU only, utiliser la commande suivante
docker compose -f docker-compose.yml -f docker-compose.cpu.yml up --build -d
  • Si vous préférez une configuration native, consultez MANUAL.md pour les instructions sur Python, Poetry, VS Code et Companion

Prérequis et licence

  • Les apprenants doivent être à l’aise avec
    • Python
    • les bases de PyTorch
    • les probabilités, les statistiques, l’algèbre linéaire et le calcul différentiel nécessaires au ML
  • Les notebooks enseignent le RL lui-même, mais partent du principe que l’on sait lire et modifier du vrai code d’entraînement
  • La licence est MIT ; voir LICENSE pour les détails

1 commentaires

 
GN⁺ 2024-05-06
Avis de Hacker News
  • En apprenant les derniers développements du deep reinforcement learning, j’ai trouvé beaucoup de bonnes ressources, mais aucune qui équilibre théorie et pratique d’une façon correspondant exactement à mon expérience ; je l’ai donc créée moi-même et publiée en open source.
    Dans une série de notebooks Python, j’ai réimplémenté depuis zéro des algorithmes comme QLearning, DQN, SAC et PPO, et l’ensemble est structuré pour suivre progressivement la théorie et les exercices de code jusqu’aux techniques de pointe d’environ 2018/2019.
    Le titre vient de « Neural Network: Zero To Hero » d’Andrej Karpathy, et j’avais aussi l’intention de faire des vidéos YouTube, mais je n’ai pas encore eu le temps.
    Références : https://github.com/alessiodm/drl-zh/blob/main/00_Intro.ipynb, https://karpathy.ai/zero-to-hero.html

    • Je me demande si cela dépend beaucoup de Python, ou si l’on peut aussi suivre le contenu avec d’autres langages.
    • J’ai suivi les trois premiers notebooks pour la première fois aujourd’hui, c’était plutôt bien, et j’ai utilisé Atari Gymnasium pour la première fois : j’en suis satisfait et c’était amusant.
    • Ce serait bien d’avoir une page SoTA séparée qui récapitule les techniques et résultats les plus récents.
  • Si vous ajoutez des chapitres plus tard, ce serait bien de traiter ce qu’il faut faire quand ça casse, plutôt que des cas simples qui fonctionnent déjà bien.
    Par exemple, des problèmes où les actions restent stuck à la valeur maximale, ou où l’exploration ne démarre pas même en ajoutant beaucoup de bruit à l’apprentissage off-policy.
    Les bases fonctionnent généralement, mais j’aimerais avoir davantage de ressources pratiques utilisables quand surgit soudain un problème dont presque personne ne parle.

    • Le conseil courant, « ajustez les hyperparamètres jusqu’à trouver la bonne combinaison », est certes vrai et peut aider, mais le problème se cache souvent dans plusieurs recoins : l’espace du problème et sa formalisation, l’algorithme lui-même, ou une forte variance des performances selon la graine aléatoire.
      Dans les applications réelles de deep reinforcement learning, les cas qui ne fonctionnent pas sont plus nombreux que ceux qui fonctionnent, et ce tutoriel manque aussi de contenu sur la résolution de problèmes, le tuning et la mise en production.
      Si j’ai le temps de l’étendre, je compte prioriser cet aspect : https://www.alexirpan.com/2018/02/14/rl-hard.html
  • J’ai étudié l’apprentissage par renforcement pendant trois semestres à l’université, mais j’ai été très déçu en apprenant que les méthodes récentes d’apprentissage par renforcement ne battent même pas de simples heuristiques à Tetris.

    • J’ai modélisé une partie d’un problème business de mon entreprise comme un problème de bandit manchot multi-bras, réduit le plus gros coût de 10 %, et montré aussi un signal de vérité automatisé permettant de comprendre ce qui fonctionne ou non dans plusieurs fonctionnalités.
      Comme pour d’autres outils, l’important est de trouver le bon usage des concepts d’apprentissage par renforcement.
      Les cours omettent souvent de montrer davantage où ces idées puissantes peuvent s’appliquer dans le monde réel.
      Parler de politique optimale, c’est bien, mais si l’on ne comprend pas où l’appliquer, cela risque de rester un ensemble de mathématiques amusantes.
    • Je suis d’accord pour dire que l’apprentissage par renforcement peut être très décevant, et aussi qu’il est difficile de le faire fonctionner réellement.
      Je pense tout de même que cela vaut la peine d’en apprendre au moins les bases et les fondamentaux.
      Contrairement à l’apprentissage supervisé, non supervisé, et à l’apprentissage semi-supervisé qui a récemment beaucoup attiré l’attention, l’apprentissage par renforcement modélise le problème d’apprentissage de façon très élégante, avec un agent qui interagit avec un environnement et reçoit du feedback.
      Aujourd’hui encore, il existe des succès pratiques : le fine-tuning de LLM avec RLHF, des entreprises de robotique comme Covariant, ou des travaux combinant LLM et apprentissage par renforcement comme Nvidia Eureka : https://www.alexirpan.com/2018/02/14/rl-hard.html, https://blogs.nvidia.com/blog/eureka-robotics-research/
    • L’apprentissage par renforcement semble actuellement dans une étrange zone intermédiaire. Personne ne sait vraiment avec certitude comment le faire bien fonctionner, mais la plupart des meilleurs chercheurs en machine learning semblent le considérer comme un composant indispensable de la prochaine avancée de l’IA.
  • J’ai créé un framework de deep reinforcement learning pour la génération musicale, similaire à OpenAI Gym.
    Si vous voulez tester les algorithmes de l’article original, n’hésitez pas à l’utiliser ; les issues et PR sont aussi les bienvenues.
    https://github.com/chaosprint/RaveForce

  • J’avais déjà exploré le deep reinforcement learning par moi-même, mais l’agent ne faisait aucun progrès significatif, et comme je n’avais presque pas de bagage en statistiques ou en machine learning, il était difficile de déboguer ce qui n’allait pas.
    Je vais suivre cette ressource et voir ce que ça donne.

    • Je serais curieux de savoir si l’agent finit par progresser, et si ces notebooks aident ne serait-ce qu’un tout petit peu.
      Si vous voulez seulement voir si l’algorithme tourne réellement, vous pouvez choisir un algorithme susceptible de fonctionner dans le dossier solution et l’exécuter directement.
      Si ça marche, vous pourrez ensuite profiter du plaisir de le réimplémenter depuis zéro.
    • Ce genre de ressource est excellent, mais l’apprentissage par renforcement lui-même est un sujet assez dense et lourd, donc je ne sais pas vraiment s’il existe un moyen d’en réduire la difficulté intrinsèque.
      Je pense qu’il faut le dire clairement aux débutants.
      C’est ce qui me frustre le plus dans les sujets de machine learning, en particulier ceux liés à l’apprentissage par renforcement.
  • J’ai créé quelque chose de similaire il y a quelques années. Ça ne va pas jusqu’à PPO et le style est différent.
    https://learndrl.com/
    Je ne dis pas que c’est mieux ou moins bien, mais quand on apprend, il est toujours utile de rencontrer les mêmes informations sous plusieurs formes.

  • Après avoir vu l’exemple de MDP, j’aimerais suggérer une amélioration sur la façon de présenter la fonction de transition non déterministe.
    Dans l’exemple actuel, la non-détermination vient du fait que l’agent essaie d’aller vers le haut ou le bas, mais part par erreur à gauche ou à droite ; or le texte n’explique pas suffisamment que l’agent fait une erreur, ce qui rend au début le commentaire de la fonction transition() déroutant.
    D’un point de vue pédagogique, il pourrait aussi être préférable de présenter la non-détermination comme venant de l’environnement plutôt que de l’agent. Par exemple, un déplacement sur une surface accidentée, où le fait de bouger les chenilles ou les membres ne produit pas toujours le résultat prévu.
    La formulation actuelle donne l’impression d’une fonction qui va d’une action vers une action aléatoire, puis vers un état aléatoire, alors que la définition est une fonction qui va d’une action vers un état aléatoire.

    • Dans le notebook, cela pouvait clairement prêter à confusion, et j’ai poussé un petit commit pour rendre un peu plus explicite que la non-détermination ne vient pas du fait que l’agent choisit par erreur une autre action, mais des propriétés stochastiques de la dynamique de l’environnement.
      Au départ, je pensais combler les manques du texte à l’oral dans les vidéos, mais comme je n’ai pas eu le temps de les faire, je corrige d’abord ce genre de lacunes.
  • Ce n’est qu’après avoir pas mal lu le troisième notebook que j’ai compris que les sections de code marquées TODO étaient en fait des exercices de code à implémenter par le lecteur, et que les tests qui suivent servent à vérifier sa réponse.
    C’est une approche astucieuse, mais ce n’était pas clair dès le départ.
    Au début, je pensais que de petits détails avaient été laissés en TODO pour ne pas gêner la vue d’ensemble, alors qu’en réalité ces parties étaient centrales.

    • Je n’avais pas pensé que TODO pouvait prêter à confusion, et j’ai mis à jour les instructions dans README.md pour préciser qu’il s’agit de sections de code à compléter.
  • J’avais appris la théorie, mais je restais dans une zone floue, sans les connaissances pratiques nécessaires pour utiliser réellement l’apprentissage par renforcement ; cela ressemble exactement au type de cours que je cherchais.

    • Je serais curieux de savoir en quoi ces notebooks vous aident, comment se passe votre expérience en les suivant, et tout feedback est bienvenu.
  • Ça a l’air bien ; ce serait utile d’ajouter les liens vers les vidéos YouTube dans le README.

    • C’était une erreur dans le README, et je n’ai pas encore pu créer les vidéos YouTube.
      Mais comme la communauté semble intéressée, je vais essayer d’en faire, et je corrigerai le README en attendant.