# Apprentissage par renforcement

En intelligence artificielle, plus précisément en apprentissage automatique, l'apprentissage par renforcement consiste, pour un agent autonome (ex. : robot, agent conversationnel, personnage dans un jeu vidéo, etc.), à apprendre les actions à prendre, à partir d'expériences, de façon à optimiser une récompense quantitative au cours du temps. L'agent est plongé au sein d'un environnement et prend ses décisions en fonction de son état courant. En retour, l'environnement procure à l'agent une récompense, qui peut être positive ou négative. L'agent cherche, au travers d'expériences itérées, un comportement décisionnel (appelé stratégie ou politique, et qui est une fonction associant à l'état courant l'action à exécuter) optimal, en ce sens qu'il maximise la somme des récompenses au cours du temps.
L'apprentissage par renforcement est l'une des trois grandes techniques d'apprentissage automatique, au côté de l'apprentissage supervisé et de l'apprentissage non supervisé.

## Applications

L'apprentissage par renforcement est utilisé dans plusieurs applications : robotique, gestion de ressources, vol d'hélicoptères, chimie. Cette méthode a été appliquée avec succès à des problèmes variés, tels que le contrôle robotique$^,$, le pendule inversé, la planification de tâches, les télécommunications, le backgammon et les échecs$^,$.
En 2015, Mnih et al. ont montré que l'apprentissage par renforcement permettait de créer un programme jouant à des jeux Atari. Leur système apprend à jouer à des jeux, en recevant en entrée les pixels de l'écran et le score. Un point intéressant est que leur système n'a pas accès à l'état mémoire interne du jeu (sauf le score). En 2018, Hessel et al. ont combiné plusieurs techniques pour améliorer les performances du programme. Plus récemment, AlphaGo Zero est une nouvelle technique d'apprentissage par renforcement où l'agent apprend en étant son propre professeur.
Lillicrap et al. ont utilisé l'apprentissage par renforcement pour faire apprendre 20 tâches physiques à un système, comme relever un pendule, conduire une voiture, déplacer un robot sur pattes, et autres manipulations de dextérité.
L'apprentissage par renforcement est utilisé pour résoudre des problèmes d'optimisation, comme le problème de bin packing 3D. Pour le problème de bin packing 3D, il s'agit d'empiler des cubes de différentes tailles avec des contraintes (comme ne pas dépasser le volume disponible, ou "une boîte ne peut être au dessus d'une autre", etc.), en optimisant par exemple la hauteur totale. Dans un cadre apprentissage par renforcement, l'agent choisit de tourner une boîte, de placer une boîte à un certain endroit, etc.

## Histoire

L'apprentissage par renforcement dérive de formalisations théoriques de méthodes de contrôle optimal, visant à mettre au point un contrôleur permettant de minimiser au cours du temps une mesure donnée du comportement d'un système dynamique. La version discrète et stochastique de ce problème est appelée un processus de décision markovien et fut introduite par Bellman en 1957.
Parmi les premiers algorithmes d'apprentissage par renforcement, on compte le temporal difference learning (TD-learning), proposé par Richard Sutton en 1988, et le Q-Learning mis au point essentiellement par Chris Watkins en 1989 (thèse publiée en 1992).

## Interface agent-environnement
### Processus de décision markovien

Classiquement, l'apprentissage par renforcement repose sur un processus de décision markovien (MDP), qui propose un cadre pour le problème d'apprendre à réaliser un but. Un agent apprend et prend des décisions. Il réagit face à un environnement. Un problème peut-être défini comme un processus de décision markovien, lorsqu'il présente les propriétés suivantes :
* un ensemble fini d'états ${\mathcal {S}}$ de l'agent dans l'environnement. Un état peut inclure la position d'un agent, sa vitesse, la position d'autres objets ;
* un ensemble fini d'actions ${\mathcal {A}}$ que l'agent peut effectuer ; Les actions peuvent être de bas niveau comme faire passer du courant dans un moteur d'un des bras d'un robot. Elles peuvent aussi être de haut niveau comme décider de prendre un petit déjeuner. Elles peuvent aussi être mentales ou calculatoires comme décider de faire attention à un objet et de lancer un traitement d'images sur ce dernier ;
* un ensemble de valeurs scalaires "récompenses" que l'agent peut obtenir. La récompense peut être à chaque étape comme gagner de l'altitude pour un objet volant, le score dans un jeu vidéo. Elle peut aussi être uniquement donnée qu'à la fin de partie : elle vaut typiquement 1 quand l'agent gagne et 0 quand il perd.

### Trajectoire

À chaque pas de temps t, l'agent perçoit son état $S_{t}\in {\mathcal {S}}$. C'est une variable aléatoire. Il perçoit a priori l'ensemble des actions possibles dans l'état $S_{t}$, même si l'on peut supposer pour simplifier que l'ensemble des actions est le même dans tous les états. Il choisit une action $A_{t}$ et reçoit de l'environnement un nouvel état $S_{t+1}$ et une récompense $R_{t+1}$. Ainsi, l'agent évolue dans l'environnement et la séquence des états-actions-récompenses s'appelle une trajectoire, et est définie comme suit :
S$_0$, A$_0$, R$_1$, S$_1$, A$_1$, R$_2$, S$_2$, A$_2$, R$_3$, ...

### Politique

À partir de ses interactions, un algorithme d'apprentissage par renforcement calcule une politique $\pi :{\mathcal {S}}\rightarrow {\mathcal {A}}$, c'est-à-dire une fonction qui à chaque état préconise une action à exécuter, dont on espère qu'elle maximise les récompenses. La politique peut aussi être probabiliste. Dans ce cas, la politique s'écrit $\pi :{\mathcal {A}}\times {\mathcal {S}}\rightarrow [0,1]$, c'est-à-dire que $\pi (a,s)=\Pr(a_{t}=a\mid s_{t}=s)$ est la probabilité que l'agent choisisse d'exécuter a dans l'état s.

### Gain

Afin de quantifier le bon apprentissage de l'algorithme, on introduit le gain comme étant la somme des récompenses obtenues : $G=R_{0}+R_{1}+\cdots +R_{T}$ où T est le temps où on atteint un état terminal dans le processus de décision markovien (MDP). Pour des MDPs sans état terminal, la somme infinie $G=R_{0}+R_{1}+\cdots$ n'est peut-être pas bien définie. C'est pourquoi l'on introduit un facteur de dévaluation $\gamma$ compris entre 0 et 1. On pose alors $G=\sum _{t=0}^{\infty }\gamma ^{t}R_{t}$ qui est convergente et bien définie. Selon la valeur de $\gamma$, on prend en compte les récompenses plus ou moins loin dans le futur pour le choix des actions de l'agent. Si $\gamma$ = 0, l'agent est myope et ne prend que la récompense immédiate $R_{0}$ (en admettant que $0^{0}=1$).
Ainsi, la méthode de l'apprentissage par renforcement est particulièrement adaptée aux problèmes nécessitant un compromis entre la quête de récompenses à court terme et celle de récompenses à long terme.

## Exploitation-exploration

Un agent apprenant est sujet au compromis entre l'exploitation (refaire des actions, dont il sait qu'elles vont lui donner de bonnes récompenses) et l'exploration (essayer de nouvelles actions, pour apprendre de nouvelles choses). Ce compromis est bien illustré par l'exemple des bandits manchots. Dans ce cadre, il y a k machines à sous, dont la loi de probabilité est inconnue de l'agent apprenant (sinon, il utiliserait toujours une machine à sous d'espérance maximale). L'agent tire les bras des machines. Il peut alors soit :
* exploiter ses connaissances et tirer les bras des machines qui lui ont apporté le plus de profit jusqu'à présent ;
* explorer, i.e. tester des bras non tirés ou dont le gain était plus faible. Le but de l'exploration est de découvrir une machine à sous prolifique.
Exploiter sans jamais explorer est une approche gloutonne. L'exploitation repose sur la définition de la valeur courante à un certain temps t d'un bras d'une machine noté a (pour action) :
$Q_{t}(a):={\frac {{\text{somme des récompenses reçues par l'action }}a{\text{ avant le temps }}t}{{\text{nombre de fois que l'action }}a{\text{ a été tirée avant le temps }}t}}$.
Le choix glouton consiste à choisir une action a qui maximise $Q_{t}(a)$. Dans cette approche gloutonne, l'agent exploite une des meilleures actions mais n'explore pas d'autres actions qui sont d'apparences moins bonnes. Le problème de l'approche gloutonne (exploitation seulement) est que l'on n'atteint pas une politique optimale.

## Algorithmes
### Propriétés des algorithmes d'apprentissage

Model-based VS model-free. L'algorithme est basé sur un modèle (model-based) s'il prend le modèle de l'environnement en entrée. Typiquement, l'algorithme prend le processus de décision markovien en entrée. En particulier l'algorithme a accès à la fonction de transition et aux probabilités. L'algorithme a accès à $p(s',r\mid s,a)$, la probabilité d'être dans l'état $s'$ et d'avoir la récompense $r$ depuis l'état $s$ en exécutant l'action $a$. A contrario, un algorithme est model-free s'il n'utilise pas de modèle en entrée. L'algorithme n'utilise pas les probabilités $p(s',r\mid s,a)$ car il ne les connait pas. Par contre bien sûr, un algorithme model-free dispose de structures de données pour les états et les actions.
On-policy VS off-policy. L'algorithme est on-policy (par exemple SARSA) lorsqu'il évalue et améliore la politique, qui est la même que celle utilisée pour prendre des décisions durant l'apprentissage. L'algorithme est off-policy (par exemple Q-learning) si la politique évaluée et améliorée est différente de celle que l'agent utilise pour prendre des décisions lors de l'apprentissage. On distingue alors la politique cible (target policy) qui est la politique apprise, de la politique décisionnelle (behavior policy). Les algorithmes off-policy sont généralement plus lents à converger. Par contre les algorithmes off-policy sont plus généralisables (les algorithmes on-policy sont finalement off-policy où la politique cible et la politique décisionnelle sont les mêmes). Les algorithmes off-policy peuvent être utilisés lorsque les épisodes sont générés par un contrôleur non conventionnel, ou par un expert humain.
Bootstrap. Un algorithme évalue les états dans lesquels il est bon d'être. On dit qu'il "bootstrap" s'il évalue les états en utilisant les précédentes évaluations. Au contraire, des algorithmes comme Monte Carlo lancent des simulations jusqu'à atteindre un état final pour évaluer et n'utilisent pas d'évaluations précédentes. L'algorithme Monte Carlo ne "bootstrap" pas.
Tabulaire VS approximation. Un algorithme tabulaire stocke dans un tableau les valeurs d'un état en exécutant la politique courante (c'est-à-dire s'il est bon d'être dans un état - car soit il est intrinsèquement bon, soit parce qu'en suivant la politique depuis cet état, la récompense obtenue sera plus importante). Typiquement, on stocke dans un tableau $V$ les valeurs $V(s)$ pour chaque état. D'autres algorithmes stockent à quel point il est bon de jouer une action a dans un état s via un tableau $Q$ qui stocke des valeurs $Q(s,a)$. Vu le nombre important d'états (problème appelé malédiction de la dimension), certains algorithmes utilisent une approximation de cette table.
Valued-based VS policy-gradient. Un algorithme valued-based apprend la valeur $V(s)$ d'être dans un état s, ou alors Q(s, a) qui est la valeur de jouer l'action a dans l'état s. La politique apprise consiste alors à jouer l'action a qui maximise la valeur. SARSA, Q-learning, TD(0) sont valued-based. Un algorithme policy-gradient manipule directement une politique (représentée avec des paramètres). REINFORCE est policy-gradient.
La table suivante donne les quatre grandes classes d'algorithmes. La table donne aussi les diagrammes backup qui sont des diagrammes utilisés dans la littérature et qui résument comment les algorithmes fonctionnent. Dans ces diagrammes, un cercle blanc représente un état ; un point noir représente une action.
| | Pas de branchement. Généralement pas besoin de modèle car on intéragit avec l'environnement. | Branchement. Besoin du modèle pour connaître les actions et les états suivants. |
| Bootstrap. L'évaluation d'un état se fait en fonction des évaluations précédentes (des états suivants). | Temporal-difference learning | Programmation dynamique |
| Pas de bootstrap. Évaluation sur tout un épisode jusqu'à atteindre un état final. | Monte Carlo | Recherche exhaustive (planification) |

### Itération sur politique générale

L'idée est de calculer une politique a priori optimale par une itération de deux étapes :
* Évaluation de la politique courante. L'algorithme manipule une table $V$ où pour tout état $s\in {\mathcal {S}}$, la valeur $V(s)$ indique s'il est bon, selon la politique courante, d'être dans l'état $s$.
* Amélioration de la politique courante. Généralement, on utilise une approche gloutonne pour améliorer la politique. Dans chaque état $s$, on modifie $\pi (s)$ pour choisir l'action qui maximise le gain, selon les valeurs présentes dans la table $V$.
L'idée d'itération sur politique générale se trouve dans les approches décrites ci-dessous.

### Programmation dynamique

La programmation dynamique est une collection d'algorithmes pour calculer des politiques optimales dans le cas où le MDP est connu. Autrement dit, les comportements de l'environnement sont connus par l'algorithme. Bien que ce cadre ne soit pas réaliste, la programmation dynamique est importante d'un point de vue théorique. On présente ici deux algorithmes : une itération sur politique (qui implémente l'itération sur politique générale présentée plus haut) ; et une itération sur valeur. Selon Sutton et Barto, il est en pratique difficile d'identifier a priori, le meilleur des deux algorithmes.

#### Itération sur politique avec programmation dynamique

L'itération sur politique consiste à évaluer la valeur $V$ de la politique courante $\pi$. L'algorithme part d'une politique $\pi$ choisie arbitrairement. Puis successivement : 1. on évalue la politique ; 2. on utilise cette évaluation pour améliorer la politique en cherchant la meilleure action pour chaque état. L'algorithme s'arrête quand la politique n'est plus modifiée. Voici le pseudo-code l'itération sur politique :
Ainsi, l'exécution de l'itération sur politique peut se représenter comme une séquence
$\pi _{0}\xrightarrow {E} v_{\pi _{0}}\xrightarrow {I} \pi _{1}\xrightarrow {E} v_{\pi _{1}}\xrightarrow {I} \pi _{2}\xrightarrow {E} \dots \xrightarrow {I} \pi _{*}$
où $\pi _{0}$ est la politique initiale, $\xrightarrow {E}$ est une étape d'évaluation de la politique, $\xrightarrow {I}$ est une étape d'amélioration de la politique.

#### Itération sur valeur

L'itération sur valeur est similaire à l'itération sur politique mais combine l'évaluation de la politique et son amélioration dans la même boucle pour.

### Monte Carlo

Les méthodes de Monte Carlo diffèrent de l'approche programmation dynamique sur deux aspects. Tout d'abord, avec Monte Carlo, on tire aléatoirement des expériences, et du coup on peut apprendre sans connaître le modèle. Mais aussi elle ne se base pas sur du bootstrap : les valeurs estimées ne sont pas mises à jour en fonction de valeurs estimées précédentes.

### Temporal-difference learning

Temporal-difference learning (TD) combine les idées de programmation dynamique et Monte Carlo. Tout comme programmation dynamique, il y a du bootstrap dans TD : les valeurs estimées se basent sur les valeurs estimées précédentes. Comme Monte Carlo, TD n'a pas besoin de modèle et peut apprendre directement à partir d'expériences. Par contre, contrairement à Monte Carlo, le bootstrap fait qu'on n'est pas obligé d'atteindre la fin d'un épisode pour commencer à apprendre.

#### Évaluation de la politique courante

L'algorithme prend en entrée une politique $\pi$. L'évaluation, c'est-à-dire le calcul de la valeur V se fait directement en interagissant avec l'environnement.

#### Itération sur politique

Il existe plusieurs algorithmes qui reposent sur le schéma de l'itération sur politique générale. SARSA est on-policy alors que le Q-learning est off-policy.

### Apprentissage par renforcement profond

Comme la résolution d'un problème d'apprentissage par renforcement passe par l'évaluation de fonctions (politique optimale ou bien valeur optimale), plusieurs chercheurs ont suggéré l'approximation de ces fonction par des réseaux de neurones artificiels pour l'apprentissage par renforcement profond. Ces réseaux de neurones approximent alors la Q-valeur (Deep Q-Learning) ou bien la politique optimale (Policy Gradient). Cette dernière approche est la plus courante pour la résolution de problèmes d'apprentissage complexes.

## Malédiction de la dimension

Les algorithmes présentés ci-dessus souffrent d'un énorme espace d'état. On parle de la malédiction de la dimension (curse of dimensionality en anglais). Par exemple, le nombre d'images possibles d'une caméra est plus grand que le nombre d'atomes de l'univers. Il y a plusieurs solutions pour accélérer le calcul. La première est de se restreindre à des régions locales de l'espace des états$^,$$^,$$^,$. Une première tentative pour réduire le nombre d'états est l'abstraction$^,$ (oublier des éléments d'un état, bisimulation, etc.). Toutefois, l'approximation semble prometteuse - au lieu de programmation dynamique, on parle de programmation dynamique approximative.
Les algorithmes d'apprentissage par renforcement souffrent également par la taille de l'espace d'action. Afin de diviser les espaces d'état et d'action, des chercheurs ont cherché des décompositions naturelles de ces espaces à travers l'Apprentissage par renforcement hiérarchique. Ce type d'apprentissage regroupe les techniques de division d'espace en région ou encore l'apprentissage de compétence comme une suite d'action alors nommée option.

## Comparaison avec d'autres méthodes

Contrairement aux algorithmes génétiques, au recuit simulé, qui manipulent une politique/un plan dans son ensemble (un algorithme génétique va brasser plusieurs plans et produire une nouvelle génération de plans ; le recuit simulé va comparer des plans dans leur globalité), l'apprentissage par renforcement repose sur la notion d'état et l'évaluation des actions.

## Lien avec la biologie

La formalisation des problèmes d'apprentissage par renforcement s'est aussi inspirée de théories de psychologie animale, comme celles analysant comment un animal peut apprendre par essais-erreurs à s'adapter à son environnement. Ces théories ont beaucoup inspiré le champ scientifique de l'intelligence artificielle et ont beaucoup contribué à l'émergence d'algorithmes d'apprentissage par renforcement au début des années 1980.
En retour, le raffinement actuel des algorithmes d'apprentissage par renforcement inspire les travaux des neurobiologistes et des psychologues pour la compréhension du fonctionnement du cerveau et du comportement animal. En effet, la collaboration entre neurobiologistes et chercheurs en intelligence artificielle a permis de découvrir qu'une partie du cerveau fonctionnait de façon très similaire aux algorithmes d'apprentissage par renforcement tels que le TD-learning. Il semblerait ainsi que la nature ait découvert, au fil de l'évolution, une façon semblable à celles trouvées par des chercheurs pour optimiser la façon dont un agent ou organisme peut apprendre par essais-erreurs. Ou plutôt, les chercheurs en intelligence artificielle ont redécouvert en partie ce que la nature avait mis des millions d'années à mettre en place. En effet, la zone du cerveau qui montre des analogies avec les algorithmes d'apprentissage par renforcement s'appelle les ganglions de la base, dont une sous-partie appelée la substance noire émet un neuromodulateur, la dopamine, qui renforce chimiquement les connexions synaptiques entre les neurones. Ce fonctionnement des ganglions de la base a été identifié comme existant chez l'ensemble des vertébrés, et on retrouve le même genre de résultats en imagerie médicale chez l'homme.
Enfin, la boucle d'échange scientifique entre neurobiologistes, psychologues et chercheurs en intelligence artificielle n'est pas terminée puisque actuellement, des chercheurs prennent inspiration du cerveau pour raffiner les algorithmes d'apprentissage par renforcement et essayer ainsi de mettre au point des robots plus autonomes et adaptatifs que ceux existants. En effet, même si la nature et les chercheurs semblent avoir trouvé séparément une même solution pour résoudre certains types de problèmes tels que ceux décrits au paragraphe précédent, on se rend bien compte que l'intelligence des robots actuels est encore bien loin de celle de l'homme ou même de celle de nombreux animaux tels que les singes ou les rongeurs. Une voie prometteuse pour pallier cela est d'analyser plus en détail comment le cerveau biologique paramétrise et structure anatomiquement des processus tels que l'apprentissage par renforcement, et comment il intègre ces processus avec d'autres fonctions cognitives telles que la perception, l'orientation spatiale, la planification, la mémoire, et d'autres afin de reproduire cette intégration dans le cerveau artificiel d'un robot.