Introduction
L’apprentissage par renforcement est un domaine interdisciplinaire du machine learning qui a gagné en popularité au cours de la dernière décennie grâce à ses récentes avancées dans des jeux comme Go et dans des applications concrètes telles que les voitures autonomes. Cette croissance a également coïncidé avec les progrès rapides des GPU modernes et l’évolution des techniques de machine learning. Nous sommes arrivés à un stade où les machines peuvent facilement surpasser les humains dans les jeux vidéo. Deep Q-Network (DQN) est un algorithme d’apprentissage par renforcement qui montre un grand potentiel pour gérer des jeux vidéo comme Atari en raison de leur forte dimensionnalité et de leur besoin de planification à long terme. Ce guide expliquera le fonctionnement de DQN et démontrera son efficacité pour battre Lunar Lander de Gymnasium, auparavant géré par OpenAI.
Qu’est-ce que l’apprentissage par renforcement ?
L’apprentissage par renforcement consiste pour un agent à prendre des décisions en effectuant des actions dans un environnement afin de maximiser les récompenses cumulées.
Composants clés du RL
- Agent : Le décideur qui interagit avec l’environnement.
- Environnement : Le système externe avec lequel l’agent interagit.
- État (S) : La situation ou la configuration actuelle de l’environnement.
- Action (A) : Les mouvements ou décisions possibles que l’agent peut effectuer.
- Récompense (R) : Le retour d’information de l’environnement indiquant la qualité d’une action.
- Politique (π) : Une stratégie qui associe des états à des actions et définit le comportement de l’agent.
- Fonction de valeur (V) : Estime la récompense cumulée attendue à partir d’un état donné.
- Fonction Q (Q) : Estime la récompense cumulée attendue lors de l’exécution d’une action particulière dans un état donné.
Fonctionnement de l’apprentissage par renforcement
- Initialisation : L’agent commence avec peu ou pas de connaissances sur l’environnement.
- Interaction : L’agent interagit avec l’environnement en effectuant des actions selon sa politique.
- Retour d’information : L’environnement répond à chaque action par un nouvel état et une récompense.
- Apprentissage : L’agent met à jour sa politique et/ou ses fonctions de valeur en fonction des récompenses reçues afin d’améliorer ses futures décisions.
Concepts clés
- Exploration vs. exploitation : Équilibrer l’exploration de nouvelles actions et l’exploitation d’actions connues offrant de fortes récompenses.
- Facteur d’actualisation () : Détermine l’importance des récompenses futures par rapport aux récompenses immédiates.
- Équation de Bellman : Décrit la relation entre la valeur d’un état et les valeurs de ses états successeurs.
L’équation de Bellman
L’équation de Bellman est fondamentale en apprentissage par renforcement, car elle fournit une décomposition récursive de la fonction de valeur. Elle relie la valeur d’un état aux valeurs des états suivants.
Pour la fonction Q, l’équation de Bellman indique que la valeur Q correspondant à l’exécution d’une action dans un état donné est égale à la récompense immédiate reçue, plus le facteur d’actualisation multiplié par la valeur Q maximale atteignable depuis l’état suivant obtenu.
Les composants clés de cette relation sont :
- est la valeur Q associée à l’exécution d’une action dans un état .
- est la récompense reçue après avoir effectué cette action.
- est le facteur d’actualisation, qui détermine l’importance des récompenses futures par rapport aux récompenses immédiates.
- est la valeur Q maximale atteignable dans l’état suivant, en tenant compte de toutes les actions possibles depuis cet état.
Apprentissage par différence temporelle
L’apprentissage par différence temporelle (TD) est une approche clé du RL, combinant des idées issues de la programmation dynamique et des méthodes de Monte Carlo. Il met à jour les fonctions de valeur en fonction de la différence, ou différence temporelle, entre la valeur prédite et la récompense réellement reçue, plus la valeur actualisée de l’état suivant.
Dans le Q-learning, un type d’apprentissage TD, la valeur Q du couple état-action actuel est progressivement ajustée vers une cible. Cette cible correspond à la récompense immédiate plus l’estimation actualisée des récompenses futures provenant de l’état suivant. L’ampleur de chaque ajustement est contrôlée par un taux d’apprentissage, qui détermine dans quelle mesure les nouvelles informations remplacent celles apprises précédemment.
Les deux quantités importantes dans cette mise à jour sont :
- est le taux d’apprentissage, qui contrôle avec quelle intensité la valeur Q se rapproche de la nouvelle estimation.
- est la valeur cible, qui combine la récompense immédiate avec l’estimation actualisée des récompenses futures.
L’apprentissage par renforcement constitue un cadre robuste pour résoudre des problèmes complexes de prise de décision. Ce cadre apprend la stratégie optimale grâce à des interactions par essais et erreurs avec l’environnement.
Fonctionnement de DQN
Deep Q-Network (DQN) combine le Q-learning avec des réseaux neuronaux profonds afin de gérer des environnements comportant de nombreux états et actions.
Apprentissage à partir de l’expérience
Le Q-learning est un algorithme d’apprentissage par renforcement dans lequel un agent apprend à maximiser les récompenses grâce à ses interactions avec l’environnement. Il utilise une fonction Q pour prédire les récompenses futures. L’agent met à jour ses valeurs Q à l’aide de l’équation de Bellman, en ajustant ses prédictions selon les récompenses réellement reçues et les récompenses futures attendues.
Exemple pratique
Imaginez être dans un état avec une valeur Q prédite de . Après avoir effectué une action , vous passez à un nouvel état et recevez une récompense de 8. La valeur Q de la meilleure action dans ce nouvel état est de 95, et le facteur d’actualisation est de 0,99.
Avec un taux d’apprentissage de 0,1, la valeur Q est ajustée de 10 % vers la cible :
Deep Q-Learning
Le Q-learning traditionnel utilise une table pour stocker les valeurs Q, ce qui devient irréalisable dans des environnements comportant de nombreux états et actions. DQN utilise un réseau neuronal pour approximer , permettant à l’agent de généraliser à des couples état-action jamais vus auparavant. L’entrée du réseau neuronal est une observation, et la sortie est une valeur Q pour chaque action possible.
Algorithme DQN
- Expérience Replay : Stocke les expériences dans un buffer de replay. L’échantillonnage aléatoire depuis ce buffer aide à casser les corrélations temporelles, rendant l’apprentissage plus stable.
- Réseau cible : Utilise deux réseaux neuronaux : le réseau principal pour la prise de décision et le réseau cible pour fournir des objectifs de valeurs Q stables.
- Étapes d’entraînement :
Initialiser le buffer de replay et les réseaux.
Pour chaque épisode :
Initialiser l’état de départ.
Pour chaque étape :
- Sélectionner une action à l’aide d’une politique -greedy.
- Exécuter l’action et observer la récompense ainsi que l’état suivant .
- Stocker l’expérience dans le buffer de replay.
- Échantillonner un mini-batch depuis le buffer de replay.
- Calculer la valeur Q cible et effectuer une descente de gradient sur la perte.
- Mettre à jour périodiquement le réseau cible.
Améliorations pour la stabilité
Afin de garantir la stabilité et la convergence, plusieurs améliorations sont mises en oeuvre :
- Sélection d’actions -greedy : Équilibre exploration et exploitation en ajustant le taux d’exploration au fil du temps.
- Expérience Replay : Permet d’apprendre à partir de lots d’expériences passées, garantissant un entraînement stable et une meilleure convergence.
- Réseau cible vs. réseau local : Utilise un réseau cible pour fournir des objectifs de valeurs Q stables, réduisant les oscillations et les divergences.
Réseau cible vs. réseau local
Dans DQN, deux réseaux sont utilisés pour stabiliser l’apprentissage :
- Réseau principal (local) : Ce réseau est mis à jour en continu et sert à sélectionner les actions pendant l’entraînement. Il apprend en minimisant la perte entre les valeurs Q prédites et les valeurs Q cibles.
- Réseau cible : Ce réseau fournit des objectifs stables pour les mises à jour des valeurs Q. Contrairement au réseau principal, les poids du réseau cible sont mis à jour moins fréquemment, généralement en copiant les poids du réseau principal toutes les quelques milliers d’étapes.
Pourquoi utiliser deux réseaux ?
- Stabilité : Les poids du réseau principal sont mis à jour fréquemment, ce qui peut entraîner de l’instabilité et de la divergence. En utilisant le réseau cible pour fournir des objectifs de valeurs Q stables, nous évitons les oscillations rapides pendant l’apprentissage.
- Consistance : Le réseau cible aide à maintenir des objectifs d’apprentissage cohérents, car il n’est mis à jour que périodiquement. Cela garantit que les mises à jour des valeurs Q reposent sur des objectifs plus stables et fiables, conduisant à un apprentissage plus fluide et plus stable.
Mécanisme de mise à jour
- Mise à jour du réseau principal : Après chaque action, le réseau principal met à jour ses poids à l’aide de la perte calculée à partir de la différence entre les valeurs Q prédites et les valeurs Q cibles fournies par le réseau cible.
- Mise à jour du réseau cible : Toutes les quelques milliers d’étapes, les poids du réseau principal sont copiés vers le réseau cible, garantissant que celui-ci fournisse des objectifs stables pendant un certain nombre d’étapes avant d’être à nouveau mis à jour.

Voici un exemple de code détaillé
Étape 1 : Installer les bibliothèques nécessaires
pip install swig gymnasium gymnasium[box2d] stable-baselines3 torch
Étape 2 : Importer les bibliothèques et configurer l’environnement
import gymnasium
from stable_baselines3 import DQN
from stable_baselines3.common.evaluation import evaluate_policy
# Créer l'environnement Lunar Lander
env = gymnasium.make("LunarLander-v3")
Étape 3 : Définir le modèle DQN
# Définir le modèle DQN
model = DQN("MlpPolicy", env, verbose=1)
Étape 4 : Entraîner le modèle DQN
# Entraîner le modèle (ajustez les timesteps selon les besoins)
model.learn(total_timesteps=750_000)
Étape 5 : Évaluer le modèle entraîné
# Évaluer le modèle entraîné
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10)
print(f"Récompense moyenne : {mean_reward} +/- {std_reward}")
# Facultativement, sauvegarder le modèle
model.save("dqn_lunar_lander")
Étape 6 : Visualiser le modèle entraîné
import time
# Charger le modèle si nécessaire
# model = DQN.load("dqn_lunar_lander")
# Visualiser les performances du modèle
episodes = 5
for episode in range(1, episodes + 1):
obs, info = env.reset()
done = False
score = 0
while not done:
env.render()
action, _states = model.predict(obs)
obs, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated
score += reward
print(f"Episode : {episode}, Score : {score}")
time.sleep(1)
env.close()
Explication
- Configuration de l’environnement :
gymnasium.make("LunarLander-v3")initialise l’environnement Lunar Lander. - Modèle DQN : La classe
DQNde Stable Baselines3 est utilisée pour définir le modèle avec une politique MLP. - Entraînement : La méthode
learnentraîne le modèle avec le nombre spécifié de timesteps. - Évaluation : La fonction
evaluate_policyévalue les performances du modèle sur plusieurs épisodes. - Visualisation : La boucle affiche l’environnement afin de visualiser en temps réel les performances du modèle entraîné.
Conseils supplémentaires
- Hyperparamètres : Vous devrez peut-être ajuster les hyperparamètres, comme le taux d’apprentissage ou la taille du batch, afin d’obtenir de meilleures performances.
- Checkpoints : Sauvegardez des modèles intermédiaires pendant l’entraînement afin d’éviter toute perte de progression.
- Monitoring : Utilisez TensorBoard pour surveiller les métriques d’entraînement en temps réel.

Conclusion
DQN est un puissant algorithme d’apprentissage par renforcement qui combine le Q-learning et les réseaux neuronaux profonds. En utilisant des techniques telles que l’expérience replay et les réseaux cibles, DQN apprend efficacement à résoudre des environnements complexes comme Lunar Lander de Gymnasium, démontrant ainsi son potentiel aussi bien dans les jeux vidéo que dans les applications du monde réel. L’utilisation d’un réseau cible aux côtés du réseau principal garantit stabilité et cohérence pendant l’apprentissage, faisant de DQN un algorithme robuste et efficace pour une large gamme de problèmes de RL.
Ressources d’apprentissage supplémentaires
- Deep Q Learning w/ DQN - Reinforcement Learning p.5
- AI Learning to Land a Rocket (Lunar Lander) | Reinforcement Learning
- Documentation Gymnasium - Lunar Lander
- Playing Atari with Deep Reinforcement Learning
- Solving Lunar Lander using DQN with Keras
- Deep Q-Networks Explained
- BCS Member Groups - Deep Q Network DQN
- Udacity - Deep Reinforcement Learning
Dépôt de code et modèles
Vidéos de progression de l'entraînement
200,000 étapes d'entraînement
400,000 étapes d'entraînement
Meilleur modèle
Performance du modèle
| Environnement | Type de modèle | Récompense moyenne | Nombre total d'étapes | HuggingFace | Google Colab |
|---|---|---|---|---|---|
| LunarLander-v3 | DQN | 218.56 +/- 63.62 | 750,000 | Voir le modèle | Voir Colab |



