Examen IA — GI FI
Le sujet de cette année pour notre filière (ING2-GI-FI, Avril 2026). Quatre exercices indépendants : Optimisation/recuit simulé, Deep Learning I (Convnet, questions de cours), Deep Learning II (RNN, prédiction de température), apprentissage par renforcement (Value Iteration sur grille 5×5). Durée 2h, calculatrices simples autorisées, aucun document.
! À lire en priorité
- Exo 1 = Optimisation / recuit simulé (CM6) → hors DS pour nous. À utiliser comme bonus de culture, mais ne pas réviser pour le partiel.
- NLP (CM5) est bien à notre programme même s'il n'apparaît pas dans ce sujet précis — continue de le réviser.
- Pas de Minimax / alpha-beta (CM1) ici non plus.
i. Le sujet
ii. Analyse du sujet
| Exo | Thème | Chapitre | Type |
|---|---|---|---|
| 1 | Optimisation (hors DS) | CM6 (recuit simulé) | Questions de cours et de réflexion |
| 2 | Deep Learning I (Convnet) | CM2 | Questions de cours et de réflexion |
| 3 | Deep Learning II (RNN) | CM3 | Dimensionnement + code Keras + schéma déplié + calcul de params |
| 4 | Apprentissage par renforcement | CM4 | MDP + stratégie + Value Iteration sur grille 5×5 |
1. Optimisation — questions de cours
- Métaheuristique vs méthode exacte : on utilise une métaheuristique quand l'espace de recherche est trop grand pour une méthode exacte (explosion combinatoire), quand on n'a pas besoin de l'optimum garanti mais d'une bonne solution en temps raisonnable, ou quand le problème est NP-difficile.
- Température trop élevée : l'algorithme accepte presque toutes les transitions (même mauvaises) → comportement quasi aléatoire (marche aléatoire), il n'exploite pas, ne converge pas. Trop d'exploration.
- Température trop basse : l'algorithme n'accepte presque que les améliorations → se comporte comme une descente de gradient, reste piégé dans le premier minimum local. Trop d'exploitation.
- Estimer une température initiale convenable : on veut un taux d'acceptation initial élevé (≈ 80 %). On peut effectuer quelques transitions aléatoires, mesurer la variation moyenne d'énergie $\overline{\Delta E}$, puis poser $T_0$ tel que $e^{-\overline{\Delta E}/T_0} \approx 0{,}8$, soit $T_0 \approx -\overline{\Delta E} / \ln(0{,}8)$.
2. Deep Learning I (Convnet) — questions de cours
- Convnet vs réseau standard (dense) : connexion locale (chaque neurone voit une petite fenêtre, pas toute l'image) ; partage de poids (un seul filtre réutilisé sur toute l'image → bien moins de paramètres) ; invariance par translation ; un dense sur image exploserait en nombre de paramètres.
- Convolution : fait glisser un filtre sur l'image pour détecter un motif (contours, textures). Le nombre de neurones n'est pas fixé librement : il découle de la taille de sortie $(n - m + 1)$ et du nombre de filtres.
- Pooling : réduit la dimension spatiale (max ou moyenne sur une fenêtre), donne de l'invariance et réduit le calcul. Pas de paramètre appris.
- Hyperparamètres vs paramètres, par type de couche :
- Conv2D : hyperparamètres = nb filtres, taille du filtre, stride, padding, activation ; paramètres = poids des filtres + 1 biais par filtre, soit $F \times (m \times m \times c + 1)$.
- Pooling : hyperparamètres = taille de fenêtre, stride ; aucun paramètre.
- Flatten : aucun hyperparamètre, aucun paramètre.
- Dense : hyperparamètre = nb neurones, activation ; paramètres = $(in + 1) \times out$.
- Dropout : hyperparamètre = taux ; aucun paramètre.
3. Deep Learning II (RNN) — prédiction de température
On mesure 3 températures par jour (matin, après-midi, soir). Chaque jour porte un label parmi 5 (très chaude, chaude, tempérée, fraîche, très froide). On prédit le label du 5e jour à partir des températures des 4 jours précédents. 10 000 observations séquentielles.
- 1. Nombre d'exemples : on glisse une fenêtre de 4 jours d'entrée + 1 jour cible = 5 jours par exemple. Avec 10 000 observations : $10\,000 - 5 + 1 = \mathbf{9\,996}$ exemples (fenêtre glissante de taille 5).
- 2. Dimensions (notations TD :
samples × timesteps × features) :- $X_{train}$ : $7000 \times 4 \times 3$ (4 jours, 3 températures/jour)
- $y_{train}$ : $7000$ (un label par exemple, avant encodage)
- $X_{test}$ : $2996 \times 4 \times 3$
- $y_{test}$ : $2996$
- 3. One-hot sur 5 classes : $y_{train}$ devient $7000 \times 5$.
- 4. Code Keras :
1.?=input_shape=(4, 3)(4 pas de temps, 3 features)2.?=Dense(5, ...)(5 classes)3.?=activation='softmax'(classification multi-classes)
- 5. Schéma : un RNN avec boucle sur l'état caché, puis sa version dépliée sur 4 pas de temps ($X^1 \to X^4$, état caché propagé, sortie au dernier pas → many-to-one).
- 6. Nombre de params ($n = 3$, $m = 32$, $p = 5$) :
- SimpleRNN : $U(m \times n) + V(m \times m) + B^h(m) = 32 \cdot 3 + 32 \cdot 32 + 32 = 96 + 1024 + 32 = \mathbf{1152}$
- Dense : $(m + 1) \times p = (32 + 1) \times 5 = \mathbf{165}$
4. Apprentissage par renforcement — grille 5×5
Grille 5×5. Case centrale = état puits, case en bas à droite = cible. Déplacements vers une case adjacente (gauche/droite/haut/bas), jamais hors grille, puits et cible sont absorbants.
- Vers l'état puits : −30
- Vers l'état cible : +100
- Vers un état partageant la même ligne/colonne que le puits : −10
- Vers toutes les autres cases : −2
- 1. Graphe + MDP : 25 noeuds (cases), arêtes = transitions possibles étiquetées par la récompense. MDP $(S, A, T, R, \gamma)$ : $S$ = 25 états (dont 2 absorbants), $A$ = {↑,↓,←,→}, $T$ déterministe, $R$ selon le barème, $\gamma \in [0,1[$.
- 2. Meilleure stratégie à la main : depuis chaque case, viser la cible en évitant la ligne/colonne du puits (pénalité −10) et le puits (−30). Suivre le chemin qui maximise $+100$ à la fin en minimisant les pénalités intermédiaires.
- 3. Nombre de mises à jour de $V(s)$ : Value Iteration met à jour tous les états (non absorbants) à chaque itération. Avec 1000 itérations et les 2 états absorbants (puits, cible) qui ne sont pas mis à jour, chaque état non terminal est mis à jour 1000 fois (les 23 états actifs ; les 2 absorbants : 0 fois).
- 4. Deux critères d'arrêt : (a) nombre maximal d'itérations atteint (ici 1000) ; (b) convergence : $\max_s |V_{k+1}(s) - V_k(s)| < \varepsilon$ (variation maximale sous un seuil).
- 5. Entamer Value Iteration : $V_0(s) = 0$ partout. $V_1(s) = \max_a [R(s,a) + \gamma V_0(s')] = \max_a R(s,a)$ (car $V_0 = 0$). Les cases adjacentes à la cible obtiennent $+100$, etc.
- 6. Output + stratégie optimale : l'output est la fonction de valeur $V^*(s)$ pour chaque état. On en déduit $\pi^*(s) = \text{argmax}_a [R(s,a) + \gamma V^*(s')]$ : depuis chaque case, choisir l'action menant vers le voisin de plus grande valeur.
* Notions ré-activées
- Recuit simulé : accepter une transition pire avec proba $e^{-\Delta E / T}$
- $T$ trop élevé = marche aléatoire (trop d'exploration)
- $T$ trop bas = descente locale, piégé (trop d'exploitation)
- $T_0$ tel que taux d'acceptation initial ≈ 80 %
- Métaheuristique = quand l'exact est trop coûteux (NP-difficile)
- Convnet vs dense : connexion locale, partage de poids, invariance
- Pooling/Flatten/Dropout = 0 paramètre
- Params Conv = $F(m \cdot m \cdot c + 1)$ · Params Dense = $(in+1)\,out$
- RNN fenêtre glissante : N obs → $N - L + 1$ exemples (L = longueur fenêtre)
- Forme entrée RNN =
(timesteps, features) - One-hot : $y$ de taille $N$ → $N \times K$ classes
- Params SimpleRNN = $U(m \times n) + V(m \times m) + m$ · Dense = $(m+1)p$
- Softmax + many-to-one pour classification de séquence
- Value Iteration : $V(s) = \max_a [R + \gamma \sum T \cdot V(s')]$, états absorbants non mis à jour
- Critères d'arrêt : max itérations OU $\max_s |V_{k+1} - V_k| < \varepsilon$
- $\pi^*(s) = \text{argmax}_a [R(s,a) + \gamma V^*(s')]$