Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

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

Un seul pas de descente

Avant la boucle complète, un seul pas. Le signe est le piège : on soustrait la pente. Si tu l'ajoutais, la perte monterait au lieu de baisser, puisque la pente indique la direction où la perte monte.

Complète un_pas(w, pente, eta). Départ du cours : w = 0, pente = −0,3333, η = 3 doit donner w = 1.

Ctrl/⌘+Entrée
Descente de gradient sur la perte des six patients, depuis w = 0. Avec η = 3, la perte passe de 0,6931 à 0,4963 puis 0,4834 et w se pose au creux ≈ 1,46. Change η et rejoue.

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

La boucle de descente

Tu écris la boucle d'entraînement complète sur les six patients, en listes. Pour garder le focus sur la logique, la perte et les pentes sont fournies : perte(w, b) et pentes(w, b) (qui renvoie la paire des pentes de w et de b, comme w.grad et b.grad). À chaque tour il faut enregistrer la perte avant de bouger (c'est la perte « au départ du pas »), puis mettre à jour w et b ensemble avec les anciennes valeurs.

Complète descente(eta, nb_pas) : elle renvoie (pertes, w). Pour η = 3 et 20 pas, tu dois trouver les pertes 0,69 ; 0,50 ; 0,48 et w = 1,46.

Ctrl/⌘+Entrée

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.
Trois pas du notebook (0,3 ; 3 ; 12), valeurs recalculées, et un quatrième réglé par toi, en pointillé. Pour un pas plus grand que 12, l'oscillation peut durer ; c'est une extrapolation à partir de la même perte, au-delà de ce que montre le notebook.

À toi de coder

Diagnostiquer un pas trop grand

En pratique, on repère un mauvais η sur la courbe des pertes : si la perte monte à un moment, le pas est trop grand ; si elle baisse mais à peine, il est trop petit. Tu vas automatiser ce diagnostic. Attention : une perte qui remonte une fois (comme avec η = 12) suffit pour le signaler, même si elle redescend ensuite.

La liste de pertes exemple vient d'une descente. Complète a_remonte(pertes) (vrai s'il existe au moins un pas où la perte augmente) et diagnostic(pertes), qui renvoie "trop grand", "trop petit" (la perte finale reste au-dessus de 0,49 après 20 pas : le creux vaut 0,479) ou "correct".

Ctrl/⌘+Entrée