Descente de gradient -- Descendre le long de la direction de plus forte pente

Ce chapitre implémente la descente de gradient à partir de zéro et l'utilise pour ajuster une régression linéaire.C'est le prototype mathématique de toute la boucle d'entraînement de l'IA.


Analyse du concept

Formule de base

\[ \theta_{t+1} = \theta_t - \eta \nabla J(\theta_t) \]

La boucle d'entraînement en quatre étapes


Propagation avant
Prédire la sortie

Calculer la perte
Mesurer l'écart

Calculer le gradient
Rétropropagation

Mettre à jour les paramètres
θ -= η·∇J

Impact du taux d'apprentissage

Taux d'apprentissageEffet
Trop petitConverge extrêmement lentement, nécessitant de nombreuses étapes
ModéréConverge en douceur et rapidement
Trop grandOscille, voire diverge

Exemple concret

Descendre la montagne par un jour de brouillard

Par un jour de brouillard où vous ne voyez pas votre main devant votre visage, vous devez descendre la montagne. La stratégie pour chaque étape :

Sentez la direction la plus raide sous vos pieds → Faites un petit pas dans la direction descendante la plus raide → Arrêtez → Sentez à nouveau → Faites un autre petit pas → Répétez.

Il s'agit de la descente de gradient : sentir = calculer le gradient, faire un petit pas = mettre à jour les paramètres, s'arrêter = itération suivante.


Exercices pratiques Python

Exemple

import numpy as np

# Générer les données y = 3x + 2 + bruit
np.random.seed(42)
X = np.linspace(0, 10, 100)
y = 3 * X + 2 + np.random.normal(0, 2, 100)

# Implémenter la descente de gradient à partir de zéro
w, b = 0.0, 0.0
lr, n_iter = 0.01, 200
losses = []

for i in range(n_iter):
    y_pred = w * X + b
    loss = np.mean((y_pred - y) ** 2)
    losses.append(loss)
    # Gradient
    dw = 2 * np.mean((y_pred - y) * X)
    db = 2 * np.mean(y_pred - y)
    # Mise à jour
    w -= lr * dw
    b -= lr * db

print(f"EXEMPLE résultat de la descente de gradient :")
print(f"Vrai : w=3.0, b=2.0")
print(f"Ajusté : w={w:.4f}, b={b:.4f}")
print(fPerte initiale : {losses[0]:.2f} → Perte finale : {losses[-1]:.2f})
EXAMPLE 梯度下降结果:
真实: w=3.0, b=2.0
拟合: w=2.9874, b=2.2835
初始损失: 79.69 → 最终损失: 3.91

Courbe de descente de la perte


Scénarios d'application en IA

Le prototype mathématique de la boucle d'entraînement PyTorch

Toutes les boucles d'entraînement en apprentissage profond suivent le même schéma, à savoir la descente de gradient :

① optimizer.zero_grad() → mettre à zéro le cache de gradient ; ② loss = model(x) → propagation avant ; ③ loss.backward() → rétropropagation pour calculer les gradients ; ④ optimizer.step() → effectuer la mise à jour des paramètres θ -= η·∇J.

Une fois que vous comprenez cette boucle en quatre étapes, vous comprenez la logique d'entraînement fondamentale de tous les frameworks d'apprentissage profond.

Le taux d'apprentissage est l'hyperparamètre le plus important

Un taux d'apprentissage trop grand → la perte oscille ou même diverge ; un taux d'apprentissage trop petit → la convergence est extrêmement lente et peut rester bloquée dans des optima locaux. La planification du taux d'apprentissage (Step, Cosine Annealing, Warmup) est une technique indispensable pour entraîner de grands modèles — l'entraînement de GPT-3 a utilisé une stratégie de warmup linéaire + décroissance cosinus.

Compromis sur la taille du lot pour SGD

Full-batch GD : utilise toutes les données pour calculer des gradients exacts, lent mais stable ; SGD (batch_size=1) : ne regarde qu’un seul échantillon à la fois, rapide mais les estimations du gradient sont bruitées ; Mini-batch SGD : un compromis (batch_size=32/64/128), avec un bruit modéré, qui aide en fait à échapper aux optima locaux — c’est la pratique standard en entraînement réel.

Limitations de la descente de gradient

La descente de gradient trouve les points où le gradient est nul — ceux-ci peuvent être des optima globaux, des optima locaux ou des points selle. Dans les espaces de grande dimension, les points selle sont bien plus courants que les optima locaux : un point est un minimum dans certaines directions et un maximum dans d’autres. Les optimiseurs adaptatifs tels qu’Adam peuvent échapper plus efficacement aux points selle.


Autres extensions