Partie 3 · Apprendre
Descendre le gradient
On connaît la perte et sa pente. Il reste à s'en servir : à chaque étape, on déplace chaque paramètre à l'opposé de sa pente. C'est la descente de gradient :
nouveau paramètre = paramètre − η × pente
La pente est négative en w = 0 (−0,3333) : « moins une pente négative » fait augmenter w. Le pas η (lettre « êta », learning rate en anglais, lr dans PyTorch) règle la taille du saut. Avec η = 3 : w passe de 0 à 0 − 3 × (−0,3333) = 1.
À toi de coder
Une descente complète répète 20 fois les mêmes étapes (cours, partie 8) : prédire, mesurer l'erreur, effacer les anciennes pentes, calculer les pentes (backward()), faire un pas. Avec η = 3 depuis w = 0 et b = 0, on arrive au creux : w = 1,46 et b = 0. Les premières pertes sont 0,69, puis 0,50, puis 0,48.
Dans PyTorch, effacer les pentes est obligatoire (w.grad.zero_() ou optimizer.zero_grad()) : sinon il ajoute les nouvelles pentes aux anciennes. L'optimiseur torch.optim.SGD([w, b], lr=3) fait le pas pour tous les paramètres : même résultat, w = 1,46.
À toi de coder
Le choix de η change tout. Avec 20 pas depuis w = 0 (les valeurs chiffrées ci-dessous sont recalculées avec la même perte ; le notebook ne donne que w = 1,45 à 100 pas pour η = 0,3) :
- η = 0,3 : trop petit. La perte baisse lentement (0,69, 0,66, 0,63, …) et w n'atteint que 1,02 ; après 100 pas, w = 1,45 : on arrive, mais très lentement.
- η = 3 : un bon pas. En 2 pas la perte est à 0,48, w = 1,46.
- η = 12 : trop grand. Au premier pas la perte monte (de 0,69 à 0,72) : le saut dépasse le creux et retombe de l'autre côté. Elle finit tout de même par se calmer (w ≈ 1,465 au bout de 20 pas), mais sur un problème moins gentil, un pas trop grand peut faire diverger la perte.
À toi de coder