···55555656=== L'entraînement
57575858-#todo[Expliquer exploration vs exploitation et $gamma$]
5959-6058Une fois que ce cadre est posé, il reste à savoir _comment_ l'on va trouver la fonction qui associe un état de l'environnement à une action.
61596260Une première approche naïve, mais suffisante dans certains cas, consiste à faire une recherche exhaustive et à stocker dans un simple tableau la meilleure action à faire en fonction d'un état de l'environnement:
···88868987#exhaustive_memory_table(
9088 filled: false,
9191-)[ Exemple d'agent à mémoire exhaustive pour un "C'est plus ou c'est moins" dans ${ 0, 1, 2 }$, avec pour solution 2 ]
8989+)[ Mémoire exhaustive initiale pour un "C'est plus ou c'est moins" dans ${ 0, 1, 2 }$, avec pour solution 2 ]
92909391L'entraînement consiste donc ici en l'exploration de l'entièreté des états possibles de l'environnement, et, pour chaque état, le calcul du coût associé à chaque action possible.
9492···119117120118/ État actuel: devient la couche d'entrée
121119/ Meilleure action: devient la couche de sortie
122122-/ Coûts associés: deviennent les neurones des couches cachées
120120+/ Coûts associés: la fonction à optimiser par le réseau. Il peut s'agir d'une fonction qui permet au réseau de neurones d'approximer une autre fonction par supervision.
123121/ Le remplissage du tableau: devient la rétropropagation pendant l'entraînement
124122123123+==== Mise à jour (_Q-learning_)
124124+125125+Le score associé à un état $s_t$ et une action $a_t$, appelée $Q(s_t, a_t)$ ici pour "quality" @qlearning-etymology ou "action-value" @actionvalue, est mis à jour avec cette valeur @maxq:
126126+127127+$
128128+ (1 - alpha) underbrace(Q(s_t, a_t), "valeur actuelle") + alpha ( underbrace(R_(t+1), "récompense\npour cette action") + gamma underbrace(max_a Q(S_(t+1), a), "récompense de la meilleure\naction pour l'état suivant") )
129129+$
130130+131131+L'expression comporte deux hyperparamètres:
132132+133133+/ Learning rate $alpha$: contrôle à quel point l'on favorise l'évolution de $Q$ ou pas. // Il est commun de progressivement baisser $alpha$, ce qui donne lieu à des phases plus "exploratives" ($alpha$ élevé, exploration de nouvelles actions) ou "exploitative" ($alpha$ faible, exploitation des récompenses connues) #refneeded
134134+/ Discount factor $gamma$: contrôle l'importance que l'on donne aux récompenses futures. Il est utile de commencer avec une valeur faible puis l'augmenter avec le temps @maxq-discount.
135135+125136=== Difficultés liées à l'implémentation de la fonction coût
126137127138==== Tendances à la "tricherie" des agents
···136147137148Un exemple populaire est l'expérience de pensée du Maximiseur de trombones @trombones: un agent avec pour environnement le monde réel, pour actions "prendre des décisions"; "envoyer des emails"; etc. et pour fonction récompense (une fonction à maximiser au lieu de minimiser) "le nombre de trombones existant sur Terre", finirait possiblement par réduire en escalavage tout être vivant capable de produire des trombones: la fonction coût est sous-spécifiée
138149139139-==== Bug dans l'implémentation de l'environnement
140140-141141-142142-Bien évidemment, pour l'agent, tant qu'un bug n'est pas explicitement découragé par sa prise en compte dans la fonction coût. Si une action est favorable à l'amélioration du score, l'agent la prendra.
143143-144144-145150==== La validation comme méthode de mitigation <why_multiple_simulators>
146146-#comment[ça se dit mitigation en français?]
147151148152Comme ces bugs sont des comportements non voulus, il est très probables qu'ils ne soient pas exactement les mêmes d'implémentation à implémentation du même environnement.
149153···159163160164161165162162-== Entraînement par _curriculum_
163163-164164-== Mise à jour de la politique
166166+#todo[== Entraînement par _curriculum_]
165167166166-// #let section = content => pad(y: 1.5em, x: 3em, align(center, grid(align: horizon, columns: 3, gutter: 1em, line(length: 2em, stroke: 0.5pt), content, line(length: 2em, stroke: 0.5pt))))
167167-168168-=== _Q-learning_
169169-170170-Le score associé à un état $s_t$ et une action $a_t$, appelée $Q(s_t, a_t)$ ici pour "quality" @qlearning-etymology ou "action-value" @actionvalue, est mis à jour avec cette valeur @maxq:
171171-172172-$
173173- (1 - alpha) underbrace(Q(s_t, a_t), "valeur actuelle") + alpha ( underbrace(R_(t+1), "récompense\npour cette action") + gamma underbrace(max_a Q(S_(t+1), a), "récompense de la meilleure\naction pour l'état suivant") )
174174-$
175175-176176-L'expression comporte deux hyperparamètres:
177177-178178-/ Learning rate $alpha$: contrôle à quel point l'on favorise l'évolution de $Q$ ou pas. // Il est commun de progressivement baisser $alpha$, ce qui donne lieu à des phases plus "exploratives" ($alpha$ élevé, exploration de nouvelles actions) ou "exploitative" ($alpha$ faible, exploitation des récompenses connues) #refneeded
179179-/ Discount factor $gamma$: contrôle l'importance que l'on donne aux récompenses futures. Il est utile de commencer avec une valeur faible puis l'augmenter avec le temps @maxq-discount.
180180-181181-=== Évaluation de la performance d'une politique
168168+== Évaluation de la performance d'une politique
182169183170#let cL = $cal(L)$
184171#let proba = $bb(P)$
···196183/ $Pi: S -> A$: une politique
197184/ $Pi^*: S -> A$: la meilleure politique possible, celle que l'on cherche à approcher
198185/ $R: S -> RR^+$: sa fonction de récompense // d'une politique $p$
199199-/ $Q_p: S times A -> [0, 1]$: sa distribution de probabilité, qu'on suppose Markovienne (elle ne dépend que de l'état dans lequel on est). $Q_p (s_t, a_t)$ est la probabilité que $p$ choisisse $a_t$ _quand on est dans l'état_ $s_t$ ($s_t$ est l'état *pré*-action, et non post-action)
186186+/ $Q_pi: S times A -> [0, 1]$: sa distribution de probabilité, qu'on suppose Markovienne (elle ne dépend que de l'état dans lequel on est). $Q_pi (s_t, a_t)$ est la probabilité que $pi$ choisisse $a_t$ _quand on est dans l'état_ $s_t$ ($s_t$ est l'état *pré*-action, et non post-action)
200187/ $Q$ et $Q^*$: $Q_Pi$ et $Q_(Pi^*)$, pour alléger les notations
201188// $R$: $R_Pi$
202189···209196$
210197211198212212-==== Chemins d'états possibles $cal(C)$
199199+=== Chemins d'états possibles $cal(C)$
213200214201215202···251238252239253240$
254254- cal(C)_p := setbuilder(
241241+ cal(C)_pi := setbuilder(
255242 (s_t, a_t)_(t in NN) " avec "
256243 cases(
257244 & a_0 & = p(s_0),
···280267281268On notera que, selon $M$, on peut avoir $cal(C) subset.neq (S times A)^NN$: par exemple, certains états de l'environnement peuvent représenter des "impasses", où il est impossible d'évoluer vers un autre état, peut importe l'action choisie.
282269283283-On note aussi que $cal(C)$ (et donc $cal(C)_p$ aussi) est dénombrable, étant construit à partir de $(S times A)^NN$ et $S$, $A$ et $NN$ étant aussi dénombrables#footnote[
270270+On note aussi que $cal(C)$ (et donc $cal(C)_pi$ aussi) est dénombrable, étant construit à partir de $(S times A)^NN$ et $S$, $A$ et $NN$ étant aussi dénombrables#footnote[
284271 On a $card cal(C) <= card((S times A)^NN) = card(S times A)^(card NN) = (card S card A)^(card NN) <= (aleph_0)^(card NN) = attach(aleph_0, tl: 2) = aleph_0$
285272]
286273···289276]
290277#comment[pas sûre de cette phrase]
291278292292-==== Récompense attendue $eta$
279279+=== Récompense attendue $eta$
293280294294-$eta$ représente la récompense moyenne à laquelle l'on peut s'attendre pour une politique $p$ avec fonction de récompense $r$.
281281+$eta$ représente la récompense moyenne à laquelle l'on peut s'attendre pour une politique $pi$ avec fonction de récompense $r$.
295282296283Elle prend en compte le _discount factor_ $gamma$ : les récompenses des actions deviennent de moins en moins#footnote[En supposant $gamma < 1$, ce qui est souvent le cas #refneeded #todo[Mettre dans la def de $gamma$]] importantes avec le temps. $eta$ est définie ainsi @trpo
297284···303290 sum_((c_t)_(t in NN) in cal(S))
304291 underbracket(
305292 rho_0(s_0)
306306- product_(t=0)^oo Q_p (c_t), "probabilité du chemin"
293293+ product_(t=0)^oo Q_pi (c_t), "probabilité du chemin"
307294 )
308295 quad
309296 underbracket(sum_(t=0)^oo gamma^t r(c_t), "récompense associée"),
···322309323310324311325325-==== Avantage $A$
312312+=== Avantage $A$
326313327314328328-// L'avantage $A_(p, r)(s, a)$ représente l'écart entre la récompense (au sens de $r$) attendue _après avoir choisi $a$_ et la récompense attendue _en considérant toutes les actions possibles depuis $s$_.
315315+// L'avantage $A_(pi, r)(s, a)$ représente l'écart entre la récompense (au sens de $r$) attendue _après avoir choisi $a$_ et la récompense attendue _en considérant toutes les actions possibles depuis $s$_.
329316330330-L'avantage $A_(p, r)(s, a)$ mesure à quel point il est préférable de choisir l'action $a$ quand on est dans l'état $s$ (pour la politique $p$, avec "préférable" au sens de $(r(S), >=)$)
317317+L'avantage $A_(pi, r)(s, a)$ mesure à quel point il est préférable de choisir l'action $a$ quand on est dans l'état $s$ (pour la politique $pi$, avec "préférable" au sens de $(r(S), >=)$)
331318332319On peut visualiser ce calcul ainsi:
333320···373360 node((5, -0.5))
374361})
375362376376-Pour calculer $A_(p, r)(s, a)$, on regarde l'espérance des récompenses cumulées pour tout chemin commençant par $s$, et on la compare à celle pour tout chemin commençant par $M(s, a)$
363363+Pour calculer $A_(pi, r)(s, a)$, on regarde l'espérance des récompenses cumulées pour tout chemin commençant par $s$, et on la compare à celle pour tout chemin commençant par $M(s, a)$
377364378365$
379379- A_(p, r)(s, a) :=
366366+ A_(pi, r)(s, a) :=
380367 underbracket(
381368 exp_((s_t, a_t)_(t in NN) op(~) p op(in) cal(S) \ s_0 = s \ s_1 = M(s_0, a)) sum_(t=0)^oo gamma^t r(s_t),
382369 Q(s, a)
···395382396383En suite, il suffit de faire la différence, pour savoir l'_avantage_ que l'on a à choisir $a_t$ par rapport au reste.
397384398398-==== Lien entre $eta$ et $A$
385385+=== Lien entre $eta$ et $A$
399386400387Pour une fonction de récompense $r$ donnée, $A$ permet de calculer $eta$ pour une politique $p$ en fonction de la valeur de $eta$ pour une autre politique $p'$ @trpo-advantage-eta-link
401388···404391405392406393$
407407- eta(p', r) & = eta(p, r) + policyexp(p') sum_(t=0)^oo gamma^t A_(p, r)(c_t) \
394394+ eta(p', r) & = eta(p, r) + policyexp(p') sum_(t=0)^oo gamma^t A_(pi, r)(c_t) \
408395 & #[Qui se simplifie en @trpo] \
409396 & = eta(p, r) + sum
410397$
411398412399413413-==== _Surrogate advantage_ $cL$
400400+=== _Surrogate advantage_ $cL$
414401415402Il est théoriquement possible d'utiliser $A$ pour optimiser une politique, en maximisant sa valeur à un état donné:
416403···446433Le _surrogate advantage_ détermine la performance d'une politique par rapport à une autre
447434448435$
449449- cL_r (p', p) := exp_((s_t, a_t)_(t in NN) in cal(C)) sum_(t=0)^oo (Q_p (s_t, a_t)) / (Q_p' (s_t, a_t)) A_(p, r)(s_t, a_t)
436436+ cL_r (pi', pi) := exp_((s_t, a_t)_(t in NN) in cal(C)) sum_(t=0)^oo (Q_pi (s_t, a_t)) / (Q_pi' (s_t, a_t)) A_(pi, r)(s_t, a_t)
450437$
451438452439453453-440440+== Méthodes d'optimisation de politique
454441455442=== _Trust Region Policy Optimization_
456443···489476$
490477491478492492-En notant $Q_p (s, dot) := a |-> Q_p (s, a)$. On a donc ici "$cal(X) = A$" dans la définition de $D_"KL"$
479479+En notant $Q_pi (s, dot) := a |-> Q_pi (s, a)$. On a donc ici "$cal(X) = A$" dans la définition de $D_"KL"$
493480494481==== Pourquoi faire le maximum sur chaque $s in S$ ?
495482