La méthode qui ajuste les paramètres d'un modèle en suivant la pente de l'erreur, pas à pas, jusqu'au point le plus bas. Elle entraîne tous les réseaux de neurones et une bonne partie des modèles classiques. Comprendre son pas et ses pièges suffit à diagnostiquer la plupart des apprentissages qui échouent.
Descendre une montagne dans le brouillard. On ne voit pas la vallée, seulement la pente sous ses pieds. On fait un pas dans le sens qui descend le plus, on regarde de nouveau, et ainsi de suite.
Ici, tous les coefficients à zéro. L'erreur de départ est grande.
Le gradient indique, pour chaque paramètre, dans quel sens et avec quelle force l'erreur augmente.
Chaque paramètre bouge à l'opposé de la pente, multiplié par le pas (learning rate).
Quand la pente devient nulle, l'erreur ne baisse plus : on est au fond. Sur une régression linéaire, ce fond est unique et c'est la solution exacte.
Surface, budget publicitaire, nombre de concurrents et chiffre d'affaires annuel. On ajuste un modèle de CA sans formule toute faite, pour voir la descente à l'œuvre.
Sur le jeu d'exemple, l'erreur moyenne passe de 792 k€ au départ à 124 k€ après 10 pas, puis se stabilise à 90 k€ dès 50 pas. Après 200 pas, les coefficients sont identiques, au dixième près, à la solution exacte des moindres carrés.
Elle doit descendre puis se stabiliser. Si elle remonte ou oscille, le pas est trop grand ; si elle descend à peine, il est trop petit ou les variables ne sont pas à l'échelle.
Le reste est de l'ingénierie. Ces trois choix décident si la descente arrive en bas.
Le réglage le plus important. Trop grand, l'erreur explose ; trop petit, il faut des milliers d'étapes. On teste des puissances de 10 (0,1 ; 0,01 ; 0,001) et on regarde la courbe.
Toutes les données à chaque pas (batch), une seule ligne (stochastique, SGD) ou un paquet de 32 à 256 lignes (mini-lot). Le mini-lot est le standard : rapide, et son bruit aide à sortir des plateaux.
Si une variable va de 0 à 2 500 et une autre de 0 à 7, la pente est raide dans une direction et plate dans l'autre : la descente zigzague. Standardiser rend le problème rond et le pas facile à choisir.
# CA des magasins : descente de gradient en R
magasins <- read.csv("magasins.csv")
# Mise à l'échelle : sans elle, la descente zigzague et il faut un pas minuscule
X <- scale(as.matrix(magasins[, c("surface_m2", "budget_pub_k", "nb_concurrents")]))
X <- cbind(constante = 1, X)
y <- magasins$ca_k
poids <- setNames(rep(0, ncol(X)), colnames(X))
pas <- 0.1
for (etape in 0:200) {
erreur <- as.vector(X %*% poids - y)
gradient <- 2 * as.vector(t(X) %*% erreur) / length(y) # pente de l'erreur quadratique moyenne
poids <- poids - pas * gradient
if (etape %in% c(0, 10, 50, 200)) {
cat("étape", etape, ": erreur moyenne (RMSE) =", round(sqrt(mean(erreur^2)), 1), "k€\n")
}
}
# Contrôle : la solution exacte des moindres carrés
exact <- lm(y ~ X[, -1])
print(round(rbind(descente = poids, exacte = coef(exact)), 1))
# CA des magasins : descente de gradient en Python
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
magasins = pd.read_csv("magasins.csv")
X = magasins[["surface_m2", "budget_pub_k", "nb_concurrents"]].values
y = magasins["ca_k"].values
# Mise à l'échelle : sans elle, la descente zigzague et il faut un pas minuscule
X = (X - X.mean(axis=0)) / X.std(axis=0)
X = np.column_stack([np.ones(len(y)), X])
poids = np.zeros(X.shape[1])
pas = 0.1
for etape in range(201):
erreur = X @ poids - y
gradient = 2 * X.T @ erreur / len(y) # pente de l'erreur quadratique moyenne
poids = poids - pas * gradient
if etape in (0, 10, 50, 200):
print(f"étape {etape:3d} : erreur moyenne (RMSE) = {np.sqrt(np.mean(erreur ** 2)):.1f} k€")
# Contrôle : la solution exacte des moindres carrés
exact = LinearRegression().fit(X[:, 1:], y)
print("Descente de gradient :", poids.round(1))
print("Solution exacte :", np.r_[exact.intercept_, exact.coef_].round(1))
C'est la taille du pas : de combien on déplace les paramètres à chaque étape, dans le sens opposé à la pente. Un learning rate trop grand fait rebondir l'erreur, voire la fait exploser. Trop petit, l'apprentissage est interminable. C'est le premier réglage à revoir quand un modèle apprend mal.
La descente de gradient classique calcule la pente sur toutes les données avant chaque pas. La descente stochastique (SGD) la calcule sur une ligne ou un petit lot tiré au hasard : chaque pas est approximatif, mais beaucoup moins cher. Sur de gros volumes, c'est la seule approche praticable.
Sur un problème convexe, comme une régression linéaire ou logistique, il n'y a qu'un fond et elle le trouve si le pas est bien réglé. Sur un réseau de neurones, il existe de nombreux creux. En pratique, ceux qu'elle trouve donnent souvent des modèles de qualité comparable.
Le modèle ajusté ici. Sa formule exacte permet de vérifier que la descente arrive au bon endroit.
Voir la fiche → la version moderneAjoute un élan et un pas propre à chaque paramètre. Le réglage par défaut pour les réseaux de neurones.
Voir la fiche → le calcul de la penteDonne le gradient de chaque poids d'un réseau. La descente de gradient s'en sert pour les corriger.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus