02

RL-Games — Q-Learning, DQN et PPO from scratch

Un laboratoire d'apprentissage par renforcement où chaque algorithme est codé à la main avant d'être comparé à Stable-Baselines3 : Q-Learning (FrozenLake, Taxi), DQN (MountainCar), PPO Actor-Critic (LunarLander), et un Flappy Bird recodé de zéro comme environnement Gymnasium.

Flappy Bird : 80 tuyaux par partie, 20 parties sur 20 sans chute

Stack

PythonPyTorchGymnasiumStable-Baselines3

Que s'est-il passé ?

  1. 01

    La question

    Peut-on vraiment comprendre l'apprentissage par renforcement sans ouvrir la boîte noire ? Mon pari : non. Il faut coder chaque algorithme soi-même.

  2. 02

    Le problème

    Stable-Baselines3 entraîne un agent en trois lignes. Pratique, mais on n'apprend rien de ce qui se passe dedans : équation de Bellman, exploration, replay buffer, clipping…

  3. 03

    L'hypothèse

    En codant chaque algorithme de zéro (Q-table en NumPy, DQN puis PPO en PyTorch) et en le comparant aux implémentations de référence, je comprendrai pourquoi il marche, et quand il ne marche pas.

  4. 04

    Le build

    Une progression du simple au complexe : Q-Learning tabulaire (FrozenLake, Taxi), DQN avec target network et experience replay (MountainCar), REINFORCE, puis un PPO Actor-Critic complet avec GAE (LunarLander). Pour finir, un Flappy Bird recodé de zéro sous forme d'environnement Gymnasium, sur lequel j'entraîne un agent PPO.

  5. 05

    L'échec

    Sur Flappy Bird, les courbes plafonnaient à une récompense de 300 avec un score de 0. Pourtant, en regardant l'agent jouer, il passait bien les tuyaux. Le bug était dans mon environnement : le score n'était compté que sur le prochain tuyau, qui ignore justement ceux déjà franchis. L'agent jouait bien, c'est mon compteur qui ne voyait rien.

  6. 06

    La découverte

    En RL, l'environnement fait partie de l'expérience : une récompense ou un compteur mal codé fausse toutes les conclusions. Il faut regarder l'agent jouer, pas seulement les courbes.

  7. 07

    Le résultat

    Flappy Bird : 80 tuyaux par partie sur 20 parties sur 20, sans une seule chute, soit le maximum possible avant la limite de 3 000 pas. Sur LunarLander, mon PPO codé à la main atteint 269,6 sur sa meilleure partie, pour une moyenne de 77,8 : pas encore le seuil de 200 qui marque un environnement résolu.

  8. 08

    La prochaine frontière

    Stabiliser mon PPO maison sur LunarLander, rendre Flappy Bird plus dur (trous de taille variable, tuyaux mobiles), et passer à l'apprentissage directement depuis les pixels.

Spider-Verse · hommage