Apprentissage par renforcement
En apprentissage supervisé, on dispose de la bonne réponse pour chaque exemple. En apprentissage par renforcement, on ne dispose que d'un signal de récompense, souvent rare et différé, et les décisions influencent les situations futures. Ce module présente le cadre, les algorithmes qui comptent, et — point important — les raisons pour lesquelles il faut souvent y renoncer.
📋 Au programme
1. Le cadre : agent, environnement, récompense
Un agent observe un état, choisit une action, reçoit une récompense et se retrouve dans un nouvel état. La boucle recommence.
action a_t
┌──────────────────►┐
┌────┴─────┐ ┌─────▼──────────┐
│ AGENT │ │ ENVIRONNEMENT │
└────▲─────┘ └─────┬──────────┘
│ │
└───────────────────┘
état s_{t+1}, récompense r_{t+1}
Exemple (maintenance) : état = usure mesurée + heures de fonctionnement
actions = {ne rien faire, inspecter, remplacer}
récompense = -coût de l'action - coût d'une panne subieLe formalisme est le processus de décision markovien \((\mathcal{S}, \mathcal{A}, P, R, \gamma)\), dont l'hypothèse centrale est la propriété de Markov : l'état contient toute l'information utile pour prédire la suite, le passé n'apporte rien de plus. Quand ce n'est pas le cas — un capteur ne voit qu'une partie du système —, on parle de POMDP, et l'on empile généralement les dernières observations pour reconstituer un état approché.
L'agent maximise le retour, somme actualisée des récompenses futures :
Le facteur \(\gamma\) joue deux rôles : il garantit la convergence de la somme, et il encode l'horizon temporel. Avec \(\gamma = 0{,}99\), l'horizon effectif est d'environ \(1/(1-\gamma) = 100\) pas ; avec \(\gamma = 0{,}9\), il tombe à 10. C'est un paramètre bien plus structurant qu'il n'y paraît : trop bas, l'agent devient myope et sacrifie l'avenir ; trop haut, l'apprentissage devient instable car les valeurs à estimer deviennent énormes.
Ce qui distingue vraiment le RL du supervisé
- Pas d'étiquette — seulement un signal évaluatif : « cette action a rapporté 3 », sans indiquer quelle action aurait rapporté davantage. En supervisé, on connaît la bonne réponse ; ici, on ne connaît que la qualité de celle qu'on a choisie.
- Crédit différé — la récompense arrive parfois des centaines de pas après le choix qui l'a causée. Savoir à quelle décision l'attribuer est le problème central.
- Données non i.i.d. et non stationnaires — l'agent génère lui-même ses données, et cette distribution change à mesure qu'il apprend. Toute l'hypothèse de base de l'apprentissage supervisé tombe.
- Exploration — il faut essayer ce qu'on ne connaît pas pour découvrir mieux, au prix de mauvaises performances immédiates.
2. Fonctions de valeur et équations de Bellman
Une politique \(\pi(a\mid s)\) donne la probabilité de choisir l'action \(a\) dans l'état \(s\) — c'est ce qu'on cherche. On lui associe deux fonctions de valeur :
\(V\) évalue un état (« à quel point est-il bon d'être ici ? »), \(Q\) évalue un couple état-action (« à quel point est-il bon de faire ceci, ici ? »). La différence est décisive : \(Q\) permet de choisir directement, en prenant l'action de plus grande valeur, sans avoir besoin de connaître le modèle de transition.
La récursivité du retour donne l'équation de Bellman, et sa version optimale :
Elle se lit simplement : la valeur d'une action, c'est la récompense immédiate plus la valeur actualisée du meilleur coup suivant. C'est un point fixe d'un opérateur contractant de facteur \(\gamma\) : itérer l'opérateur rapproche donc nécessairement de \(Q^\star\), et la politique optimale s'en déduit par \(\pi^\star(s) = \arg\max_a Q^\star(s,a)\). Tout le RL par valeurs consiste à approcher ce point fixe à partir d'échantillons plutôt qu'avec la connaissance du modèle.
3. Exploration et exploitation
Le dilemme apparaît déjà dans le cas le plus simple, le bandit manchot : plusieurs leviers de récompense moyenne inconnue, et un budget de tirages. Exploiter le meilleur levier connu, c'est risquer de passer à côté d'un meilleur jamais essayé ; explorer, c'est payer des tirages sous-optimaux.
ε-greedy action aléatoire avec probabilité ε, sinon la meilleure connue.
Simple ; on fait décroître ε au fil de l'apprentissage (de 1 à 0,05).
Boltzmann probabilité ∝ exp(Q/τ) : explore proportionnellement à la qualité,
au lieu de tirer uniformément parmi les mauvaises actions.
UCB Q(a) + c·√(ln t / N(a)) : bonus d'optimisme pour les actions peu
testées. Même intuition qu'en optimisation bayésienne (module 19).
Thompson tirage dans le postérieur sur les récompenses (module 10).
Très efficace en bandits, et naturellement parallélisable.
Bonus intrinsèque récompense de curiosité (erreur de prédiction, nouveauté de l'état)
pour les environnements à récompense extrêmement rare.4. Q-learning et SARSA
Quand les états et actions sont peu nombreux, \(Q\) tient dans un tableau. Trois familles pour l'estimer : la programmation dynamique (exacte, mais exige de connaître \(P\) et \(R\) — rarement le cas) ; Monte-Carlo (attendre la fin de l'épisode et moyenner les retours observés — sans biais, mais de forte variance et inapplicable aux tâches continues) ; et les différences temporelles (TD), qui sont la grande idée du domaine.
TD met à jour immédiatement, à partir de l'estimation courante de l'état suivant, sans attendre la fin de l'épisode. C'est du bootstrapping : on apprend une estimation à partir d'une autre estimation — ce qui semble circulaire, mais converge bel et bien, puisque la récompense observée injecte à chaque pas une information réelle.
import numpy as np
Q = np.zeros((n_etats, n_actions))
alpha, gamma, eps = 0.1, 0.99, 1.0
for episode in range(5_000):
s, _ = env.reset()
termine = False
while not termine:
# ε-greedy : explorer ou exploiter
a = env.action_space.sample() if np.random.rand() < eps else int(Q[s].argmax())
s2, r, termine, tronque, _ = env.step(a)
cible = r + gamma * Q[s2].max() * (not termine) # 0 si l'épisode est fini
Q[s, a] += alpha * (cible - Q[s, a]) # l'erreur TD
s = s2
termine = termine or tronque
eps = max(0.05, eps * 0.999) # on explore de moins en moins
politique = Q.argmax(axis=1) # la politique gloutonne finaleSa particularité : le \(\max\) fait apprendre la valeur de la politique optimale, alors même que l'agent se comporte selon une politique exploratrice. C'est un algorithme off-policy, ce qui permet de réutiliser des données anciennes ou produites par un autre agent. SARSA remplace \(\max_{a'}Q(s',a')\) par \(Q(s',a')\) où \(a'\) est l'action réellement choisie : il apprend la valeur de la politique suivie, exploration comprise (on-policy), ce qui le rend plus prudent près des états dangereux.
L'exemple canonique est celui de la falaise : un chemin court longe un précipice, un chemin long en reste éloigné. Q-learning apprend le chemin optimal — le bord — et tombe régulièrement pendant l'apprentissage à cause de l'exploration ; SARSA, qui intègre le risque de l'exploration dans ses valeurs, préfère le chemin sûr. Aucun des deux n'a tort : ils répondent à des questions différentes.
5. Deep RL : DQN
Dès que l'espace d'états devient grand ou continu (des pixels), le tableau est remplacé par un réseau \(Q_\theta(s,a)\). Cette substitution casse les garanties de convergence — on combine approximation de fonction, bootstrapping et apprentissage off-policy, ce que la littérature appelle la « triade mortelle » — et trois mécanismes ont été nécessaires pour stabiliser l'entraînement :
- Replay buffer — stocker les transitions et en tirer des mini-lots au hasard. Cela casse la corrélation temporelle des échantillons successifs (qui violerait l'hypothèse i.i.d. du gradient stochastique) et réutilise chaque expérience plusieurs fois, ce qui améliore l'efficacité en données.
- Réseau cible — la cible \(r + \gamma\max_{a'}Q_{\theta^-}(s',a')\) est calculée avec une copie figée \(\theta^-\), mise à jour périodiquement. Sans cela, on poursuit une cible qui bouge à chaque pas — comme viser une cible fixée à son propre fusil — et l'entraînement diverge.
- Double DQN — l'opérateur \(\max\) surestime systématiquement les valeurs, parce que le maximum d'estimateurs bruités est biaisé vers le haut. On dissocie donc le choix de l'action (réseau courant) et son évaluation (réseau cible).
Autres raffinements utiles : dueling (séparer valeur d'état et avantage de l'action), prioritized replay (rejouer davantage les transitions à forte erreur TD) et n-step returns. DQN et ses variantes ne traitent que les actions discrètes — pour un contrôle continu, il faut passer aux méthodes de politique.
6. Gradient de politique : REINFORCE, PPO
Plutôt que d'estimer des valeurs pour en déduire une politique, on paramètre directement \(\pi_\theta(a\mid s)\) et on monte le gradient de la performance. Le théorème du gradient de politique donne une forme remarquablement simple :
La lecture est intuitive : on augmente la probabilité des actions dont l'avantage \(A = Q - V\) est positif — celles qui font mieux que la moyenne de l'état — et on diminue celle des autres. Le terme \(\nabla \log \pi\) indique dans quelle direction modifier les paramètres pour rendre l'action plus probable ; l'avantage donne le signe et l'ampleur.
La fonction \(V\) joue ici le rôle de baseline : la soustraire ne change pas l'espérance du gradient mais réduit fortement sa variance. Sans elle, toutes les actions d'un épisode réussi seraient renforcées, y compris les mauvaises ; avec elle, seules celles qui ont fait mieux que prévu le sont. C'est ce qui rend la méthode utilisable en pratique.
REINFORCE est la version brute (avantage estimé par le retour Monte-Carlo) : correcte mais très bruitée. Les méthodes acteur-critique ajoutent un second réseau, le critique, qui estime \(V\) et fournit un avantage à faible variance (A2C, A3C, puis GAE pour un compromis biais-variance réglable).
PPO est devenu le défaut pratique. Son idée : réutiliser plusieurs fois un même lot de trajectoires pour faire plusieurs pas de gradient — ce qui améliore beaucoup l'efficacité en données — tout en empêchant la politique de trop s'éloigner de celle qui a produit ces données, sans quoi les gradients calculés ne veulent plus rien dire. En notant \(\rho = \pi_\theta(a|s)/\pi_{\text{old}}(a|s)\) :
L'écrêtage annule le gain marginal dès que le rapport sort de la bande \([1-\epsilon, 1+\epsilon]\) (typiquement \(\epsilon = 0{,}2\)) : au-delà, pousser davantage n'apporte plus rien à l'objectif, donc le gradient s'annule et le pas reste borné. C'est simple, robuste, et c'est l'algorithme utilisé pour l'alignement des LLM par retour humain (module 22).
Algorithme Actions On/Off-policy Points forts
────────────────────────────────────────────────────────────────────────────────
Q-learning discrètes off tabulaire, fondation théorique
DQN discrètes off pixels, jeux Atari, efficace en données
REINFORCE les deux on simple, mais forte variance
A2C / A3C les deux on acteur-critique, bon compromis
PPO les deux on LE défaut : robuste, peu de réglage
SAC continues off entropie maximale, très efficace en données :
le choix pour la robotique et le contrôle
TD3 continues off DDPG corrigé de la surestimationimport gymnasium as gym
from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.common.evaluation import evaluate_policy
# 8 environnements en parallèle : le goulot est la SIMULATION, pas le réseau
env = make_vec_env("LunarLander-v3", n_envs=8)
modele = PPO("MlpPolicy", env, learning_rate=3e-4, n_steps=1024,
batch_size=256, gamma=0.999, verbose=0, seed=0)
modele.learn(total_timesteps=1_000_000)
# évaluer sur PLUSIEURS graines : la variance en RL est notoirement élevée
for graine in range(5):
moy, ecart = evaluate_policy(modele, gym.make("LunarLander-v3"),
n_eval_episodes=30)
print(f"graine {graine}: {moy:.1f} ± {ecart:.1f}")7. Model-based, offline RL, RLHF
- Model-based — apprendre un modèle de la dynamique \(P(s'\mid s,a)\) et planifier dedans (Dyna, MuZero, MPC). Gain considérable en nombre d'interactions réelles, au prix des erreurs du modèle, que la planification a tendance à exploiter : l'agent trouve les failles du simulateur appris plutôt que la bonne stratégie.
- Offline RL — apprendre uniquement à partir d'un jeu de données fixe, sans interagir. C'est le seul cadre réaliste en santé, en finance ou en industrie, où l'exploration est interdite. La difficulté est le décalage de distribution : l'agent surestime des actions jamais observées, puisque rien ne le contredit. Les algorithmes dédiés (CQL, IQL) contraignent la politique à rester près des données.
- RLHF — l'alignement des LLM : on entraîne un modèle de récompense sur des préférences humaines (« cette réponse est meilleure que celle-là »), puis on optimise le modèle de langage par PPO contre cette récompense, avec une pénalité KL pour ne pas trop s'éloigner du modèle initial. Les variantes récentes (DPO, GRPO) court-circuitent en partie cette boucle (module 22).
- Sim2real — entraîner en simulation puis transférer au réel. La randomisation de domaine (module 13) force une politique robuste au décalage entre simulateur et monde réel.
8. En pratique, et pourquoi c'est difficile
Jeux et simulation Atari, Go, StarCraft — l'environnement est gratuit et parfait Robotique / contrôle locomotion, manipulation, drones (avec sim2real) Systèmes opérés refroidissement de datacenter, gestion d'énergie, trafic réseau Recommandation optimisation d'engagement à long terme (via bandits, module 24) Alignement de LLM RLHF, raisonnement par récompense vérifiable Gestion de portefeuille allocation séquentielle sous contrainte de risque
• Efficacité en données catastrophique — des millions d'interactions pour des tâches qu'un humain apprend en quelques essais. Acceptable en simulation, rédhibitoire sur un système réel.
• Conception de la récompense — c'est le vrai travail, et le plus périlleux. Un agent optimise exactement ce qu'on mesure : le bateau de course qui tourne en rond pour ramasser des bonus plutôt que de finir la course en est l'illustration canonique. Toute récompense mal spécifiée sera exploitée, et c'est le même mécanisme que le détournement des critères du module 24.
• Instabilité et variance — deux exécutions du même algorithme avec des graines différentes peuvent donner des résultats opposés. Toujours rapporter plusieurs graines.
• Sensibilité aux hyperparamètres — bien plus marquée qu'en supervisé, et les réglages transfèrent mal d'un environnement à l'autre.
• Sécurité — pendant l'exploration, l'agent fait par construction des choses absurdes. Inacceptable sur un procédé industriel ou un patient.
La question préalable : ai-je vraiment besoin de RL ?
Le RL se justifie quand la décision est séquentielle et que les actions influencent les états futurs. Trois alternatives couvrent une grande partie des cas où on l'envisage à tort. Si chaque décision est indépendante des suivantes, un bandit contextuel — bien plus simple, mieux compris, plus sûr — suffit (module 24). Si l'on dispose d'exemples de bon comportement, l'imitation (apprentissage supervisé sur des démonstrations) est presque toujours plus rapide et plus stable, quitte à raffiner ensuite par RL. Et si l'environnement est connu et modélisable, la commande optimale classique (MPC, LQR) offre des garanties de stabilité que le RL n'apporte pas. Une part non négligeable des projets « RL » gagneraient à être l'un de ces trois autres projets.
Ce qu'il faut retenir du module
- MDP, retour actualisé, équations de Bellman : tout part de là, et \(\gamma\) fixe l'horizon.
- TD apprend d'une estimation à partir d'une autre : c'est ce qui permet d'apprendre en ligne, sans attendre la fin de l'épisode.
- Q-learning est off-policy (réutilisation des données), SARSA on-policy (plus prudent).
- DQN tient grâce au replay buffer et au réseau cible ; PPO est le défaut robuste, SAC pour le contrôle continu.
- La baseline d'avantage est ce qui rend les gradients de politique utilisables.
- La conception de la récompense est le cœur du problème : l'agent exploitera toute faille.
- Coût en données très élevé, forte variance : vérifier d'abord qu'un bandit, de l'imitation ou une commande classique ne suffisent pas.