Entraînement par descente de gradient stochastique

Idée

Faire bouger les coefficients d'un petit pas dans la direction qui fait baisser l'erreur, et recommencer 300 fois.

Pourquoi

Faire bouger les coefficients d'un petit pas dans la direction qui fait baisser l'erreur, et recommencer 300 fois. À chaque tour, on présente toutes les images, on calcule l'erreur globale, on demande à PyTorch de calculer combien chaque coefficient est responsable de cette erreur, puis on retire à chacun une fraction de son gradient.

Outil

Comme une bille qui descend une vallée par petits sauts dans la direction de la pente la plus forte — exactement le potentiel/gradient vu en mécanique L1, $\vec{F} = -\nabla U$, sauf que la "force" est ici le gradient de la fonction de coût.

Formule

Pour chaque itération $i \in {0, \dots, 299}$ : (1) $A = \text{forward}(X, \text{paramètres})$ ; (2) $\ell = \text{CrossEntropy}(A^T, Y)$ ; (3) $\ell.\text{backward()}$ calculé les gradients via autograd ; (4) $\text{optimizer.step()}$ met à jour chaque paramètre $\theta \leftarrow \theta - \alpha \cdot d\theta$ avec $\alpha = 1{,}1$ ; (5) $\text{optimizer.zero_grad()}$ remet les gradients à zéro pour l'itération suivante.

Piège

Pattern correct : forward → loss → backward → step → zero_grad. Si on met zero_grad après forward et avant backward, on perd les gradients précédents avant de pouvoir les utiliser — pas de mise à jour. Si on l'oublie, accumulation des gradients d'une itération à l'autre. Le notebook Cell 15 le fait dans le bon ordre : loss.backward(); optimizer.step(); optimizer.zero_grad().