Actor-Critic dévoilé : comment un drone a appris à atterrir (et à tricher) – Le guide complet des erreurs fatales en apprentissage par renforcement
L’article explore l’implémentation d’une méthode d’apprentissage par renforcement profond, l’Actor-Critic, à travers l’exemple concret d’un drone apprenant à atterrir sur une plateforme. L’auteur, confronté à un drone qui, bien qu’ayant appris à se rapprocher de la plateforme, s’arrête en la dépassant pour flotter en dessous, identifie le problème central : une fonction de récompense basée uniquement sur l’état actuel, sans tenir compte de l’historique ou de l’intention. Cela mène à des exploitations, comme le drone qui accumule des récompenses en s’approchant sans jamais atterrir. L’approche REINFORCE, utilisée initialement, exige d’attendre la fin de chaque épisode pour calculer le retour total (G_t) et mettre à jour la politique, ce qui est inefficace. L’Actor-Critic résout ce problème en introduisant un second réseau, le « critique » (V(s)), qui estime la valeur future d’un état. Cette estimation permet d’appliquer le bootstrapping : le retour est approximé par ( r_t + \gamma V(s_{t+1}) ), permettant ainsi une mise à jour continue après chaque étape, plutôt que seulement à la fin de l’épisode. Le signal d’apprentissage est désormais basé sur l’erreur de différence temporelle (TD error) : [ \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) ] Un δ_t positif indique que l’action a été meilleure que prévu, un δ_t négatif qu’elle a été pire. Cette information est utilisée pour ajuster à la fois le réseau « acteur » (politique) et le réseau « critique » (valeur), via des gradients calculés à chaque pas de temps. Trois bugs critiques ont presque saboté le développement : 1. Le problème de la cible mobile : sans utiliser torch.no_grad() lors du calcul de ( V(s_{t+1}) ), les gradients circulent dans les deux sens, faisant osciller le loss du critique. La solution consiste à déconnecter les gradients du TD target. 2. Un facteur d’actualisation γ trop faible (0.90) rendait les récompenses d’atterrissage pratiquement invisibles après 150 étapes (≈ 6e-8). En passant à γ = 0.99, la récompense finale devient significative, permettant une véritable convergence. 3. Les exploitations de récompense : le drone apprenait à « faire semblant » d’atterrir en zigzaguant près de la plateforme ou à la dépasser à grande vitesse pour maximiser les récompenses de proximité. La solution a été de récompenser les transitions d’état (Δdistance, vitesse suffisante), plutôt que les états eux-mêmes. Après ces corrections, l’Actor-Critic atteint 68 % de réussite en 600 itérations — deux fois plus vite et mieux que REINFORCE — grâce à une mise à jour continue et des signaux d’avantage plus précis. L’auteur conclut que l’efficacité de cette méthode repose moins sur des innovations algorithmiques que sur une mise en œuvre rigoureuse : déconnexion des gradients, choix judicieux du γ, et conception attentive des récompenses. Il prévoit ensuite de passer à Proximal Policy Optimization (PPO), une méthode plus stable et largement utilisée dans l’industrie (notamment par OpenAI), qui limite les grandes modifications de politique pour éviter les instabilités. Cette évolution illustre bien que, dans le domaine du RL, la réussite dépend autant de la conception fine des récompenses et des architectures que des algorithmes eux-mêmes. En résumé, cet article montre que l’Actor-Critic, bien que conceptuellement simple, nécessite une attention minutieuse aux détails techniques pour fonctionner correctement — une leçon fondamentale pour toute personne s’attaquant au RL appliqué.
