Module L16 · Partie H · Intelligence artificielle
Apprentissage par renforcement : apprendre en agissant.
Pas d’exemples étiquetés : un agent agit dans un environnement, reçoit des récompenses, et doit découvrir seul une stratégie qui les maximise. C’est ainsi qu’AlphaGo a battu les champions, qu’un robot apprend à marcher en simulation, et que les assistants IA sont alignés sur les préférences humaines (RLHF). Ce module construit les algorithmes fondamentaux — bandits, programmation dynamique, Q-learning, gradient de politique — sur des environnements simulés dans la page.
Durée : 3 séances · Prérequis : L11 (Markov, espérance), L14. Objectifs : formalisme MDP (états, actions, récompenses, politique, valeur), exploration/exploitation, équations de Bellman, itération de la valeur, Q-learning tabulaire, approximation par réseau (DQN, idée), REINFORCE et acteur-critique, façonnage de récompense, sim-to-real et limites.
Ce que vous saurez faire à la fin
- Formuler un problème de contrôle comme un MDP.
- Implémenter itération de la valeur, Q-learning et REINFORCE, et les comparer sur un même environnement.
- Faire apprendre à un robot simulé à atteindre une cible en évitant des obstacles.
- Expliquer pourquoi le RL est difficile (crédit temporel, exploration, variance) et ce qu’on fait pour y remédier.
Références : Reinforcement Learning: An Introduction (Sutton & Barto, gratuit), cours de David Silver (DeepMind), « Spinning Up in Deep RL » (OpenAI), CS285 (Berkeley).
Fiche de cours · Définitions
Apprentissage par renforcement : définitions
Fiche de cours · Formules
Équations à connaître
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (1/2)
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (2/2)
Fiche de cours · Méthodes
Méthodes et pièges
Pièges : γ = 1 sur des épisodes infinis (valeurs infinies) ; état non markovien (vitesse manquante) ; récompense qui récompense un proxy (« se rapprocher » → tourner en rond près du but) ; surestimation des Q par le max (double Q-learning) ; comparer des agents sur une seule graine ; oublier que le simulateur n’est pas la réalité.
Fiche de cours · Exercices corrigés
Exercices corrigés
01 / Le problème
Bandits : le dilemme exploration / exploitation, isolé
Le dilemme
Exploiter = jouer le bras qu’on croit le meilleur ; explorer = en essayer d’autres pour vérifier. Le glouton pur se bloque sur un bras médiocre si les premiers tirages ont été malchanceux. ε-glouton explore au hasard, à taux constant : regret linéaire. UCB explore les bras incertains (bonus √(ln t / n)) : regret logarithmique, prouvé optimal à constante près. Ce dilemme est partout : essais cliniques, publicité, choix de la prochaine expérience scientifique, et chaque décision d’un robot qui apprend.
01 / Le problème
Le MDP et l’environnement du module : un robot sur une grille
Le formalisme
Un processus de décision markovien : états S, actions A, transitions P(s′ | s, a), récompenses R(s, a, s′), facteur d’actualisation γ ∈ [0, 1[. Une politique π(a | s) dit quoi faire. On cherche π qui maximise le retour espéré G = Σ γᵗ rₜ. γ < 1 rend la somme finie et exprime que « 10 maintenant vaut plus que 10 dans 100 pas ». Les récompenses négatives par pas (−0,1) poussent à aller vite : le façonnage de récompense est un art — une récompense mal choisie et le robot apprend à tourner en rond pour collecter des points.
02 / Avec modèle
Équations de Bellman et itération de la valeur
Pourquoi ça converge
L’opérateur de Bellman T(V)(s) = max_a Σ p(r + γV(s′)) est une contraction de facteur γ pour la norme sup : ‖T(V) − T(W)‖ ≤ γ‖V − W‖. Par le théorème du point fixe de Banach, itérer converge géométriquement vers l’unique V* — une preuve d’une page, classique en prépa. La politique gloutonne par rapport à V* est optimale. Cette approche (programmation dynamique, module L04) exige de connaître le modèle P et R et d’énumérer les états : impossible pour un robot réel (états continus, modèle inconnu). D’où la suite.
03 / Sans modèle
Q-learning : apprendre la valeur des actions par essais
La différence temporelle
Q(s, a) estime le retour si on fait a dans s puis on joue au mieux. Après une transition (s, a, r, s′), la cible r + γ max Q(s′, ·) est une meilleure estimation que Q(s, a) : on s’en rapproche d’un pas α. C’est une version stochastique de l’itération de la valeur, qui ne demande que des échantillons. Q-learning est hors-politique : il apprend la valeur de la politique gloutonne même en explorant au hasard. Converge vers Q* si chaque (s, a) est visité infiniment souvent et α décroît convenablement (Watkins, 1989). Avec un réseau de neurones à la place de la table (DQN, 2015 : Atari depuis les pixels), la convergence n’est plus garantie ; on stabilise avec un tampon de rejeu et un réseau cible.
03 / Sans modèle
Approximation : Q-learning avec un réseau (DQN en miniature)
L’approximation linéaire sur des tuiles est l’ancêtre du DQN ; remplacer f @ W par un réseau du module L14 donne le DQN. Le rejeu d’expérience casse la corrélation entre transitions successives (les données ne sont plus i.i.d., ce que la descente de gradient suppose) : c’est l’une des deux astuces qui ont fait marcher Atari.
04 / Politiques
Gradient de politique : REINFORCE
Valeur ou politique ?
Q-learning apprend des valeurs et en déduit une politique déterministe : efficace en échantillons, mais limité aux actions discrètes et parfois instable avec des réseaux. Le gradient de politique optimise directement une politique stochastique, marche en actions continues (couples moteurs !), mais souffre d’une variance énorme (un épisode entier pour une estimation). Les méthodes acteur-critique combinent les deux : l’acteur (politique) est corrigé par un critique (valeur) qui remplace G par une estimation moins bruitée. PPO (2017), l’algorithme du RLHF et de la marche des robots, est un acteur-critique qui limite la taille de chaque mise à jour.
04 / Politiques
Le RL pour de vrais robots : ce qui marche et ce qui casse
| Difficulté | Pourquoi | Réponse |
|---|---|---|
| Échantillons | Des millions d’essais ; un vrai robot en fait 1 par minute et s’use | Simulation massivement parallèle (Isaac Gym : 4000 robots en parallèle sur un GPU), puis transfert |
| Sim-to-real | La simulation n’est jamais exacte (frottements, retards, capteurs) | Randomisation de domaine : entraîner sur des milliers de simulateurs légèrement différents |
| Récompense | « Atteindre la cible » est rare ; le robot n’apprend rien | Façonnage (distance à la cible), curriculum (tâches faciles d’abord), démonstrations humaines |
| Sécurité | Explorer = parfois se jeter dans le mur | Contraintes, apprentissage hors ligne sur des données passées, bouclier de sécurité (module L21) |
| Récompense piratée | L’agent trouve une faille : marquer des points sans faire la tâche | Spécifier avec soin, surveiller, préférences humaines (RLHF) |
Succès : quadrupèdes qui marchent sur tous terrains (ETH Zurich, 2022), mains qui résolvent un Rubik’s cube (OpenAI, 2019), drones de course qui battent les champions (UZH, 2023), AlphaGo/AlphaZero, contrôle du plasma d’un tokamak (DeepMind, 2022). Le RLHF des LLM est le même algorithme (PPO) avec un « environnement » qui est un modèle de récompense appris sur des préférences humaines.
Cours
Cours 1 — Le MDP en détail : retour, valeur, optimalité, et les deux équations de Bellman
| Objet | Définition | Remarque |
|---|---|---|
| Retour | Gt = rt+1 + γ rt+2 + γ² rt+3 + … = rt+1 + γ Gt+1 | La forme récursive est la clé de tout |
| Valeur d’état | Vπ(s) = Eπ[Gt | st = s] | Ce que rapporte s en suivant π |
| Valeur d’action | Qπ(s, a) = Eπ[Gt | st = s, at = a] | Vπ(s) = Σa π(a|s) Qπ(s, a) |
| Bellman (évaluation) | Vπ(s) = Σa π(a|s) Σs′ P(s′|s,a) [r + γ Vπ(s′)] | Système linéaire : (I − γPπ) V = Rπ, résoluble exactement (L10) |
| Bellman (optimalité) | V*(s) = maxa Σs′ P(s′|s,a) [r + γ V*(s′)] | Non linéaire (le max) : itération de la valeur |
| Politique optimale | π*(s) = argmaxa Q*(s, a) | Il en existe toujours une déterministe (MDP fini) |
| Itération de la politique | Évaluer π (système linéaire) puis améliorer (glouton) ; répéter | Converge en peu d’itérations ; chaque évaluation est exacte |
Cours
Cours 2 — Exemple travaillé : dériver le gradient de politique (REINFORCE)
Objectif. Maximiser J(θ) = Eτ∼πθ[R(τ)], l’espérance du retour sur les trajectoires τ = (s0, a0, s1, …).
Étape 1 — probabilité d’une trajectoire. P(τ | θ) = p(s0) Πt πθ(at|st) P(st+1|st, at). Seuls les facteurs π dépendent de θ.
Étape 2 — l’astuce du log. ∇θ J = ∇ Στ P(τ|θ) R(τ) = Στ P(τ|θ) ∇log P(τ|θ) R(τ) = Eτ[∇log P(τ|θ) R(τ)], car ∇P = P ∇log P.
Étape 3 — ne garder que la politique. ∇log P(τ|θ) = Σt ∇log πθ(at|st) (les termes de dynamique disparaissent : on n’a pas besoin de connaître P). Donc ∇J = E[Σt ∇log πθ(at|st) · R(τ)].
Étape 4 — causalité et ligne de base. L’action at n’influence pas les récompenses passées : on remplace R(τ) par Gt (retour à partir de t) sans changer l’espérance. Retrancher une ligne de base b(st) ne change pas l’espérance non plus (E[∇log π · b] = b ∇Σaπ = 0) mais réduit la variance : d’où l’avantage At = Gt − V(st), et l’acteur-critique quand V est appris.
Résultat. ∇J ≈ (1/N) Σtrajectoires Σt ∇log πθ(at|st) (Gt − b) : une estimation Monte-Carlo (L11) qu’on monte par gradient. Pour un softmax, ∇θlog π(a|s) = onehot(a) − π(·|s) : c’est la ligne grad_log = -p; grad_log[a] += 1 du cours.
Cours
Cours 3 — Concevoir une récompense et un environnement : la partie que personne n’enseigne
| Question | Bonne pratique | Anti-exemple |
|---|---|---|
| Que veut-on vraiment ? | Récompense terminale sur le résultat (tâche accomplie), éventuellement + un faible coût par pas | Récompenser la vitesse des roues (le robot tourne sur place très vite) |
| Le signal est-il trop rare ? | Façonnage potentiel : F = γΦ(s′) − Φ(s) (Ng 1999) ne change pas la politique optimale ; Φ = −distance au but | +1 « pour se rapprocher » sans −1 pour s’éloigner : le robot fait des allers-retours |
| L’état est-il markovien ? | Inclure vitesses, dernière action, éventuellement une fenêtre d’observations | Position seule pour un pendule : impossible de connaître le sens du mouvement |
| Échelles | Normaliser observations et récompenses ; γ tel que 1/(1−γ) ≈ horizon utile | γ = 0,99 pour une tâche de 10 pas, ou 0,5 pour une tâche de 500 |
| Fin d’épisode | Distinguer « terminé » (état absorbant : pas de bootstrap) et « tronqué » (limite de temps : bootstrap sur V(s′)) | Traiter la limite de temps comme une fin réelle biaise la valeur |
| Évaluation | Politique gloutonne, sans exploration, sur des graines séparées, courbes avec écart-type | Rapporter le retour d’entraînement d’une seule graine |
| Sécurité | Contraintes dures hors de l’apprentissage (L21) ; simulation d’abord | Apprendre par essais-erreurs sur le vrai robot près d’un escalier |
TP guidé
TP — Gymnasium et Stable-Baselines3 : de CartPole à un robot simulé (sur PC, 3 h)
- Installer.
pip install gymnasium[classic-control] stable-baselines3 matplotlib. Lancez l’environnementCartPole-v1avec une politique aléatoire ; affichez observation, récompense,terminated,truncated; durée moyenne des épisodes (≈ 20 pas). - Vos algorithmes. Portez le Q-learning avec tuiles et l’acteur-critique du cours sur CartPole (observation continue de dimension 4 : discrétisez ou tuilez). Objectif : 200 pas en moyenne sur 20 épisodes d’évaluation. Courbe d’apprentissage sur 5 graines avec écart-type.
- Bibliothèque.
PPO("MlpPolicy", env).learn(50_000); évaluez avecevaluate_policy. Comparez à vos implémentations : échantillons nécessaires, stabilité. Lisez les hyperparamètres par défaut de PPO et testez-en deux (n_steps,ent_coef). - Environnement maison. Écrivez une classe
gymnasium.Envpour le robot différentiel (L21) : observation (distance au but, angle relatif, distance au mur le plus proche), actions continues (v, ω), récompense façonnée par potentiel + terminale, collisions terminales, limite de temps tronquée. Vérifiez aveccheck_env. Entraînez PPO (ou SAC pour le continu) ; visualisez 5 trajectoires. - Robustesse et sim-to-real. Randomisez masse, frottement, bruit des capteurs à chaque épisode (domaine randomisé) ; évaluez sur des paramètres jamais vus. Ajoutez un bouclier de sécurité (L21) autour de la politique et mesurez combien de fois il intervient.
- Livrable. Dépôt : vos deux algorithmes, l’environnement (avec tests), les scripts d’entraînement, courbes (5 graines), tableau comparatif (algorithme, pas d’environnement pour atteindre le seuil, retour final ± σ), et une page sur le façonnage de récompense choisi et ses effets observés.
Exercices
Exercices auto-corrigés — programmation dynamique
Exercice 1 — Évaluer et améliorer une politique
Sur un MDP à 3 états donné explicitement, écrivez evaluer_politique(P, R, pi, gamma) (système linéaire) et amelioration(P, R, V, gamma) (politique gloutonne). Vérifiez que l’itération de la politique converge vers la même valeur que l’itération de la valeur (que vous écrivez aussi : iteration_valeur_mat).
Correction
def evaluer_politique(P, R, pi, gamma):
n = len(pi); Ppi = np.array([P[pi[s]][s] for s in range(n)]); Rpi = np.array([R[pi[s]][s] for s in range(n)])
return np.linalg.solve(np.eye(n) - gamma * Ppi, Rpi)
def amelioration(P, R, V, gamma):
return np.argmax([R[a] + gamma * P[a] @ V for a in range(len(P))], axis=0)
def iteration_valeur_mat(P, R, gamma, tol=1e-10):
V = np.zeros(len(R[0]))
while True:
V2 = np.max([R[a] + gamma * P[a] @ V for a in range(len(P))], axis=0)
if np.abs(V2 - V).max() < tol: return V2
V = V2Exercice 2 — Le plus court chemin stochastique par itération de la valeur
Un robot sur une ligne de 0 à 10 doit atteindre 10. Action « avancer » : +1 avec probabilité 0,8, −1 sinon (min 0) ; action « sauter » : +3 avec probabilité 0,5, 0 sinon ; coût 1 par pas (récompense −1), γ = 1. temps_attendu() renvoie le nombre de pas espéré depuis 0 sous la politique optimale et la politique elle-même (liste de 10 actions).
Correction
def temps_attendu():
V = np.zeros(11)
for _ in range(2000):
V2 = V.copy()
for s in range(10):
av = 1 + 0.8 * V[min(s + 1, 10)] + 0.2 * V[max(s - 1, 0)]
sa = 1 + 0.5 * V[min(s + 3, 10)] + 0.5 * V[s]
V2[s] = min(av, sa)
V = V2
pol = ["avancer" if 1 + 0.8 * V[min(s + 1, 10)] + 0.2 * V[max(s - 1, 0)] <= 1 + 0.5 * V[min(s + 3, 10)] + 0.5 * V[s] else "sauter" for s in range(10)]
return V[0], polIci on minimise un coût (temps) : le « max » de Bellman devient un « min ». Sauter vaut 1,5 cases par pas en moyenne contre 0,6 : sauter presque partout, sauf près du but où dépasser ne coûte rien (10 est absorbant).
Exercices
Exercices auto-corrigés — apprentissage
Exercice 3 — SARSA contre Q-learning sur la falaise
Grille 4×12 « cliff walking » (Sutton & Barto) : départ en bas à gauche, but en bas à droite, la ligne du bas entre les deux est une falaise (−100, retour au départ), −1 par pas. Implémentez sarsa (sur-politique : cible r + γ Q(s′, a′) avec a′ l’action réellement choisie ε-gloutonne) et réutilisez q_learning (hors-politique). Avec ε = 0,1 fixe, SARSA apprend le chemin sûr (loin de la falaise) et Q-learning le chemin optimal mais risqué : vérifiez en comptant les chutes pendant l’apprentissage.
Correction
def apprendre(algo, episodes=500, eps=0.1, alpha=0.5, gamma=1.0):
Q = {(i, j): np.zeros(4) for i in range(H) for j in range(W)}; chutes = 0
choisir = lambda s: int(rng.integers(4)) if rng.random() < eps else int(np.argmax(Q[s]))
for _ in range(episodes):
s = DEP; a = choisir(s); fini = False
while not fini:
s2, r, fini, chute = pas_falaise(s, a); chutes += chute; a2 = choisir(s2)
cible = r + (0 if fini else gamma * (Q[s2][a2] if algo == "sarsa" else Q[s2].max()))
Q[s][a] += alpha * (cible - Q[s][a]); s, a = s2, a2
return Q, chutesExercice 4 — Un critique appris pour REINFORCE
Sur le bandit contextuel suivant (3 contextes, 3 actions, récompenses moyennes dans R), implémentez reinforce_critique(iters) : politique softmax par contexte, ligne de base V(contexte) apprise par moyenne mobile des récompenses ; comparez la variance de l’estimateur du gradient avec et sans ligne de base (mesurée sur 2000 échantillons sous la politique uniforme, ligne de base = récompense moyenne du contexte), et vérifiez que la politique finale choisit la meilleure action dans chaque contexte.
Correction
def reinforce_critique(iters=4000, lr=0.1):
theta = np.zeros((3, 3)); V = np.zeros(3)
for _ in range(iters):
c = rng.integers(3); p = np.exp(theta[c]) / np.exp(theta[c]).sum(); a = rng.choice(3, p=p)
r = R[c, a] + rng.normal(0, 0.3); g = -p; g[a] += 1
theta[c] += lr * g * (r - V[c]); V[c] += 0.05 * (r - V[c])
c = 0; p = np.ones(3) / 3; b = R[c].mean(); sans, avec = [], [] # variance de l'estimateur sous la politique uniforme
for _ in range(2000):
a = rng.choice(3, p=p); r = R[c, a] + rng.normal(0, 0.3); g = -p[0] + (a == 0)
sans.append(g * r); avec.append(g * (r - b))
return theta, V, float(np.var(sans)), float(np.var(avec))05 / Défis
Défi ★ — Sensibilité aux hyperparamètres et à la récompense
Consigne
1) Relancez Q-learning avec γ = 0,5 et γ = 0,99 : comment change la politique ? Avec α = 0,5 ? Sans exploration (ε = 0) ? 2) Changez la récompense par pas de −0,1 à 0 puis à +0,05 : que fait le robot ? 3) Rendez la grille plus glissante (glisse = 0,4) : la politique optimale évite-t-elle davantage les trous ? Comparez itération de la valeur et Q-learning.
Ce qu’on observe
γ petit : myope, ignore la charge lointaine et se contente d’éviter les trous. γ proche de 1 : planifie loin. α grand : bruyant, oscille. ε = 0 : se bloque sur le premier chemin trouvé. Récompense par pas positive : le robot apprend à ne jamais arriver (il collecte +0,05 indéfiniment) — c’est le piratage de récompense le plus simple. Glisse 0,4 : la politique optimale longe les bords loin des trous, quitte à faire plus de pas.
05 / Défis
Défi ★★ — Acteur-critique et le pendule
Consigne
Environnement : le pendule inversé linéarisé du module L12 (état (θ, θ̇) continu, action = force parmi {−5, 0, +5}, récompense +1 par pas tant que |θ| < 0,3, épisode de 200 pas max). 1) Représentez l’état par des tuiles gaussiennes 2D (8×8). 2) Implémentez un acteur-critique : critique V(s) = w·f(s) mis à jour par TD ; acteur softmax(θ·f(s)) mis à jour par ∇log π · (r + γV(s′) − V(s)) (l’avantage TD). 3) Tracez la durée des épisodes : le pendule tient-il 200 pas ? 4) Comparez au PD du module L12 : le RL a-t-il redécouvert un contrôleur ?
Correction (extrait)
cx, cv = np.meshgrid(np.linspace(-0.3, 0.3, 8), np.linspace(-2, 2, 8))
def f(s): return np.exp(-((s[0] - cx.ravel()) / 0.1)**2 - ((s[1] - cv.ravel()) / 0.7)**2)
FORCES = [-5, 0, 5]; w = np.zeros(64); theta = np.zeros((64, 3)); gamma = 0.98; durees = []
for ep in range(600):
s = np.array([rng.uniform(-0.05, 0.05), 0.0]); k = 0
while k < 200 and abs(s[0]) < 0.3:
fs = f(s); p = np.exp(theta.T @ fs - (theta.T @ fs).max()); p /= p.sum()
a = int(rng.choice(3, p=p)); s2 = pendule_pas(s, FORCES[a]); fini = abs(s2[0]) >= 0.3
r = 1.0; delta = r + (0 if fini else gamma * w @ f(s2)) - w @ fs # erreur TD = avantage
w += 0.02 * delta * fs
grad = -p; grad[a] += 1; theta += 0.02 * delta * np.outer(fs, grad)
s = s2; k += 1
durees.append(k)
print("durée moyenne des 50 derniers épisodes :", np.mean(durees[-50:]))Après quelques centaines d’épisodes, la politique apprise pousse à droite quand θ > 0 ou θ̇ > 0 : elle a redécouvert la structure d’un régulateur PD, sans connaître la physique. Avec un réseau et PPO, la même recette fait marcher un robot à 12 moteurs.
05 / Défis
Défi ★★★ — Esprit prépa : preuve de convergence et planification par recherche arborescente
Consigne
1) Prouvez que l’opérateur de Bellman est une contraction pour la norme sup et déduisez-en la convergence de l’itération de la valeur avec une borne ‖V_k − V*‖ ≤ γᵏ‖V_0 − V*‖ ; vérifiez numériquement la borne sur la grille. 2) Implémentez la recherche arborescente Monte-Carlo (MCTS, l’algorithme d’AlphaGo) sur la grille : depuis l’état courant, simuler des trajectoires aléatoires, construire un arbre, choisir les actions par UCB (sélection), étendre, simuler, rétropropager les retours ; jouer l’action la plus visitée. Comparez à la politique optimale avec un budget de 200 simulations par décision. 3) Discutez : AlphaZero combine MCTS (planification) et un réseau (valeur + politique appris par auto-jeu). Pourquoi la combinaison bat-elle chacun des deux seuls ?
Correction (extrait : MCTS)
def mcts(env, racine, simulations=200, gamma=0.95, c=1.4, horizon=30):
N, W = {}, {} # visites et somme des retours par (état, action)
def deroulement(s, k):
G, fac = 0.0, 1.0
for _ in range(k):
if env.terminal(s): break
s, r, _ = env.pas(s, int(rng.integers(4))); G += fac * r; fac *= gamma
return G
for _ in range(simulations):
s, chemin, fac, G = racine, [], 1.0, 0.0
for prof in range(horizon):
if env.terminal(s): break
n_s = sum(N.get((s, a), 0) for a in range(4))
if any((s, a) not in N for a in range(4)):
a = [a for a in range(4) if (s, a) not in N][0]; N[(s, a)] = 0; W[(s, a)] = 0.0
s2, r, _ = env.pas(s, a); chemin.append((s, a, fac)); G += fac * r; fac *= gamma
G += fac * deroulement(s2, horizon - prof); break # extension + simulation
a = max(range(4), key=lambda a: W[(s, a)] / N[(s, a)] + c * math.sqrt(math.log(n_s + 1) / N[(s, a)]))
s2, r, _ = env.pas(s, a); chemin.append((s, a, fac)); G += fac * r; fac *= gamma; s = s2
for s_, a_, fac_ in chemin: # rétropropagation
N[(s_, a_)] += 1; W[(s_, a_)] += G
return max(range(4), key=lambda a: N.get((racine, a), 0))
s, G, k, fini = (0, 0), 0.0, 0, False
while not fini and k < 50:
a = mcts(env, s); s, r, fini = env.pas(s, a); G += 0.95**k * r; k += 1
print("MCTS : retour", round(G, 2), "en", k, "pas")MCTS planifie en ligne à partir d’un simulateur, sans apprentissage ; il est fort quand on peut simuler beaucoup. Un réseau appris guide la sélection (politique) et remplace les déroulements aléatoires (valeur) : l’arbre devient étroit et profond. Réciproquement, MCTS produit des cibles d’entraînement meilleures que le réseau seul : la boucle d’auto-amélioration d’AlphaZero. L’article (Silver et al., 2017, Nature) est lisible avec les outils de ce module.
06 / Vérification
Pourquoi dit-on que Q-learning est « hors-politique » ?
Deux questions supplémentaires
1. Que se passe-t-il avec une récompense de +1 par pas et pas de fin d’épisode ? L’agent maximise la durée : il évite d’arriver. La récompense doit refléter ce qu’on veut vraiment.
2. Pourquoi une ligne de base réduit-elle la variance de REINFORCE sans biais ? E[∇log π · b] = b·∇Σπ = b·∇1 = 0.
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| MDP | États, actions, transitions, récompenses, γ. |
| Politique / valeur / Q | Quoi faire / retour espéré d’un état / d’un couple état-action. |
| Bellman | V(s) = max_a Σ p (r + γ V(s′)) ; opérateur contractant. |
| Exploration / exploitation | ε-glouton, UCB, Thompson. |
| Différence temporelle | Mise à jour vers r + γ V(s′). |
| Q-learning / DQN | Hors-politique, tabulaire / avec réseau, rejeu et réseau cible. |
| REINFORCE / acteur-critique / PPO | Gradient de politique ; avec critique ; avec pas limité. |
| Façonnage de récompense | Récompenses intermédiaires guidant l’apprentissage — à manier avec soin. |
| Sim-to-real | Transfert simulation → robot réel ; randomisation de domaine. |
| MCTS | Planification par simulations et arbre, sélection UCB. |
| RLHF | RL sur un modèle de récompense appris de préférences humaines. |
Pour continuer
Vous savez faire apprendre par l’action
Module suivant : recherche et IA symbolique — minimax et alpha-bêta, satisfaction de contraintes, SAT, planification : l’autre moitié de l’IA, celle qui raisonne.
À faire chez soi
- Lire Sutton & Barto chapitres 1-6 et faire les exercices de programmation.
- Sur PC :
pip install gymnasium, résoudre CartPole avec votre acteur-critique, puis avec PPO de Stable-Baselines3. - Regarder la conférence de Rich Sutton « The Bitter Lesson » et écrire une page d’avis argumenté.