Momentum (Optimization)
L’optimisation par momentum utilise les gradients précédents pour accélérer l’entraînement du modèle, lisser les mises à jour bruitées et améliorer la convergence, tout en équilibrant le taux d’apprentissage.
Le momentum est une technique d’optimisation qui donne à l’entraînement basé sur les gradients une mémoire des mises à jour précédentes. En combinant le gradient actuel avec un historique décroissant des gradients antérieurs, il accélère le mouvement dans les directions cohérentes et réduit les allers-retours. Cela aide les modèles de machine learning à minimiser plus efficacement leur objectif d’entraînement. Le référencement concerne la visibilité d’un site Web ; le momentum concerne les mises à jour numériques des paramètres du modèle.
Fonctionnement du momentum#
Lors de la descente de gradient, un modèle déplace ses poids dans le sens opposé au gradient, c’est-à-dire la direction dans laquelle sa fonction de perte augmente le plus rapidement. Le momentum classique, également appelé momentum de Polyak ou méthode de la balle lourde, ajoute de l’inertie à ce mouvement. Boris Polyak l’a présenté dans ses travaux de 1964 sur l’accélération des méthodes itératives.
L’optimiseur conserve un tampon de vitesse, avec une valeur accumulée par paramètre. À chaque mise à jour, il multiplie l’ancien tampon par un coefficient de momentum, y ajoute le gradient actuel, puis soustrait aux poids le tampon obtenu multiplié par le taux d’apprentissage. Dans les réseaux de neurones, la rétropropagation fournit ces gradients ; l’optimiseur conserve le tampon entre les mises à jour.
Le momentum est particulièrement utile sur les surfaces de perte allongées, où la courbure est forte en travers d’une vallée et faible le long de son fond. Les gradients qui pointent de façon répétée le long de la vallée s’accumulent, tandis que les composantes alternant en travers s’annulent partiellement. Avec la descente de gradient stochastique, cette mémoire lisse également les fluctuations entre les mini-lots. La dynamique du momentum sur une fonction de perte quadratique explique à la fois son effet d’accélération et les oscillations qu’il peut introduire près d’un minimum.
Momentum, taux d’apprentissage et méthodes apparentées#
Le coefficient de momentum, généralement noté bêta ou mu, est habituellement compris entre zéro et un. Une valeur nulle correspond à la descente de gradient ordinaire ; les valeurs proches de un conservent plus longtemps les anciens gradients. 0.9 est une valeur de départ courante. Avec un tampon de vitesse non normalisé et un gradient constant, la vitesse accumulée approche dix fois ce gradient à 0.9, contre cent fois à 0.99. Par conséquent, le momentum et le taux d’apprentissage interagissent fortement lors du réglage des hyperparamètres.
Une combinaison trop agressive provoque un dépassement : les mises à jour franchissent plusieurs fois un minimum, ce qui entraîne des oscillations de la perte ou une divergence. Cela se produit même avec des objectifs quadratiques lisses. Un plan de taux d’apprentissage modifie l’amplitude des mises à jour au cours de l’entraînement, tandis que le momentum détermine la part de l’historique directionnel qui est conservée.
Deux algorithmes d’optimisation étroitement apparentés exploitent cet historique de manière différente :
- Le momentum de Nesterov évalue le gradient à une position anticipée obtenue à partir de la vitesse conservée, ce qui permet au gradient de corriger le mouvement prévu.
- Adam combine une moyenne exponentiellement pondérée des gradients avec une moyenne des gradients au carré, qui ajuste les mises à jour séparément pour chaque paramètre. Son
beta1contrôle la mémoire des gradients.
Un exemple minimal avec PyTorch#
Cet exemple PyTorch compare des points de départ et des taux d’apprentissage identiques sur un objectif quadratique allongé. L’implémentation officielle de SGD gère automatiquement le tampon de momentum.
import torch
# Curvature is 50 times greater along the second coordinate.
scale = torch.tensor([1.0, 50.0])
for momentum in (0.0, 0.9):
weights = torch.tensor([5.0, 1.0], requires_grad=True)
optimizer = torch.optim.SGD([weights], lr=0.015, momentum=momentum)
for step in range(100):
optimizer.zero_grad()
loss = (scale * weights.square()).sum()
loss.backward()
optimizer.step()
final_loss = (scale * weights.square()).sum().item()
print(f"Momentum {momentum}: loss = {final_loss:.6f}")Après 100 mises à jour, la perte est d’environ 0.056531 sans momentum et 0.000216 avec momentum. L’historique directionnel accumulé accélère la progression le long de la coordonnée peu pentue.
Utilisations en entraînement de vision par ordinateur#
Le momentum contribue à l’entraînement des réseaux de neurones convolutifs pour la classification d’images et la détection d’objets. L’entraînement Ultralytics YOLO active le momentum de Nesterov lorsque optimizer="SGD" est sélectionné, et son paramètre momentum contrôle l’historique des mises à jour conservé. L’implémentation de l’entraîneur transmet ce coefficient à l’optimiseur avec nesterov=True.
Une application majeure est la procédure d’entraînement originale de ResNet pour ImageNet. Ces modèles utilisaient SGD avec un momentum de 0.9, une taille de lot de 256, une décroissance des poids de 0.0001 et un taux d’apprentissage initial de 0.1, divisé par dix lorsque l’erreur stagnait.










