Ismail Ben Alla

CartPole RL

Douze méthodes de RL sur un même benchmark

Apprentissage par renforcement · oct. 2026 · Terminé

Toutes les méthodes classiques d'apprentissage par renforcement, d'une table Q à PPO et aux CNN sur pixels, équilibrant le même pendule sous la même évaluation.

Construit avecPyTorchGymnasiumNumPyMatplotlibpytest

CartPole RL — vue d’ensemble

Présentation

CartPole est la tâche de contrôle la plus simple de Gymnasium : pousser un chariot à gauche ou à droite pour que le pendule reste debout, un point par pas, 500 pas au maximum. Je m'en suis servi comme banc d'essai pour implémenter moi-même toutes les méthodes classiques d'apprentissage par renforcement et voir comment chacune y parvient réellement : Q-learning tabulaire, SARSA et contrôle Monte Carlo sur un état discrétisé, DQN avec ses variantes double, dueling, à replay priorisé et n-step, REINFORCE avec et sans baseline, acteur-critique à un pas, A2C et PPO, et enfin des politiques CNN qui ne voient que des images rendues.

Tout partage un même environnement, un même Recorder qui compte les pas et lance une évaluation gloutonne tous les 5 000 pas, une même définition de « résolu » (un candidat à >= 475 sur 10 épisodes, confirmé sur 100 épisodes supplémentaires) et les mêmes graphiques. Chaque règle de mise à jour tient en quelques lignes à côté d'un commentaire qui explique pourquoi elle est là, et 53 tests vérifient les briques (reward-to-go, GAE à lambda 0 et 1, la cible du double DQN, la tête dueling, le clip de PPO) contre des valeurs calculées à la main.

Sur les observations d'état, les douze méthodes résolvent la tâche. PPO et REINFORCE + baseline y parviennent après 15 000 pas, le Q-learning tabulaire après 40 000 pas mais seulement 4 secondes de CPU, et le DQN simple après 50 000 pas avec un long plateau que les variantes double et dueling ne montrent pas. Les runs sur pixels sont la partie honnête : 50 000 pas CPU sont loin d'être suffisants, et seuls les agents sur différences d'images dépassent tant soit peu le jeu aléatoire.

La question

Si chaque méthode classique de RL tourne sur le même environnement avec la même évaluation gloutonne, que révèle chaque courbe d'apprentissage sur la raison d'être de ses ingrédients (replay, réseaux cibles, baselines, clipping) ?

Fonctionnalités clés

Comment ça marche

  1. Un MDP, trois façons de le voir

    CartPole-v1 donne +1 par pas jusqu'à ce que le pendule penche de plus de 12 degrés, que le chariot sorte de la piste ou que 500 pas s'écoulent. Les agents voient l'état brut, une image rendue recadrée, ou l'image avec son image de différence ; les méthodes tabulaires discrétisent l'état en 1 x 6 x 12 x 12 = 864 cellules.

  2. TD tabulaire et Monte Carlo

    Une table 864 x 2 est mise à jour avec la cible Q-learning r + gamma max Q(s', .), la cible SARSA qui utilise l'action réellement prise ensuite, ou le vrai retour de l'épisode pour le contrôle Monte Carlo, avec epsilon décroissant de 1.0 à 0.02.

  3. Méthodes de valeur profondes

    Un réseau Q 4-128-128-2 s'entraîne sur un buffer de replay avec un réseau cible moyenné par Polyak et une perte de Huber. Des flags activent la cible double (le réseau en ligne choisit a', le réseau cible l'évalue), la tête dueling Q = V + A - mean A, le replay priorisé avec poids d'importance, et les retours n-step.

  4. Gradient de politique et acteur-critique

    REINFORCE pousse log pi(a|s) vers le haut, pondéré par le reward-to-go normalisé, éventuellement moins une baseline apprise V(s). L'acteur-critique à un pas utilise l'erreur TD comme avantage après chaque pas ; A2C fait avancer 8 environnements de 8 pas et effectue un seul pas combiné acteur, critique et entropie.

  5. PPO

    8 environnements x 32 pas par rollout, avantages GAE (gamma 0.98, lambda 0.8), puis 20 époques sur le batch avec le ratio de probabilités clippé dans [0.8, 1.2] pour que des mises à jour répétées ne puissent pas éloigner la politique de celle qui a collecté les données.

  6. La même évaluation pour tous

    Tous les 5 000 pas, la politique gloutonne joue 10 états de départ fixes ; une moyenne >= 475 est confirmée sur 100 épisodes supplémentaires, et le premier point confirmé donne les pas, les épisodes et les secondes jusqu'à résolution. Une évaluation finale sur 100 épisodes avec des états de départ jamais vus remplit le tableau.

Exemples

Avant et après entraînement sur le même état de départ. À gauche : un agent aléatoire, le pendule tombe au pas 64 (le jeu aléatoire fait environ 22 en moyenne). À droite : l'agent PPO entraîné tient l'équilibre pendant les 500 pas complets.
Un agent entraîné par famille sur ce même état de départ : l'agent aléatoire tombe au pas 64 tandis que les checkpoints de la table Q, du double DQN, de REINFORCE + baseline, d'A2C et de PPO atteignent tous 500 pas.
Retour d'entraînement (lignes, exploration incluse) et évaluation gloutonne (points) en fonction des pas d'environnement pour chaque méthode fondée sur l'état. Les effondrements d'A2C vers 35k, 65k et 80k pas et le plateau du DQN simple entre 130 et 160 sont visibles.
Retour d'entraînement (lignes, exploration incluse) et évaluation gloutonne (points) en fonction des pas d'environnement pour chaque méthode fondée sur l'état. Les effondrements d'A2C vers 35k, 65k et 80k pas et le plateau du DQN simple entre 130 et 160 sont visibles.
Pas d'environnement jusqu'à la première résolution confirmée, une seule graine : PPO et REINFORCE + baseline à 15 000, dueling DQN, REINFORCE et acteur-critique à 20 000, jusqu'au contrôle Monte Carlo à 115 000.
Pas d'environnement jusqu'à la première résolution confirmée, une seule graine : PPO et REINFORCE + baseline à 15 000, dueling DQN, REINFORCE et acteur-critique à 20 000, jusqu'au contrôle Monte Carlo à 115 000.
Les quatre runs sur pixels sur 50 000 pas. PPO sur une seule image reste au niveau du hasard ; REINFORCE + baseline sur différences d'images grimpe jusqu'à un retour d'entraînement d'environ 55, et les runs PPO sur différences d'images ne commencent à décoller qu'après 40 000 pas.
Les quatre runs sur pixels sur 50 000 pas. PPO sur une seule image reste au niveau du hasard ; REINFORCE + baseline sur différences d'images grimpe jusqu'à un retour d'entraînement d'environ 55, et les runs PPO sur différences d'images ne commencent à décoller qu'après 40 000 pas.

Entrée

cartpole-train --method ppo --record ppo.gif

Sortie

[ppo/state] step 15000 ep 183 train(last20) 264.0 eval 500.0 +- 0.0 22.0s confirm(100) 498.1

La ligne affichée à l'évaluation où PPO a résolu la tâche : 15 000 pas, 183 épisodes, moyenne gloutonne sur 10 épisodes de 500.0, confirmée avec 498.1 sur 100 épisodes supplémentaires. Le retour d'entraînement avec exploration n'est encore qu'à 264 à ce moment-là.

Stack technique

Ce que j’ai appris

Limites

Mots-clés

apprentissage par renforcement · CartPole · Gymnasium · Q-learning · SARSA · contrôle Monte Carlo · DQN · double DQN · dueling DQN · replay d'expérience priorisé · REINFORCE · acteur-critique · A2C · PPO · PyTorch