Résoudre des tâches à récompenses éparses avec Curiosity

Nous venons de publier la nouvelle version de la boîte à outils ML-Agents (v0.4), et l'une des nouvelles fonctionnalités que nous sommes ravis de partager avec tout le monde est la possibilité de former des agents avec une récompense intrinsèque supplémentaire basée sur la curiosité.
Comme il y a beaucoup de choses à déballer dans cette fonctionnalité, j'ai voulu écrire un article de blog supplémentaire à ce sujet. En substance, il existe désormais un moyen simple d'encourager les agents à explorer l'environnement de manière plus efficace lorsque les récompenses sont peu fréquentes et distribuées de manière éparse. Ces agents peuvent le faire en utilisant une récompense qu'ils s'attribuent en fonction de leur surprise quant au résultat de leurs actions. Dans ce billet, j'expliquerai le fonctionnement de ce nouveau système, puis je montrerai comment nous pouvons l'utiliser pour aider notre agent à résoudre une tâche qui serait autrement beaucoup plus difficile à résoudre pour un algorithme d'apprentissage par renforcement (RL) classique.
Dans le cadre de l'apprentissage par renforcement, le principal signal d'apprentissage prend la forme d'une récompense : une valeur scalaire fournie à l'agent après chaque décision qu'il prend. Cette récompense est généralement fournie par l'environnement lui-même et spécifiée par le créateur de l'environnement. Ces récompenses correspondent souvent à des choses comme +1.0 pour atteindre l'objectif, -1.0 pour mourir, etc. Nous pouvons considérer ce type de récompenses comme extrinsèques, car elles proviennent de l'extérieur de l'agent. S'il existe des récompenses extrinsèques, cela signifie qu'il doit y avoir aussi des récompenses intrinsèques. Plutôt que d'être fournies par l'environnement, les récompenses intrinsèques sont générées par l'agent lui-même sur la base de certains critères. Bien entendu, toute récompense intrinsèque n'est pas suffisante. Nous voulons des récompenses intrinsèques qui, en fin de compte, servent à quelque chose, par exemple à modifier le comportement de l'agent de manière à ce qu'il obtienne des récompenses extrinsèques encore plus importantes à l'avenir, ou que l'agent explore le monde plus qu'il ne l'aurait fait autrement. Chez l'homme et les autres mammifères, la recherche de ces récompenses intrinsèques est souvent appelée motivation intrinsèque et est étroitement liée à notre sentiment d'autonomie.
Les chercheurs dans le domaine de l'apprentissage par renforcement ont beaucoup réfléchi à la mise au point de bons systèmes pour fournir des récompenses intrinsèques aux agents, ce qui leur confère une motivation similaire à celle que l'on trouve chez les agents naturels. Une approche populaire consiste à doter l'agent d'un sens de la curiosité et à le récompenser en fonction de l'étonnement qu'il éprouve face au monde qui l'entoure. Si vous réfléchissez à la manière dont un jeune bébé apprend à connaître le monde, il ne poursuit pas un objectif spécifique, mais joue et explore plutôt pour la nouveauté de l'expérience. On peut dire que l'enfant est curieux. L'idée de l'exploration guidée par la curiosité est d'insuffler ce type de motivation à nos agents. Si l'agent est récompensé pour avoir atteint des états qui le surprennent, il apprendra des stratégies pour explorer l'environnement afin de trouver des états de plus en plus surprenants. En cours de route, l'agent découvrira également, espérons-le, la récompense extrinsèque, telle qu'un objectif éloigné dans un labyrinthe ou une ressource éparse dans un paysage.
Nous avons choisi de mettre en œuvre une approche spécifique tirée d'un article publié l'année dernière par Deepak Pathak et ses collègues de Berkeley. Elle s'intitule Curiosity-driven Exploration by Self-supervised Prediction, et vous pouvez lire l'article ici si vous êtes intéressé par tous les détails. Dans cet article, les auteurs formulent l'idée de curiosité de manière intelligente et généralisable. Ils proposent de former deux réseaux neuronaux distincts : un modèle direct et un modèle inverse. Le modèle inverse est entraîné à prendre l'observation actuelle et l'observation suivante reçues par l'agent, à les coder toutes les deux à l'aide d'un seul codeur et à utiliser le résultat pour prédire l'action qui a été entreprise entre l'occurrence des deux observations. Le modèle avancé est ensuite entraîné à prendre l'observation et l'action actuelles codées et à prédire l'observation suivante codée. La différence entre les codages prédits et réels est alors utilisée comme récompense intrinsèque et transmise à l'agent. Une plus grande différence signifie une plus grande surprise, qui à son tour signifie une plus grande récompense intrinsèque.
En utilisant ces deux modèles ensemble, la récompense ne se contente pas de capturer les choses surprenantes, mais elle capture spécifiquement les choses surprenantes sur lesquelles l'agent a un contrôle, sur la base de ses actions. Leur approche permet à un agent formé sans récompense extrinsèque de progresser dans Super Mario Bros simplement sur la base de sa récompense intrinsèque. Vous trouverez ci-dessous un diagramme extrait du document décrivant le processus.

Pour mettre la curiosité à l'épreuve, un environnement ordinaire ne suffit pas. La plupart des exemples d'environnements que nous avons publiés dans la version 0.3 de la boîte à outils ML-Agents contiennent des récompenses relativement denses qui ne bénéficieraient pas vraiment de la curiosité ou d'autres méthodes d'amélioration de l'exploration. Pour mettre à l'épreuve la nouvelle curiosité de nos agents, nous avons créé un nouvel environnement peu gratifiant appelé Pyramides. Il n'y a qu'une seule récompense, et l'exploration aléatoire permettra rarement à l'agent de la rencontrer. Dans cet environnement, notre agent prend la forme du cube bleu familier de certains de nos environnements précédents. L'agent peut se déplacer vers l'avant ou l'arrière et tourner à gauche ou à droite, et il a accès à une vue du monde environnant grâce à une série de rayons provenant de l'avant du cube.

Cet agent est lâché dans un espace clos contenant neuf pièces. L'une de ces salles contient un interrupteur placé au hasard, tandis que les autres contiennent des pyramides de pierre inamovibles placées au hasard. Lorsque l'agent interagit avec l'interrupteur en le heurtant, l'interrupteur passe du rouge au vert. Parallèlement à ce changement de couleur, une pyramide de briques de sable mobiles est générée de manière aléatoire dans l'une des nombreuses pièces de l'environnement. Au sommet de cette pyramide se trouve une seule brique d'or. Lorsque l'agent entre en collision avec cette brique, il reçoit une récompense extrinsèque de +2. L'astuce, c'est qu'il n'y a pas de récompenses intermédiaires pour se déplacer dans de nouvelles pièces, appuyer sur l'interrupteur ou renverser la tour. L'agent doit apprendre à exécuter cette séquence sans aucune aide intermédiaire.

Les agents formés à l'aide d'une méthode vanille d'optimisation de la politique proximale (PPO, notre algorithme RL par défaut dans ML-Agents) pour cette tâche obtiennent des résultats médiocres, ne faisant souvent pas mieux que le hasard (récompense moyenne de -1), même après 200 000 étapes.
En revanche, les agents formés à l'OPP et à la récompense intrinsèque "Curiosity-Driven" le résolvent systématiquement en moins de 200 000 épisodes, et souvent même en moitié moins de temps.

Nous avons également examiné les agents formés uniquement avec le signal de récompense intrinsèque et, bien qu'ils n'apprennent pas à résoudre la tâche, ils apprennent une politique qualitativement plus intéressante qui leur permet de se déplacer entre plusieurs pièces, par rapport à la politique extrinsèque uniquement qui permet à l'agent de se déplacer dans de petits cercles à l'intérieur d'une seule pièce.
Si vous souhaitez utiliser la curiosité pour aider à former des agents dans vos environnements, il est facile de l'activer. Tout d'abord, téléchargez la dernière version de la boîte à outils ML-Agents, puis ajoutez la ligne suivante au fichier d'hyperparamètres du cerveau que vous souhaitez entraîner : `use_curiosity : true`. À partir de là, vous pouvez commencer le processus de formation comme d'habitude. Si vous utilisez TensorBoard, vous remarquerez qu'il y a maintenant quelques nouvelles mesures qui sont suivies. Il s'agit notamment de la perte du modèle direct et inverse, ainsi que de la récompense intrinsèque cumulée par épisode.
Donner de la curiosité à votre agent n'est pas utile dans toutes les situations. En particulier, si votre environnement contient déjà une fonction de récompense dense, comme nos environnements Crawler et Walker, où une récompense non nulle est reçue après la plupart des actions, vous risquez de ne pas voir beaucoup d'améliorations. Si votre environnement ne contient que des récompenses éparses, l'ajout de récompenses intrinsèques peut faire passer ces tâches d'insolubles à facilement résolubles grâce à l'apprentissage par renforcement. Ce principe est particulièrement applicable lorsqu'il s'agit de récompenses simples telles que gagner/perdre ou accomplir/échouer une tâche.
---
Si vous utilisez la fonction Curiosité, j'aimerais connaître votre expérience. N'hésitez pas à nous contacter sur notre page de problèmes GitHub, ou à nous envoyer un courriel directement à ml-agents@unity3d.com. Bonne formation !
