Backpropagation et training loop
La boucle d'entraînement : le rituel universel
Tout entraînement deep, du MLP jouet au LLM géant, répète ces cinq pas :
pour chaque batch :
1. forward : prédictions = réseau(X_batch)
2. loss : erreur = comparer(prédictions, y_batch)
3. backward : gradients de la loss pour CHAQUE paramètre ← backprop
4. update : paramètres -= lr × gradients ← descente (module 2 !)
5. zéro : remettre les gradients à zéro
La backprop : la chain rule, mécanisée
Le réseau est une composition de fonctions : loss(softmax(W₂ · relu(W₁ · x))). La règle de dérivation en chaîne permet de calculer la dérivée de la loss par rapport à chaque W en remontant la chaîne : chaque couche reçoit le gradient de l'aval, calcule sa contribution, transmet à l'amont. Rien de plus — mais appliqué à des millions de paramètres, automatiquement.
La preuve par le code : un réseau qui apprend XOR
XOR est impossible pour un modèle linéaire (aucune droite ne sépare les classes). Deux couches + ReLU suffisent — la démonstration historique de l'utilité de la profondeur :
Les gardiens de la boucle
- loss qui ne descend pas → learning rate, données, ou bug de shapes ;
- loss → NaN → learning rate trop grand, ou log(0) non protégé ;
- train ↓ mais validation ↑ → overfitting : dropout, early stopping, plus de données ;
- le premier réflexe pro : sur-apprendre volontairement UN batch minuscule. Si le réseau n'y arrive pas, le bug est dans le code, pas dans les hyperparamètres.
Dans la training loop, la backprop correspond à l'étape…