tadata
← Retour à l'accueil

Apprentissage par renforcement : des agents qui apprennent en agissant

#machine-learning#reinforcement-learning#deep-learning#optimization

L'apprentissage par renforcement (RL) entraîne des agents à prendre des décisions séquentielles en maximisant la récompense cumulée par essai-erreur. Contrairement à l'apprentissage supervisé, le RL n'a pas de jeu de données étiqueté — l'agent apprend des conséquences de ses propres actions dans un environnement.

Le cadre RL

Un système RL a quatre composants :

  • Agent : l'apprenant et décideur
  • Environnement : tout ce avec quoi l'agent interagit
  • État (ss) : la situation actuelle
  • Action (aa) : ce que l'agent peut faire
  • Récompense (rr) : signal de retour scalaire
tadata

L'objectif de l'agent est d'apprendre une politique π(a∣s)\pi(a|s) qui maximise la récompense cumulée actualisée espérée :

Gt=∑k=0∞γkrt+k+1G_t = \sum_{k=0}^{\infty} \gamma^k r_{t+k+1}

où γ∈[0,1)\gamma \in [0, 1) est le facteur d'actualisation équilibrant récompenses immédiates et futures.

tadata
0.51 0.65 0.80 +1 terminal 0.40 0.49 −1 terminal 0.30 0.25 0.34 0.13 0 1 2 3 0 1 2 γ = 0.9 · step reward −0.04 · noise 0.2 (0.1 to each side) · converged after 21 sweeps · arrows: greedy policy V after sweep 1 −0.04 −0.04 0.68 1.00 −0.04 −0.04 −1.00 −0.04 −0.04 −0.04 −0.04 V after sweep 2 −0.08 0.44 0.74 1.00 −0.08 0.36 −1.00 −0.08 −0.08 −0.08 −0.08 V after sweep 3 0.26 0.57 0.78 1.00 −0.11 0.43 −1.00 −0.11 −0.11 0.20 −0.11 Vₖ₊₁(s) = R(s) + γ · maxₐ Σₛ' P(s' | s, a) · Vₖ(s') π(s) = argmaxₐ Σₛ' P(s' | s, a) · V(s') (greedy policy: the arrows) where Vₖ(s) value of cell s after k sweeps (expected discountedreturn) R(s) reward for being in s: step reward (+ cell reward);terminals keep V = reward γ discount factor, 0 < γ ≤ 1 a action: up, right, down, left; s' = next cell P(s' | s, a) move as intended 0.8, slip to each side 0.1; walls andedges: stay π(s) action chosen in s
0.51 0.65 0.80 +1 terminal 0.40 0.49 −1 terminal 0.30 0.25 0.34 0.13 0 1 2 3 0 1 2 γ = 0.9 · step reward −0.04 · noise 0.2 (0.1 to each side) · converged after 21 sweeps · arrows: greedy policy V after sweep 1 −0.04 −0.04 0.68 1.00 −0.04 −0.04 −1.00 −0.04 −0.04 −0.04 −0.04 V after sweep 2 −0.08 0.44 0.74 1.00 −0.08 0.36 −1.00 −0.08 −0.08 −0.08 −0.08 V after sweep 3 0.26 0.57 0.78 1.00 −0.11 0.43 −1.00 −0.11 −0.11 0.20 −0.11 Vₖ₊₁(s) = R(s) + γ · maxₐ Σₛ' P(s' | s, a) · Vₖ(s') π(s) = argmaxₐ Σₛ' P(s' | s, a) · V(s') (greedy policy: the arrows) where Vₖ(s) value of cell s after k sweeps (expected discountedreturn) R(s) reward for being in s: step reward (+ cell reward);terminals keep V = reward γ discount factor, 0 < γ ≤ 1 a action: up, right, down, left; s' = next cell P(s' | s, a) move as intended 0.8, slip to each side 0.1; walls andedges: stay π(s) action chosen in s
Le gridworld classique 3 × 4 (Russell et Norvig) : sorties +1 et −1, un mur, un petit coût par pas, et 20 % des mouvements qui glissent sur le côté. L'itération sur les valeurs calcule le V* de chaque case ; les flèches montrent la politique gloutonne, qui s'éloigne de la case −1 même si le chemin s'allonge

Extrait de la fiche « MDPs and Bellman Equations » · Demander la fiche complète

Taxonomie des algorithmes

FamilleMéthodeIdée cléOn/Off PolicyEfficacité échantillon
Basé valeurQ-LearningApprendre Q(s,a), agir gloutonOff-policyFaible
DQNQ-Learning + réseau profond + replayOff-policyModérée
Double DQNDeux réseaux pour réduire la surestimationOff-policyModérée
Gradient de politiqueREINFORCEGradient direct sur récompense espéréeOn-policyFaible
PPOObjectif surrogate clippé pour la stabilitéOn-policyModérée
TRPOContrainte de région de confianceOn-policyModérée
Acteur-CritiqueA2C/A3CPolitique (acteur) + valeur (critique)On-policyModérée
SACEntropie maximale + acteur-critique off-policyOff-policyÉlevée
TD3Critiques jumeaux + mises à jour différéesOff-policyÉlevée
Basé modèleMuZeroModèle appris + planification (MCTS)Off-policyTrès élevée
DreamerModèle du monde + rollouts imaginairesOff-policyTrès élevée
tadata
Category Algorithms Data Actions Pure policygradient • REINFORCE • on-policy, full episodes • discrete or continuous On-policyactor-critic • A2C, A3C• TRPO• PPO • on-policy rollouts,discarded after an update • discrete or continuous Off-policyactor-critic • DDPG (2015)• TD3 (2018)• SAC (2018) • replay buffer • continuous Value-based • DQN, Rainbow • replay buffer • small discrete set
Category Algorithms Data Actions Pure policygradient • REINFORCE • on-policy, full episodes • discrete or continuous On-policyactor-critic • A2C, A3C• TRPO• PPO • on-policy rollouts,discarded after an update • discrete or continuous Off-policyactor-critic • DDPG (2015)• TD3 (2018)• SAC (2018) • replay buffer • continuous Value-based • DQN, Rainbow • replay buffer • small discrete set
Où se situent les algorithmes basés sur la politique, avec la famille DQN (basée sur la valeur) pour comparaison

Extrait de la fiche « Policy Gradients, Actor-Critic and PPO » · Demander la fiche complète

Deep Q-Networks (DQN)

DQN (Mnih et al., 2015) a été la percée qui a rendu le deep RL pratique. Deux innovations clés :

Replay d'expérience : stocker les transitions (s,a,r,s′)(s, a, r, s') dans un buffer et échantillonner des mini-batchs aléatoires pour l'entraînement. Casse la corrélation temporelle et améliore l'efficacité des données.

Réseau cible : maintenir une copie lentement mise à jour du réseau Q pour calculer les cibles. Empêche le problème de cible mouvante où le réseau poursuit ses propres prédictions.

import torch
import torch.nn as nn
from collections import deque
import random

class DQN(nn.Module):
    def __init__(self, state_dim, action_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(state_dim, 128),
            nn.ReLU(),
            nn.Linear(128, 128),
            nn.ReLU(),
            nn.Linear(128, action_dim)
        )

    def forward(self, x):
        return self.net(x)

# Boucle d'entraînement (simplifiée)
replay_buffer = deque(maxlen=100_000)
q_net = DQN(state_dim=4, action_dim=2)
target_net = DQN(state_dim=4, action_dim=2)
target_net.load_state_dict(q_net.state_dict())
optimizer = torch.optim.Adam(q_net.parameters(), lr=1e-3)

def update(batch_size=64, gamma=0.99):
    batch = random.sample(replay_buffer, batch_size)
    states, actions, rewards, next_states, dones = zip(*batch)

    q_values = q_net(states).gather(1, actions)
    with torch.no_grad():
        next_q = target_net(next_states).max(1)[0]
        targets = rewards + gamma * next_q * (1 - dones)

    loss = nn.functional.mse_loss(q_values.squeeze(), targets)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

PPO : le standard de l'industrie

Proximal Policy Optimization (PPO) est l'algorithme RL le plus utilisé en pratique — propulsant le RLHF pour les LLM, la robotique chez OpenAI et l'IA de jeu. Son succès vient de sa simplicité et stabilité :

  • Collecte des trajectoires avec la politique actuelle
  • Optimise un objectif surrogate clippé qui empêche les grandes mises à jour de politique
  • Pas de replay buffer nécessaire (on-policy), mais moins efficace en échantillons

L'objectif clippé :

LCLIP(θ)=E[min⁡(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]L^{CLIP}(\theta) = \mathbb{E}\left[\min\left(r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t\right)\right]

où rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} est le ratio de probabilité et A^t\hat{A}_t est l'estimation de l'avantage.

tadata
AdvantageRatio rmin(rA, clip·A)Gradient
A = +21.1 (inside)min(2.2, 2.2) = 2.2yes: raise π(a)
A = +21.5 (above 1.2)min(3.0, 2.4) = 2.4no: already raised enough
A = −20.5 (below 0.8)min(−1.0, −1.6) = −1.6no: already lowered enough
A = −21.5 (above 1.2)min(−3.0, −2.4) = −3.0yes: undo the harmful increase
Les quatre cas du clip (ε = 0,2). « Gradient » indique si cet échantillon pousse encore theta

Extrait de la fiche « Policy Gradients, Actor-Critic and PPO » · Demander la fiche complète

Résultats marquants

RéalisationAnnéeAlgorithmeSignification
Jeux Atari (surhumain)2015DQNPremier succès deep RL à grande échelle
AlphaGo (bat le champion du monde)2016MCTS + réseaux politique/valeurLe Go était considéré à des décennies
OpenAI Five (Dota 2)2019PPO + self-playStratégie multi-agent complexe
AlphaFold 2 (repliement protéique)2020Recherche inspirée RLRésolu un problème de biologie vieux de 50 ans
RLHF pour ChatGPT2022PPOAlignement des LLM aux préférences humaines
RT-2 (manipulation robotique)2023Vision-Language-ActionTransfert de connaissances web aux robots

Défis

Façonnage de récompense : concevoir des fonctions de récompense est difficile. Les récompenses éparses (uniquement au but) rendent l'exploration difficile. Les récompenses denses risquent le reward hacking — l'agent trouve des raccourcis qui maximisent la récompense sans résoudre la tâche visée.

Efficacité d'échantillonnage : le RL sans modèle nécessite souvent des millions d'interactions avec l'environnement. Les méthodes basées modèle et le RL offline (apprentissage à partir de données enregistrées) y remédient mais ajoutent de la complexité.

Transfert simulation-réel : les politiques entraînées en simulation échouent souvent dans le monde réel à cause du fossé de réalité. La randomisation de domaine et l'identification de système aident à le combler.

Multi-agent : quand plusieurs agents apprennent simultanément, l'environnement devient non stationnaire du point de vue de chaque agent. Les garanties de convergence ne tiennent plus.

Nous utilisons des cookies analytiques pour améliorer votre expérience. Aucune donnée personnelle n'est collectée.