Séance 6 — L’IA qui apprend

Décider et apprendre~: utilité, processus de décision markoviens, Q-learning, descente de gradient

Dr. El Hadji Bassirou TOURÉ

Département de Mathématiques et Informatique, Faculté des Sciences et Techniques, Université Cheikh Anta Diop de Dakar

Objectifs de la séance

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.

  • Calculer une utilité espérée, décider par le principe MEU, trouver un seuil de décision.
  • Formuler un processus de décision markovien : états, actions, transitions, récompenses, \(\gamma\).
  • Définir la fonction de valeur, la fonction \(Q\), la politique, et lire le rôle du facteur d’actualisation.
  • Écrire l’équation de Bellman et dérouler l’itération sur les valeurs, puis extraire la politique.
  • Appliquer la règle du Q-learning à une suite de transitions observées.
  • Dérouler une descente de gradient, choisir le taux d’apprentissage, la relier au hill climbing.
  • Situer ces outils dans le paysage du Machine Learning.

De la croyance à l’action

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.

L’utilité

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.

Le principe de l’utilité espérée maximale

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.

Le MEU du Dr Ndoye, pas à pas

Sortie \(\rightarrow\) 

traiter 8.65  renvoyer -90.82  decision : traiter

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\).

Le seuil de décision

\(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\)).

Exercice : la VDN ou la Corniche

Énoncé

Cheikh, coursier du Plateau, livre à Ouakam : la VDN (utilités du tableau) ou la Corniche. Le soir, \(P(\text{bouchon})=0{,}4\).

  1. Les utilités espérées et le choix.
  2. Le seuil \(p^*\) sur \(P(\text{bouchon})\).
  3. Le matin, \(p=0{,}25\) : le choix.
  4. Le matin, la radio annonce un bouchon (\(0{,}9\) si bouchon, \(0{,}2\) sinon) : le choix.

Correction

  1. \(EU(\text{VDN})=0{,}6\times10+0{,}4\times(-5)=4\) ; \(EU(\text{Corniche})=5\) : la Corniche.
  2. \(10(1-p)-5p=5\) pour \(p=1/3\) : la VDN si \(P(\text{bouchon})<1/3\).
  3. \(p=0{,}25<1/3\) : \(EU(\text{VDN})=6{,}25>5\) : la VDN.
  4. Bayes : \(\frac{0{,}25\times0{,}9}{0{,}25\times0{,}9+0{,}75\times0{,}2}=0{,}6\) ; \(EU(\text{VDN})=1\) : la Corniche. L’observation change la décision.

Du MEU à la décision séquentielle

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.

Amadou, taxi à Dakar

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.

Les cinq ingrédients d’un MDP

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.

La propriété de Markov

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.

La politique, une règle et non un chemin

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.

Les transitions glissantes en Python

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.

La fonction de valeur

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.

Le facteur d’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.

Route courte ou route longue

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.

La fonction Q

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.

L’équation de Bellman

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]\]

  1. MEU récursif : un MEU dont les « résultats » sont des états qui ont eux-mêmes une valeur.
  2. Gain du pas plus avenir : la récompense du pas, plus la valeur actualisée de ce qui suit.
  3. Système : \(|\mathcal S|\) équations à \(|\mathcal S|\) inconnues ; le \(\max\) les rend non linéaires : on itère.

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.

Bellman à Bargny

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.

La valeur d’une action en Python

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’itération sur les valeurs

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)

  1. \(V_0(s)=0\) pour tout \(s\).
  2. \(V_{k+1}(s)=\max_a\bigl[R(s,a)+\gamma\sum_{s'}P(s'\mid s,a)\,V_k(s')\bigr]\) pour tout état non terminal.
  3. Arrêt quand \(\max_s|V_{k+1}(s)-V_k(s)|<\varepsilon\).
  4. Politique : \(\pi(s)=\arg\max_a\bigl[R(s,a)+\gamma\sum_{s'}P(s'\mid s,a)\,V(s')\bigr]\).

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.

L’itération sur les valeurs, pas à pas

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.

Jusqu’à convergence

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.

La politique extraite

def politique(V):
    pi = {}
    for s in ETATS:
        pi[s] = max(ACTIONS, key=lambda a: q_valeur(s, a, V))
    return pi
print(politique(V))
print({a: round(q_valeur((1, 0), a, V), 3) for a in ACTIONS})

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\).

Le gridworld de Dakar résolu

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.

La valeur et la politique optimales à Dakar

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.

L’effet du facteur d’actualisation

for GAMMA in (0.5, 0.9, 0.99):
    V, k = iteration_valeurs()
    pi = politique(V)
    print(GAMMA, k, round(V[(0, 0)], 3), pi[(2, 0)])
GAMMA = 0.9
V, k = iteration_valeurs()

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.

Le coût par pas

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.

L’itération sur les politiques

Itération sur les politiques (Russell et Norvig, 17.2.2)

  1. Partir d’une politique \(\pi_0\).
  2. Évaluer : résoudre le système linéaire \(V^\pi(s)=R(s,\pi(s))+\gamma\sum_{s'}P(s'\mid s,\pi(s))\,V^\pi(s')\) (\(|\mathcal S|\) équations, sans \(\max\)).
  3. Améliorer : \(\pi(s)\leftarrow\arg\max_a\bigl[R(s,a)+\gamma\sum_{s'}P(s'\mid s,a)\,V^\pi(s')\bigr]\).
  4. Recommencer jusqu’à ce que la politique ne change plus.

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, pourquoi, quand ça échoue : l’itération

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.

Exercice : la rue de Kermel à Tilène

É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\).

  1. \(V_1\). (b) \(V_2\).
  2. \(V_3\) et la politique gloutonne.
  3. \(V^*\) et \(\pi^*\) pour \(\gamma=0{,}5\).

Correction

  1. \(V_1\) : seules les voisines d’un terminal gagnent : case 1, \(0{,}8\times1=0{,}8\) (gauche) ; case 3, \(0{,}8\times4=3{,}2\).
  2. \(V_2(2)=0{,}8\times0{,}9\times3{,}2+0{,}2\times0{,}9\times0=2{,}304\) ; \(V_2(1)=0{,}944\) (gauche), \(V_2(3)=3{,}776\).
  3. Case 1 : droite \(0{,}8\times0{,}9\times2{,}304+0{,}2\times0{,}9\times0{,}944=1{,}8288\) contre gauche 0,9699 : la case 1 change d’avis et va vers Tilène.
  4. \(\gamma=0{,}5\) : \(V^*=(0{,}889~; 1{,}58~; 3{,}556)\) ; la case 1 préfère Kermel : la grosse livraison est trop loin pour un agent pressé.

Apprendre sans modèle

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\).

La règle du Q-learning

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).

Les transitions observées

EXPERIENCE = [("A", "droite", 0, "B"), ("B", "droite", 0, "C"),
              ("C", "bas", 1, "F"),
              ("A", "droite", 0, "B"), ("B", "droite", 0, "C"),
              ("C", "bas", 1, "F"),
              ("A", "droite", 0, "B"), ("B", "droite", -1, "E")]
print(len(EXPERIENCE), "transitions observees")

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\).

Le Q-learning, pas à pas

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 exploration–exploitation

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\).

L’environnement simulé

def agir(s, a):             # l'environnement simule : un tirage
    u = random.random()
    for p, s2 in transitions(s, a):
        if u < p:
            return s2, RECOMP.get(s2, 0)
        u = u - p
    return s2, RECOMP.get(s2, 0)
random.seed(1)
print([agir((0, 2), "droite")[0] for i in range(8)])

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).

L’agent Q-learning

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 Q

Lecture. 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.

Ce que l’agent a appris

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, pourquoi, quand ça échoue : le Q-learning

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.

Exercice : le Q-learning dans la rue

É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)\).

  1. \(Q\) après l’épisode 1. (b) Après le 2.
  2. Après le 3. (d) La politique gloutonne.

Correction

  1. Épisode 1 : \(Q(2,d)=0+0{,}5\,(0+0{,}9\times0-0)=0\) ; \(Q(3,d)=0{,}5\times4=2\).
  2. Épisode 2 : \(Q(1,d)\) reste 0 deux fois (\(\max Q\) de 1 puis de 2 vaut 0) ; \(Q(2,d)=0{,}5\times0{,}9\times2=0{,}9\) ; \(Q(3,d)=2+0{,}5\,(4-2)=3\).
  3. Épisode 3 : \(Q(2,g)=0\) ; \(Q(1,g)=0{,}5\times1=0{,}5\).
  4. Case 1 : gauche (0,5 contre 0), alors que \(\pi^*\) dit droite (\(Q^*\) : 1,342 contre 3,009) : la valeur de Tilène n’a pas encore remonté jusqu’à la case 1.

Au-delà des tables

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.

Du hill climbing à la descente de gradient

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.

La descente de gradient

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.

Les courses d’Amadou

Amadou relève trois courses et cherche un tarif au kilomètre \(w\) : le prix prédit est \(w\times\)distance.

X = [2, 4, 6]               # distances (km)
Y = [1.4, 1.8, 3.0]         # prix (milliers de F CFA)
def cout(w):
    j = 0.0
    for x, y in zip(X, Y):
        j = j + (y - w * x) ** 2
    return j / len(X)
print(round(cout(0), 4), round(cout(0.5), 4), round(cout(1), 4))

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.

La descente de gradient, pas à pas

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.

Le taux d’apprentissage

for ETA in (0.005, 0.02, 0.05, 0.06):
    w = 0.0
    for k in range(20):
        w = w - ETA * gradient(w)
    print(ETA, round(w, 4))

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\).

Le Q-learning, une descente de gradient

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, pourquoi, quand ça échoue : la descente

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.

Exercice : les livraisons de Cheikh

É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\).

  1. \(J'(w)\) et \(w^*\). (b) Trois pas, \(\eta=0{,}05\).
  2. Trois pas, \(\eta=0{,}25\). (d) Le taux maximal.

Correction

  1. \(J'(w)=-\frac{2}{3}\sum_i x_i(y_i-wx_i)=\frac{2}{3}(14w-49)\), nul en \(w^*=49/14=3{,}5\) ; \(J'(0)=-32{,}6667\).
  2. \(\eta=0{,}05\) : \(w_1=0+0{,}05\times32{,}6667=1{,}6333\), \(w_2=2{,}5044\), \(w_3=2{,}969\) : \(J\) décroît.
  3. \(\eta=0{,}25\) : \(w_1=8{,}1667\) dépasse \(w^*\), \(w_2=-2{,}7222\), \(w_3=11{,}7963\) : l’écart à \(w^*\) est multiplié par \(-4/3\), la descente diverge.
  4. \(w_{k+1}-w^*=(1-\frac{28}{3}\eta)(w_k-w^*)\) : convergence si \(|1-\frac{28}{3}\eta|<1\), soit \(\eta<3/14\approx0{,}214\).

Bouki : de la croyance à la décision

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 MDP de Bouki

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

Le fil des séances

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).

Le paysage du Machine Learning

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.

Une formule commune

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.

Les méthodes de la séance, côte à côte

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.

Le choix d’une méthode

Quel outil pour quelle décision ?

  1. Une seule décision, conséquences connues ? Le MEU, et son seuil de décision.
  2. Une suite de décisions, modèle \(P\), \(R\) connu, peu d’états ? L’itération sur les valeurs, puis la politique gloutonne.
  3. Modèle inconnu, on peut agir et observer ? Le Q-learning, avec une exploration \(\varepsilon\)-gloutonne.
  4. Trop d’états pour une table, ou des données à ajuster ? Une fonction à paramètres et la descente de gradient : le Machine Learning.

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

À retenir

  • MEU : \(a^*=\arg\max_a\sum_s P(s\mid\mathbf e)\,U(s)\) ; l’asymétrie des utilités fixe le seuil (0,060 pour Fatou).
  • Un MDP : états, actions, transitions, récompenses, \(\gamma\) ; la propriété de Markov ; on cherche une politique, pas un chemin.
  • \(\gamma\) règle la prévoyance : route longue préférée si \(\gamma>0{,}837\).
  • Bellman : \(V^*(s)=\max_a[R(s,a)+\gamma\sum_{s'}P(s'\mid s,a)V^*(s')]\), et \(V^*=\max_a Q^*\).
  • L’itération sur les valeurs propage les récompenses d’un pas par itération et converge (contraction de facteur \(\gamma\)).
  • Q-learning : \(Q\leftarrow Q+\alpha(r+\gamma\max Q(s',\cdot)-Q)\), sans modèle, avec exploration.
  • Descente de gradient : \(\symbfit{\theta}\leftarrow\symbfit{\theta}-\eta\nabla J\) ; \(\eta\) trop grand diverge ; c’est le hill climbing du continu.

Prochaine séance

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.

Références

  • Russell, Norvig — Artificial Intelligence: A Modern Approach, 4e éd., Pearson, 2020 (chap. 16, 17 et 22 : décision, décision séquentielle, apprentissage par renforcement).
  • Sutton, Barto — Reinforcement Learning: An Introduction, 2e éd., MIT Press, 2018.
  • Bellman — Dynamic Programming, Princeton University Press, 1957.
  • Watkins, Dayan — « Q-learning », Machine Learning, 8, 1992.
  • Mnih et al. — « Human-level control through deep reinforcement learning », Nature, 518, 2015.
  • Poole, Mackworth — Artificial Intelligence: Foundations of Computational Agents, 3e éd., Cambridge University Press, 2023.
  • Goodfellow, Bengio, Courville — Deep Learning, MIT Press, 2016 (chap. 4 et 8 : optimisation numérique, descente de gradient).