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
Que s'est-il passé ?
- 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.
- 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…
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
