Décider et apprendre~: utilité, processus de décision markoviens, Q-learning, descente de gradient
Département de Mathématiques et Informatique, Faculté des Sciences et Techniques, Université Cheikh Anta Diop de Dakar
Ce que la séance construit
Passer de la croyance à l’action : choisir la meilleure action par l’utilité espérée, puis une règle de conduite sur plusieurs étapes dans un monde incertain (processus de décision markovien, équation de Bellman), l’apprendre par l’expérience (Q-learning), et ouvrir sur le Machine Learning par la descente de gradient, sur les trajets d’Amadou, taxi à Dakar.
D’où l’on vient, où l’on va
Amont. L’agent rationnel et sa mesure de performance (Séance 1) ; le Monde de Bouki (Séance 2) ; la recherche d’un chemin et le hill climbing (Séance 3) ; les croyances et le théorème de Bayes (Séance 5).
Aval. Le cours de Machine Learning : apprendre les paramètres d’un modèle à partir de données en minimisant une perte par descente de gradient (régression, classification, réseaux de neurones) ; l’apprentissage par renforcement y prolonge le Q-learning.
La Séance 5 a calculé une croyance ; le Dr Ndoye doit maintenant agir.
Ce que la Séance 5 a donné
Après les frissons et la température, \(P(\text{palu}\mid\text{obs})=0{,}910\) ; après le TDR positif, 0,990. Deux questions restent ouvertes : traiter Fatou tout de suite, ou la renvoyer chez elle ? Et quand les décisions s’enchaînent (traiter, surveiller, hospitaliser), quelle stratégie suivre ?
Trois piliers d’un agent qui décide
| probabilités | ce qui est probable (Séance 5) |
|---|---|
| utilité | ce qui est désirable |
| décision (MEU) | l’action à prendre |
Lecture. La séance traite d’abord la décision ponctuelle (une action), puis la décision séquentielle (une règle sur plusieurs étapes), enfin l’apprentissage quand le modèle du monde est inconnu.
Fonction d’utilité
Une fonction d’utilité \(U\) associe à chaque résultat un nombre réel : \(U>0\) pour un résultat désirable, \(U<0\) pour un résultat indésirable, \(|U|\) grand pour une conséquence importante. Elle met sur une même échelle des conséquences de nature différente : temps perdu, argent, santé.
L’utilité n’est pas la probabilité
\(P(s\mid a)\) mesure la vraisemblance qu’une action mène au résultat \(s\) et dépend du monde ; \(U(s)\) mesure la valeur que l’agent attribue à \(s\) et dépend de l’agent. Un embouteillage sur la VDN est probable et indésirable ; trouver l’or de Bouki est improbable et très désirable.
Lecture. La même probabilité peut conduire à deux décisions opposées si les conséquences changent : c’est l’utilité qui tranche.
Principe MEU (maximum expected utility)
\[a^*=\arg\max_{a}\;EU(a\mid\mathbf e),\qquad EU(a\mid\mathbf e)=\sum_s P\bigl(\text{Résultat}(a)=s\mid\mathbf e\bigr)\,U(s)\] \(\mathbf e\) : les observations ; la somme parcourt tous les résultats possibles ; \(EU\) est la moyenne des utilités pondérée par les probabilités.
| résultat réel | traiter | renvoyer |
|---|---|---|
| paludisme | \(+10\) | \(-100\) |
| pas de paludisme | \(-5\) | \(+2\) |
Utilités du Dr Ndoye : rater un paludisme en saison des pluies (\(-100\)) pèse vingt fois plus qu’un traitement inutile (\(-5\)).
Lecture. La probabilité vient de Bayes (Séance 5), l’utilité du médecin ; le MEU les assemble en un critère unique.
Sortie \(\rightarrow\)
traiter 8.65 renvoyer -90.82 decision : traiter
\(EU(\text{traiter})=15p-5\) et \(EU(\text{renvoyer})=-102p+2\) se croisent en \(p^*=7/117\approx0{,}060\) : le médecin traite dès que \(P(\text{palu})>0{,}060\), donc déjà à \(32/45\approx0{,}711\) (frissons seuls).
Scénario B : un traitement à risque, \(U(\text{traiter},\text{non})=-500\), déplace le seuil à \(251/306\approx0{,}820\). À 0,711, \(EU=-137{,}33\) contre \(-70{,}53\) : renvoyer et attendre le TDR ; à 0,910, traiter. Attendre le TDR vaut alors 59,81 en utilité espérée : une information vaut quelque chose quand elle peut changer la décision.
Lecture. L’asymétrie des utilités gouverne la décision : avec \(U(\text{renvoyer},\text{palu})=-1000\), même \(p=0{,}3\) fait traiter (\(EU=-0{,}5\) contre \(-298{,}6\)).
Énoncé
Cheikh, coursier du Plateau, livre à Ouakam : la VDN (utilités du tableau) ou la Corniche. Le soir, \(P(\text{bouchon})=0{,}4\).
Correction
Après le traitement, le médecin réévalue Fatou dans 48 heures et décide à nouveau : chaque décision change l’état, donc les décisions suivantes.
| MEU (une décision) | MDP (une suite de décisions) | |
|---|---|---|
| critère | \(EU(a)=\sum_s P(s\mid\mathbf e)\,U(s)\) | \(V^*(s)=\max_a\bigl[R(s,a)+\gamma\sum_{s'}P(s'\mid s,a)\,V^*(s')\bigr]\) |
| résultat | une action | une politique \(\pi^*\) |
| horizon | un pas | une suite de transitions |
| gain | utilité finale | récompenses cumulées actualisées |
Lecture. La valeur \(V^*(s)\) d’un MDP est une utilité espérée calculée récursivement : le MDP généralise le MEU à un horizon de plusieurs pas.
Pour décider plusieurs fois de suite, il faut d’abord décrire le monde dans lequel l’agent agit.
Le fil rouge
Amadou part du Plateau et veut rejoindre la gare TER de Diamniadio (\(r=+1\)), où l’attendent des voyageurs. Deux zones inondées en hivernage coûtent \(r=-1\). La circulation est imprévisible : l’action voulue réussit avec la probabilité 0,8 ; avec 0,1 il glisse à gauche de sa direction, avec 0,1 à droite ; contre un bord, il reste sur place.
A* (Séance 3) donnerait un chemin en supposant les rues libres. Amadou a besoin d’une règle : « depuis Parcelles, aller vers le haut », applicable où qu’il se trouve.
Processus de décision markovien \(\langle\mathcal S,\mathcal A,P,R,\gamma\rangle\)
| \(\mathcal S\) | états | les 16 lieux de la grille d’Amadou |
|---|---|---|
| \(\mathcal A\) | actions | haut, bas, gauche, droite |
| \(P(s'\mid s,a)\) | transitions | 0,8 tout droit, 0,1 et 0,1 sur les côtés ; \(\sum_{s'}P(s'\mid s,a)=1\) |
| \(R(s,a)\) | récompense | gain espéré du pas : \(+1\) à l’arrivée à Diamniadio, \(-1\) en zone inondée |
| \(\gamma\in[0,1)\) | actualisation | une récompense reçue un pas plus tard est multipliée par \(\gamma\) |
Lecture. L’agent agit, reçoit \(r\) et l’état suivant ; un état terminal clôt l’épisode.
L’état résume le passé utile
\[P(s_{t+1}\mid s_t,a_t,s_{t-1},a_{t-1},\dots,s_0)=P(s_{t+1}\mid s_t,a_t)\]
À Médina, le risque d’embouteillage au prochain carrefour ne dépend pas du chemin qui y a mené. Si la fatigue d’Amadou s’accumule et change ses réflexes, « être à Médina » ne décrit plus l’état : il faut ajouter la fatigue à l’état.
C’est l’indépendance conditionnelle de la Séance 5, dans le temps : un MDP est un réseau bayésien qui se déroule ; \(P(S_{t+1}\mid S_t,A_t)\) joue le rôle d’une table de probabilités conditionnelles.
Lecture. Un état trop pauvre viole la propriété de Markov ; un état trop riche multiplie les états.
Politique
Une politique associe une action à chaque état : \(\pi:\mathcal S\to\mathcal A\) (déterministe), ou une distribution \(\pi(a\mid s)\) (stochastique). La politique optimale \(\pi^*\) maximise la récompense cumulée espérée depuis tout état.
Un chemin est fragile
« Plateau, HLM, Pikine, Keur Massar, Rufisque, Bargny, Diamniadio » : une glissade vers Thiaroye et le plan ne dit plus rien.
Une politique couvre tous les cas
« Depuis Thiaroye : droite ; depuis Parcelles : haut ; depuis Bargny : bas » : chaque case reçoit sa consigne, même celles qu’on ne pensait pas traverser.
Lecture. Dans un monde déterministe, un chemin convient ; dans un monde stochastique, on calcule une politique.
CASES = [(l, c) for l in range(4) for c in range(4)]
ACTIONS = ["haut", "bas", "gauche", "droite"]
DIRS = {"haut": (-1, 0), "bas": (1, 0), "gauche": (0, -1), "droite": (0, 1)}
COTES = {"haut": ("gauche", "droite"), "bas": ("droite", "gauche"),
"gauche": ("bas", "haut"), "droite": ("haut", "bas")}
def bouger(s, d):
n = (s[0] + DIRS[d][0], s[1] + DIRS[d][1])
return n if n in CASES else s
def transitions(s, a):
g, d = COTES[a]
return [(0.8, bouger(s, a)), (0.1, bouger(s, g)), (0.1, bouger(s, d))]
print(transitions((0, 2), "droite"))
print(transitions((2, 3), "bas"))Résultat \(\rightarrow\)
[(0.8, (0, 3)), (0.1, (0, 2)), (0.1, (1, 2))]
[(0.8, (3, 3)), (0.1, (2, 3)), (0.1, (2, 2))]
Lecture. Une case est un couple (ligne, colonne), \((0,0)\) le Plateau. Depuis Pikine \((0,2)\), « droite » : Keur Massar avec 0,8, Pikine avec 0,1 (le bord), Thiaroye avec 0,1. Depuis Bargny \((2,3)\), « bas » : Diamniadio avec 0,8, Bargny avec 0,1, Yeumbeul avec 0,1.
Pour comparer des politiques, on mesure ce que vaut chaque état quand on les suit.
Fonction de valeur d’une politique
\[V^\pi(s)=\mathbb E_\pi\Bigl[\sum_{t=0}^{\infty}\gamma^t\,r_{t+1}\;\Big|\;s_0=s\Bigr]\] \(r_{t+1}\) : la récompense reçue au pas \(t+1\) ; l’espérance porte sur les transitions aléatoires et sur les choix de \(\pi\). La valeur optimale est \(V^*(s)=\max_\pi V^\pi(s)\).
Lecture
\(V^*(s)\) répond à : « en partant de \(s\) et en agissant au mieux, combien vais-je récolter en espérance ? » C’est l’utilité espérée du MEU, étendue à une suite de pas.
Lecture. À Dakar, \(V^*(\text{Plateau})=0{,}474\) : la récompense \(+1\) de Diamniadio, atténuée par la distance, les glissades et l’actualisation.
Économie. Un franc CFA aujourd’hui vaut plus que demain : au taux \(i\), \(\gamma=1/(1+i)\), soit 0,909 pour \(i=10\) %.
Arrêt possible. Si l’épisode s’arrête à chaque pas avec la probabilité \(1-\gamma\) (panne, marché fermé), une récompense dans \(t\) pas compte pour \(\gamma^t\).
Somme finie. Avec \(|r|\le R_{\max}\), \(\bigl|\sum\gamma^t r_{t+1}\bigr|\le R_{\max}/(1-\gamma)\) : 2, 10, 100 pour \(\gamma=0{,}5\) ; 0,9 ; 0,99.
Lecture. Avec \(\gamma=0{,}9\), une récompense dans 5 pas vaut encore \(0{,}9^5=0{,}59\) fois une récompense reçue tout de suite ; avec \(\gamma=0{,}5\), après 3 pas, presque plus rien.
Deux routes pour Amadou
Courte, risquée : tout de suite, \(+0{,}8\) avec 0,7 et \(-0{,}5\) avec 0,3 ; espérance \(0{,}56-0{,}15=0{,}41\).
Longue, sûre : \(+0{,}70\) certain, trois pas plus tard.
| \(\gamma\) | longue : \(\gamma^3\times0{,}70\) | choix |
|---|---|---|
| 0,5 | 0,0875 | courte (0,41) |
| 0,9 | 0,5103 | longue |
Le seuil
Le gain est \(r_1+\gamma r_2+\gamma^2r_3+\gamma^3r_4\) : la route courte paie en \(r_1\), la longue en \(r_4\). Les deux routes s’équilibrent pour \(\gamma^3\times0{,}70=0{,}41\), soit \(\gamma=(0{,}41/0{,}70)^{1/3}\approx0{,}837\).
Lecture. Mêmes récompenses, deux décisions opposées : \(\gamma\) est un paramètre de conception qui fixe la prévoyance de l’agent.
Valeur d’une action
\[Q^*(s,a)=R(s,a)+\gamma\sum_{s'}P(s'\mid s,a)\,V^*(s'),\qquad V^*(s)=\max_a Q^*(s,a),\qquad \pi^*(s)=\arg\max_a Q^*(s,a)\] \(Q^*(s,a)\) : faire \(a\) maintenant, puis agir au mieux.
Pourquoi une seconde fonction
Avec \(Q^*\), l’agent sait agir : en chaque état, l’action de plus grande valeur, sans consulter \(P\). C’est ce que le Q-learning apprend directement de l’expérience.
Lecture. À Bargny, \(Q^*(\text{Bargny},\text{bas})=0{,}943\), puis \(Q^*(\text{Bargny},\text{droite})=0{,}852\) : la politique optimale y descend vers Diamniadio.
La valeur d’un état s’exprime par les valeurs de ses successeurs : c’est la récurrence qui permet de calculer \(V^*\).
Équation de Bellman (Bellman, 1957)
\[V^*(s)=\max_{a}\Bigl[R(s,a)+\gamma\sum_{s'}P(s'\mid s,a)\,V^*(s')\Bigr]\]
Lecture. Une politique optimale n’a pas besoin de regarder plus loin qu’un pas : les valeurs des successeurs contiennent déjà tout l’avenir.
Avec les valeurs optimales des voisins (\(\gamma=0{,}9\)) : \[\begin{aligned}Q^*(\text{Bargny},\text{bas})&=0{,}8\times(1+0)\\&\;+0{,}1\times0{,}9\times0{,}642\\&\;+0{,}1\times0{,}9\times0{,}943=0{,}943\end{aligned}\] Deuxième action, « droite » (contre le bord) : 0,852 ; « haut », vers Rufisque (0,815) : \(0{,}8\times0{,}9\times0{,}815+0{,}058+0{,}085=0{,}730\).
Lecture. Le maximum, 0,943, est atteint par « bas » : c’est à la fois \(V^*(\text{Bargny})\) et la consigne de la politique. \(V^*(\text{Bargny})\) figure des deux côtés de l’équation : on ne la lit pas, on l’obtient en itérant.
Une grille réduite, calculable à la main : A, B, C en haut, D, E, F en bas ; E danger (\(r=-1\)), F but (\(r=+1\)), toutes deux terminales.
CASES = [(l, c) for l in range(2) for c in range(3)]
RECOMP = {(1, 1): -1, (1, 2): 1} # E : danger, F : but
TERMINAUX = {(1, 1), (1, 2)}
ETATS = [s for s in CASES if s not in TERMINAUX]
GAMMA = 0.9
def q_valeur(s, a, V):
q = 0.0
for p, s2 in transitions(s, a):
q = q + p * (RECOMP.get(s2, 0) + GAMMA * V[s2])
return q
V0 = {s: 0.0 for s in CASES}
print(round(q_valeur((0, 2), "bas", V0), 3))
print(round(q_valeur((0, 2), "droite", V0), 3))Résultat \(\rightarrow\)
0.8
0.1
Lecture. Avec des valeurs nulles, \(Q(C,\text{bas})=0{,}8\times(1+0)=0{,}8\) : F est atteinte avec 0,8. « Droite » envoie contre le bord ; seule la glissade vers le bas (0,1) atteint F : 0,1.
L’équation de Bellman définit \(V^*\) sans la donner ; on part de zéro et on l’applique jusqu’à ce que plus rien ne bouge.
Itération sur les valeurs (value iteration)
Lecture. Les récompenses se propagent depuis les terminaux : à l’itération \(k\), seuls les états à au plus \(k\) pas d’un terminal ont une valeur non nulle.
Sortie \(\rightarrow\)
1 [0.0, 0.0, 0.8, 0.0]3 [0.343, 0.571, 0.921, 0.0]5 [0.496, 0.628, 0.939, 0.231]
2 [0.0, 0.476, 0.872, 0.0]4 [0.442, 0.615, 0.934, 0.147]6 [0.518, 0.633, 0.941, 0.278]
Lecture. Initialisation (ligne 1) : toutes les valeurs à 0 ; E et F sont terminales et ne changent plus.
Lecture. Itération 1 (lignes 3–8) : seule C voit F : \(Q(C,\text{bas})=0{,}8\times(1+0{,}9\times0)=0{,}8\) ; A, B et D restent à 0.
Lecture. Itération 2 : B reçoit la valeur de C : \(0{,}8\times0{,}9\times0{,}8+0{,}1\times(-1)=0{,}476\) (glissade vers E) ; C passe à 0,872.
Lecture. Itération 3 : A reçoit 0,343 ; D reste à 0 en allant à gauche, contre le mur : « haut » l’exposerait à E (\(-0{,}1\)).
Lecture. Itération 4 : \(Q(D,\text{haut})=0{,}8\times0{,}9\times0{,}3427-0{,}1=0{,}1468>0\) : D quitte le mur.
Lecture. Itération 5 : la politique ne change plus ; les valeurs montent encore (D : +0,084).
Lecture. Itération 6 : écart maximal 0,046 ; il faut 13 itérations pour un écart inférieur à 0,0001.
def iteration_valeurs(eps=0.0001):
V = {s: 0.0 for s in CASES}
k = 0
while True:
nouveau = dict(V)
for s in ETATS:
qs = [q_valeur(s, a, V) for a in ACTIONS]
nouveau[s] = max(qs)
ecart = max(abs(nouveau[s] - V[s]) for s in CASES)
V = nouveau
k = k + 1
if ecart < eps:
return V, k
V, k = iteration_valeurs()
print(k, [round(V[s], 3) for s in ETATS])Résultat \(\rightarrow\)
13 [0.534, 0.635, 0.942, 0.312]
Lecture. 13 itérations pour un écart inférieur à 0,0001. Les valeurs finales respectent l’ordre de la distance à F, corrigé par le danger : C 0,942, B 0,635, A 0,534, D 0,312, coincée entre le bord et E.
Résultat \(\rightarrow\)
{(0, 0): 'droite', (0, 1): 'droite', (0, 2): 'bas', (1, 0): 'haut'}
{'haut': 0.312, 'bas': 0.153, 'gauche': 0.301, 'droite': -0.724}
Lecture. A et B vont à droite, C descend vers F, D monte vers A. En D, « gauche » (0,301), contre le mur, vaut presque « haut » (0,312) : la glissade vers E coûte 0,1 à « haut » ; « droite », vers E, vaut \(-0{,}724\).
CASES = [(l, c) for l in range(4) for c in range(4)]
# Diamniadio (gare TER), puis les deux zones inondees
RECOMP = {(3, 3): 1, (2, 1): -1, (3, 2): -1}
TERMINAUX = {(3, 3), (2, 1), (3, 2)}
ETATS = [s for s in CASES if s not in TERMINAUX]
V, k = iteration_valeurs()
PI = politique(V)
print(k, round(V[(0, 0)], 3), round(V[(2, 3)], 3))
print([PI[(0, c)] for c in range(4)])
print([PI[(1, c)] for c in range(4)])Résultat \(\rightarrow\)
23 0.474 0.943
['droite', 'droite', 'droite', 'bas']
['haut', 'haut', 'droite', 'bas']
Lecture. Les mêmes fonctions, sur la grille de Dakar : 23 itérations, \(V^*(\text{Plateau})=0{,}474\), \(V^*(\text{Bargny})=0{,}943\). Bargny reçoit sa valeur à l’itération 1, le Plateau à l’itération 6.
Lecture. La valeur décroît avec la distance à Diamniadio. Parcelles monte vers HLM (en dessous, l’eau) ; Yeumbeul va à droite ; Guédiawaye, entre deux zones inondées, s’en éloigne.
Résultat \(\rightarrow\)
0.5 11 0.014 gauche
0.9 23 0.474 haut
0.99 65 0.904 gauche
Lecture. Plus \(\gamma\) est grand, plus les valeurs sont grandes et plus la convergence est lente (11, 23, 65 itérations). Fann monte avec \(\gamma=0{,}9\) ; avec 0,5 et 0,99, elle reste contre le bord, loin de l’eau.
Chaque arrivée dans une case non terminale coûte \(c\) (carburant, temps). Avec \(c=-0{,}04\) : \(V^*(\text{Plateau})=0{,}274\), et Médina et Parcelles passent à droite : un détour prudent coûte désormais quelque chose.
Avec \(c=-0{,}5\) : \(V^*(\text{Plateau})=-1{,}937\) ; Parcelles, Fann et Guédiawaye vont droit dans l’eau : \(-1\) une seule fois vaut mieux que plusieurs pas à \(-0{,}5\).
Lecture. Cases encadrées : celles dont l’action change par rapport au coût nul. L’agent optimise exactement les récompenses qu’on lui donne.
Itération sur les politiques (Russell et Norvig, 17.2.2)
Lecture. À Dakar, depuis « droite partout » : \(V^\pi(\text{Plateau})=0{,}0375\), puis 0,3801, puis 0,4743 ; 10, puis 3, puis 0 cases changent. Trois évaluations (13 équations chacune) au lieu de 23 itérations sur les valeurs.
Quoi
L’équation de Bellman appliquée à tous les états à la fois, à partir de \(V_0=0\), jusqu’à stabilité ; puis la politique gloutonne par rapport à \(V\).
Pourquoi elle converge
L’opérateur de Bellman est une contraction de facteur \(\gamma\) : \(\|V_k-V^*\|_\infty\le\gamma^k\|V_0-V^*\|_\infty\). Pour \(\gamma=0{,}9\) et un écart initial au plus 1, \(\lceil\ln10^{-3}/\ln0{,}9\rceil=66\) itérations garantissent \(10^{-3}\) ; à Dakar, 23 donnent déjà \(10^{-4}\).
Quand ça échoue
Elle exige le modèle : \(P\) et \(R\) connus d’avance. Chaque itération coûte \(|\mathcal S|^2|\mathcal A|\) ; aux échecs, \(10^{47}\) états : aucune table ne tient en mémoire.
Énoncé
Une rue de trois cases entre Kermel (\(+1\)) et Tilène (\(+4\)) ; gauche ou droite réussit avec 0,8, sinon Cheikh reste. \(\gamma=0{,}9\), \(V_0=0\).
Correction
L’itération sur les valeurs suppose \(P\) et \(R\) connus ; Amadou ne connaît pas la probabilité d’un bouchon sur la VDN un lundi à 8 h : il l’éprouve en conduisant.
| MDP à modèle connu | apprentissage par renforcement | |
|---|---|---|
| \(P(s'\mid s,a)\), \(R\) | connus avant d’agir | inconnus ; une transition observée à la fois |
| méthode | itération sur les valeurs | Q-learning |
| calcul | planification hors ligne | apprentissage en agissant |
| pour Amadou | étudier une carte | apprendre la ville en conduisant |
L’idée (Watkins, 1989)
Estimer directement \(Q^*(s,a)\) à partir des transitions \((s,a,r,s')\) vécues ; la politique s’en déduit par \(\pi(s)=\arg\max_a Q(s,a)\), sans \(P\).
Mise à jour après la transition \((s,a,r,s')\)
\[Q(s,a)\leftarrow Q(s,a)+\alpha\,\bigl[\underbrace{r+\gamma\max_{a'}Q(s',a')}_{\text{cible}}-Q(s,a)\bigr]\] Le crochet est l’erreur de différence temporelle (erreur TD) \(\delta\) ; \(\alpha\in(0,1]\) est le taux d’apprentissage.
\(\delta>0\) : mieux que prévu, \(Q\) monte ; \(\delta<0\) : déception, \(Q\) baisse ; \(\delta=0\) : estimation cohérente. La cible utilise la meilleure action en \(s'\), même si l’agent en joue une autre ensuite : l’apprentissage est hors politique (off-policy).
Une moyenne qui se corrige
\(Q\leftarrow(1-\alpha)\,Q+\alpha\cdot\text{cible}\) : une moyenne pondérée de l’ancienne estimation et de l’observation, comme le posterior combine le prior et la vraisemblance (Séance 5).
Résultat \(\rightarrow\)
8 transitions observees
Lecture. Trois épisodes sur la petite grille : deux fois A, B, C puis F (\(r=+1\)) ; la troisième fois, depuis B, Amadou glisse vers E (\(r=-1\)). L’agent ne voit que ces quadruplets \((s,a,r,s')\), jamais \(P\).
Sortie \(\rightarrow\)
A droite B 0.0A droite B 0.0A droite B 0.1013
B droite C 0.0B droite C 0.225B droite E -0.3875
C bas F 0.5C bas F 0.75
Lecture. Initialisation (lignes 1–2) : aucune connaissance, \(Q=0\) partout ; l’agent ne connaît ni \(P\) ni \(R\), seulement les transitions qu’il vivra.
Lecture. Transition 1 (A, droite, B) : \(\max Q(B,\cdot)=0\), cible 0 : rien n’est appris tant que la récompense n’a pas été vue.
Lecture. Transition 2 (B, droite, C) : \(\max Q(C,\cdot)=0\), cible 0 : rien n’est appris tant que la récompense n’a pas été vue.
Lecture. Transition 3 (C, bas, F) : \(r=1\), cible \(1\) ; \(Q(C,\text{bas})=0+0{,}5\times(1-0)=0{,}5\).
Lecture. Transition 4 (A, droite, B) : \(\max Q(B,\cdot)\) vaut encore 0 : A n’apprend rien ; la valeur ne remonte que d’une case par passage.
Lecture. Transition 5 (B, droite, C) : cible \(0{,}9\times0{,}5=0{,}45\) ; \(Q(B,\text{droite})=0{,}5\times0{,}45=0{,}225\).
Lecture. Transition 6 (C, bas, F) : \(Q(C,\text{bas})=0{,}5+0{,}5\times(1-0{,}5)=0{,}75\) : la moyenne se rapproche de la cible.
Lecture. Transition 7 (A, droite, B) : cible \(0{,}9\times0{,}225=0{,}2025\) ; \(Q(A,\text{droite})=0{,}1013\) (arrondi).
Lecture. Transition 8 (B, droite, E) : glissade vers E, \(r=-1\) : \(Q(B,\text{droite})=0{,}225+0{,}5\times(-1-0{,}225)=-0{,}3875\).
Le dilemme
Exploiter : jouer \(\arg\max_a Q(s,a)\), la meilleure action connue ; une route jamais essayée ne sera jamais découverte. Explorer : essayer une autre action ; cela coûte des récompenses tout de suite, mais corrige les estimations fausses.
Stratégie \(\varepsilon\)-gloutonne (\(\varepsilon\)-greedy)
À chaque pas, avec la probabilité \(\varepsilon\), une action au hasard ; sinon \(\arg\max_a Q(s,a)\). On fait décroître \(\varepsilon\) : beaucoup d’exploration au début, quand \(Q\) ne vaut rien, puis de moins en moins.
Lecture. Les premières semaines, Amadou essaie des rues inconnues ; après un mois, il connaît la ville et exploite. Avec 4 actions et \(\varepsilon=0{,}2\), la meilleure action est jouée avec la probabilité \(0{,}8+0{,}2/4=0{,}85\).
Résultat \(\rightarrow\)
[(0, 3), (0, 2), (0, 3), (0, 3), (0, 3), (0, 3), (0, 3), (0, 3)]
Lecture. L’agent n’a pas accès à transitions : seul l’environnement s’en sert pour tirer l’état suivant. Huit essais de « droite » depuis Pikine : sept fois Keur Massar, une fois Pikine (contre le bord).
def q_learning(episodes, alpha=0.1):
Q = {(s, a): 0.0 for s in CASES for a in ACTIONS}
for n in range(episodes):
eps = max(0.05, 1 - n / (episodes / 2))
s = (0, 0)
while s not in TERMINAUX:
if random.random() < eps:
a = random.choice(ACTIONS)
else:
a = max(ACTIONS, key=lambda b: Q[s, b])
s2, r = agir(s, a)
cible = r + GAMMA * max(Q[s2, b] for b in ACTIONS)
Q[s, a] = Q[s, a] + alpha * (cible - Q[s, a])
s = s2
return QLecture. Chaque épisode part du Plateau et s’arrête dans un terminal ; \(\varepsilon\) décroît de 1 à 0,05 sur la première moitié des épisodes ; la mise à jour est la règle du Q-learning, une ligne.
random.seed(221)
Q = q_learning(3000)
appris = {}
for s in PI:
appris[s] = max(ACTIONS, key=lambda b: Q[s, b])
ok = [s for s in PI if appris[s] == PI[s]]
print(len(ok), "cases sur", len(PI))
print([s for s in PI if appris[s] != PI[s]])
print(round(Q[(0, 0), "droite"], 3))
print(round(q_valeur((0, 0), "droite", V), 3))Résultat \(\rightarrow\)
12 cases sur 13
[(3, 1)]
0.486
0.474
Lecture. Après 3000 épisodes, la politique apprise coïncide avec \(\pi^*\) sur 12 cases sur 13 ; Guédiawaye \((3,1)\), rarement visitée, reste mal estimée. \(Q(\text{Plateau},\text{droite})=0{,}486\) pour \(Q^*=0{,}474\).
Quoi
Une table \(Q(s,a)\) mise à jour après chaque transition vécue, vers la cible \(r+\gamma\max_{a'}Q(s',a')\), en choisissant les actions de façon \(\varepsilon\)-gloutonne.
Pourquoi il apprend \(Q^*\)
La cible est un échantillon de l’équation de Bellman pour \(Q^*\). Si chaque couple \((s,a)\) est visité une infinité de fois et si \(\alpha\) décroît convenablement, \(Q\) converge vers \(Q^*\) (Watkins et Dayan, 1992).
Quand ça échoue
Exploration insuffisante : des cases jamais visitées (Guédiawaye). Lenteur : la valeur remonte d’un pas par passage. Taille : une case de table par couple \((s,a)\) ; au-delà, il faut une fonction approchée.
Énoncé
La rue de Kermel (\(K\)) à Tilène (\(T\)), \(\alpha=0{,}5\), \(\gamma=0{,}9\), \(Q=0\). (1) \((2,d,0,3)\), \((3,d,4,T)\) ; (2) \((1,d,0,1)\), \((1,d,0,2)\), \((2,d,0,3)\), \((3,d,4,T)\) ; (3) \((2,g,0,1)\), \((1,g,1,K)\).
Correction
Jusqu’ici, \(V\) et \(Q\) sont des tables : 16 valeurs \(V\) et 64 valeurs \(Q\) pour la grille de Dakar.
| problème | nombre d’états |
|---|---|
| grille de Dakar | 16 |
| échecs | environ \(10^{47}\) |
| go | environ \(10^{170}\) |
| image \(224\times224\) | \(50\,176\) pixels par état |
Approcher au lieu de tabuler
On remplace la table par une fonction à paramètres, \(Q_{\symbfit{\theta}}(s,a)\) ou \(V_{\symbfit{\theta}}(s)\), par exemple un réseau de neurones, et l’on cherche les paramètres \(\symbfit{\theta}\) qui minimisent une erreur : c’est un problème d’optimisation.
Lecture. L’outil qui règle ces paramètres est la descente de gradient : le moteur du Machine Learning.
| hill climbing (Séance 3) | descente de gradient | |
|---|---|---|
| espace | états discrets, voisins énumérés | paramètres continus |
| direction | meilleur voisin, par évaluation | opposée au gradient, par dérivation |
| pas | un voisin | \(\eta\,|J'(w)|\), réglé par le taux d’apprentissage \(\eta\) |
| arrêt | aucun voisin meilleur (optimum local) | gradient nul (minimum local) |
Lecture. Une recherche locale dans un espace continu : même limite, les minima locaux.
Règle de mise à jour
Pour une fonction de coût \(J\) dérivable : \[\symbfit{\theta}_{k+1}=\symbfit{\theta}_k-\eta\,\nabla J(\symbfit{\theta}_k)\] Le gradient \(\nabla J\), vecteur des dérivées partielles, indique la direction de plus forte montée de \(J\) ; on fait un pas en sens opposé. \(\eta>0\) est le taux d’apprentissage.
Exemple : \(J(w)=w^2\), \(J'(w)=2w\), \(w\leftarrow w(1-2\eta)\) ; avec \(\eta=0{,}3\), \(w\) est multiplié par 0,4 à chaque pas.
Lecture. En deux dimensions, chaque pas part perpendiculairement à la courbe de niveau du point courant ; sur l’axe raide (\(5w_2^2\)), le chemin oscille.
Amadou relève trois courses et cherche un tarif au kilomètre \(w\) : le prix prédit est \(w\times\)distance.
Résultat \(\rightarrow\)
4.7333 0.0667 4.7333
La perte et sa dérivée
\(J(w)=\frac13\sum_i(y_i-wx_i)^2\), \(J'(w)=-\frac23\sum_i x_i(y_i-wx_i)=\frac{112w-56}{3}\), nulle en \(w^*=0{,}5\).
Lecture. \(J(0)=J(1)=4{,}7333\) et \(J(0{,}5)=1/15\approx0{,}0667\) : le meilleur tarif est 500 F CFA par kilomètre.
Sortie \(\rightarrow\)
1 0.3733 0.36623 0.4919 0.0679
2 0.4679 0.08594 0.4979 0.0667
Lecture. Initialisation (lignes 1, 6, 7) : \(w_0=0\), \(J(0)=4{,}733\) ; le taux d’apprentissage \(\eta\) vaut 0,02.
Lecture. Itération 1 (lignes 9, 2–5, 10) : \(J'(0)=-18{,}6667\) : la pente descend vers la droite ; \(w_1=0-0{,}02\times(-18{,}6667)=0{,}3733\).
Lecture. Itération 2 : \(J'(w_1)=-4{,}7289\), plus faible : le pas raccourcit, \(w_2=0{,}4679\), \(J=0{,}0859\).
Lecture. Itération 3 : \(w_3=0{,}4919\) ; l’écart à \(w^*=0{,}5\) est multiplié par 0,2533 à chaque pas.
Lecture. Itération 4 : \(w_4=0{,}4979\), \(J=0{,}0667\), le minimum \(J(w^*)=1/15\) à \(10^{-4}\) près.
Résultat \(\rightarrow\)
0.005 0.492
0.02 0.5
0.05 0.4714
0.06 -36.4321
Lecture. L’écart à \(w^*\) est multiplié par \(1-\frac{112}{3}\eta\) à chaque pas : 0,813, 0,253, \(-0{,}867\), \(-1{,}24\) ; convergence si \(\eta<3/56\approx0{,}0536\).
| descente de gradient sur \(J(\theta)=\frac12(y-\theta)^2\) | Q-learning | |
|---|---|---|
| paramètre | \(\theta\) | \(Q(s,a)\) |
| cible | \(y\) | \(r+\gamma\max_{a'}Q(s',a')\) |
| erreur | \(y-\theta=-J'(\theta)\) | \(\delta=r+\gamma\max_{a'}Q(s',a')-Q(s,a)\) |
| mise à jour | \(\theta\leftarrow\theta+\eta\,(y-\theta)\) | \(Q(s,a)\leftarrow Q(s,a)+\alpha\,\delta\) |
Conséquence
Le Q-learning fait un pas de gradient sur une case de la table, la cible étant tenue fixe. En remplaçant la table par un réseau \(Q_{\symbfit{\theta}}\) et en appliquant la descente de gradient à ses poids, on obtient le Deep Q-Network (DQN, Mnih et al., 2015), qui a appris 49 jeux Atari à partir des pixels.
Lecture. Le taux d’apprentissage \(\alpha\) du Q-learning et le \(\eta\) de la descente sont le même réglage : la taille du pas vers la cible.
Quoi
Partir de paramètres initiaux et répéter \(\symbfit{\theta}\leftarrow\symbfit{\theta}-\eta\nabla J(\symbfit{\theta})\) jusqu’à ce que le gradient soit presque nul.
Pourquoi elle descend
Au premier ordre, \(J(\symbfit{\theta}-\eta\nabla J)\approx J(\symbfit{\theta})-\eta\|\nabla J\|^2\) : pour \(\eta\) assez petit, chaque pas diminue \(J\). Elle ne regarde que la pente locale : un calcul par paramètre, même pour des millions de paramètres.
Quand ça échoue
\(\eta\) trop grand : oscillations puis divergence (\(\eta=0{,}06\)) ; trop petit : lenteur. Coût non convexe : arrêt dans un minimum local, comme le hill climbing. Variables d’échelles différentes : zigzags.
Énoncé
Cheikh a livré à 1, 2 et 3 km en 3, 8 et 10 minutes. Modèle : durée \(=w\times\)distance ; \(J(w)=\frac13\sum_i(y_i-wx_i)^2\), \(w_0=0\).
Correction
Ousmane suit le cours depuis la Séance 2 ; il doit maintenant choisir son chemin vers l’or, en \((4,4)\).
Ce que les séances ont donné
Logique (Séance 2) : odorat infaillible et un seul Bouki : Bouki en \((2,2)\) ; \((1,3)\) et \((3,1)\) sûres.
Bayes (Séance 5) : après les odeurs en \((2,1)\) et \((1,2)\), \(P(\text{Bouki en }(2,2))=162/185\approx0{,}876\) ; \((1,3)\) et \((3,1)\) : \(9/185\approx0{,}049\) chacune.
Le MEU d’un pas
Être dévoré : \(-1000\) ; un pas sans danger : \(-1\). \[\begin{aligned}EU\bigl((2,2)\bigr)&=\tfrac{162}{185}(-1000)+\tfrac{23}{185}(-1)\\&\approx-875{,}80\end{aligned}\] contre \(\frac{9}{185}(-1000)+\frac{176}{185}(-1)\approx-49{,}60\) pour \((1,3)\) ou \((3,1)\).
Lecture. Depuis les cases déjà visitées, tout chemin vers l’or passe par \((1,3)\), \((2,2)\) ou \((3,1)\) : aucun n’est sans risque ; le MEU écarte \((2,2)\) et chiffre le risque des deux autres.
Le modèle
Les 16 cases ; déplacements sûrs ; entrer dans une case rapporte \(-1000\,P(\text{Bouki})-(1-P(\text{Bouki}))\), plus \(1000\) sur l’or ; \(\gamma=0{,}9\) : les croyances entrent dans les récompenses.
L’itération sur les valeurs donne, entre autres chemins de même valeur, le chemin \((1,1)\), \((1,2)\), \((1,3)\), \((1,4)\), \((2,4)\), \((3,4)\), \((4,4)\) ; par symétrie, le chemin par \((3,1)\) vaut autant.
| logique (S2) | Bayes et MEU (S5, S6) | MDP (S6) | |
|---|---|---|---|
| réponse | « \((2,2)\) », certain si l’odorat est infaillible | éviter \((2,2)\) au prochain pas | une politique jusqu’à l’or |
| horizon | aucun | un pas | tout le trajet |
| séance | ce que l’agent sait faire | ce qui manquait ensuite |
|---|---|---|
| S1, qu’est-ce que l’IA | percevoir, agir, viser une performance | raisonner sur ses perceptions |
| S2, l’IA qui raisonne | déduire en logique | le monde n’est pas vrai ou faux |
| S3, l’IA qui cherche | trouver une suite d’actions | le monde n’est pas certain |
| S5, l’IA qui doute | croire, réviser par Bayes | décider et agir |
| S6, l’IA qui apprend | décider, apprendre (\(Q\), gradient) | apprendre les modèles |
Lecture. Chaque séance a levé une hypothèse de la précédente ; il reste à apprendre, à partir de données, les modèles que l’on a jusqu’ici posés à la main (\(P\), \(R\), les tables de la Séance 5).
Lecture. Quatre familles, toutes construites sur les fondations du cours : les probabilités, la recherche locale, la décision séquentielle et la descente de gradient.
Apprendre, c’est minimiser
\[\symbfit{\theta}^*=\arg\min_{\symbfit{\theta}}J(\symbfit{\theta})\qquad\text{par}\qquad \symbfit{\theta}\leftarrow\symbfit{\theta}-\eta\nabla J(\symbfit{\theta})\]
| approche | paramètres \(\symbfit{\theta}\) | perte \(J(\symbfit{\theta})\) |
|---|---|---|
| régression linéaire | coefficients \(\mathbf w\), \(b\) | erreur quadratique \(\frac1n\sum_i(y_i-\mathbf w^\top\mathbf x_i-b)^2\) |
| régression logistique | poids \(\mathbf w\), \(b\) | log-vraisemblance négative |
| réseau de neurones | poids de toutes les couches | entropie croisée ou erreur quadratique |
| DQN | poids du réseau \(Q_{\symbfit{\theta}}\) | erreur TD au carré |
Lecture. Le cours de Machine Learning reprend ce schéma : la régression en sa Séance 5, la classification en sa Séance 6, les réseaux de neurones et la rétropropagation en sa Séance 10.
| méthode | calcule | suppose | dans la séance |
|---|---|---|---|
| MEU | la meilleure action | \(P\), \(U\) connus, un pas | traiter : 8,65 contre \(-90{,}82\) |
| itération sur les valeurs | \(V^*\), puis \(\pi^*\) | \(P\), \(R\) connus, table | 13 itérations (2\(\times\) 3), 23 (Dakar) |
| Q-learning | \(Q^*\), puis \(\pi^*\) | transitions vécues, table | 12 cases sur 13 (3000 épisodes) |
| descente de gradient | \(\arg\min J\) | \(J\) dérivable, \(\eta\) adapté | \(w=0{,}4979\) en 4 pas (\(\eta=0{,}02\)) |
Lecture. Toutes reposent sur une même idée : une estimation corrigée pas à pas vers une cible, l’équation de Bellman pour les trois premières, la pente de la perte pour la dernière.
Quel outil pour quelle décision ?
Lecture. Dans tous les cas, la qualité de la décision est celle des utilités et des récompenses : un agent optimise exactement ce qu’on lui demande d’optimiser.
À retenir
Introduction au Machine Learning, Séance 0
Les modèles de ce cours ont été posés à la main : les probabilités de la Séance 5, les transitions et les récompenses de cette séance. Le cours de Machine Learning les apprend à partir de données : un jeu de 10 000 patients (DataSANTÉ-221), des modèles de régression et de classification, des réseaux de neurones, tous réglés par la descente de gradient de cette séance.
Introduction à l’IA — Séance 6 Dr. El Hadji Bassirou TOURÉ • DMI/FST/UCAD
Lecture. Initialisation (lignes 1–6) : le posterior de la Séance 5 et la table des utilités du médecin.
Lecture. Ligne 10, « traiter », palu : \(0{,}91\times10=9{,}1\), premier terme de la somme.
Lecture. Lignes 10–13 : \(+0{,}09\times(-5)=-0{,}45\) ; \(EU(\text{traiter})=8{,}65\), meilleure action connue.
Lecture. Ligne 10, « renvoyer », palu : \(0{,}91\times(-100)=-91\), premier terme de la somme.
Lecture. Lignes 10–12 : \(+0{,}09\times2=0{,}18\) ; \(EU(\text{renvoyer})=-90{,}82\), moins bonne : la ligne 13 ne s’exécute pas.
Lecture. Ligne 14 : traiter, avec un écart de 99,47 : rater un paludisme coûte \(-100\).