Idée
Faire bouger les coefficients d'un petit pas dans la direction qui fait baisser l'erreur, et recommencer 300 fois.
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().