Momentum en IA : accélérer l’apprentissage sans déraper13 min de lecture2 556 mots

Momentum en IA : accélérer l’apprentissage sans déraper

Comprenez comment le momentum aide un modèle à franchir les creux et à apprendre plus vite, quand il risque d’osciller et pourquoi Nesterov peut freiner.

momentum en apprentissage automatiquedescente de gradientoptimisation de modèle IAmomentum de Nesteroventraînement de réseaux de neurones
Momentum en IA : accélérer l’apprentissage sans déraper

Comment le momentum aide un modèle d'IA à franchir les mauvais creux

L'algorithme de descente de gradient ajuste les paramètres d'un modèle en suivant la pente de sa fonction de perte. La règle marche, mais elle a un défaut assez évident : à chaque étape, l'algorithme ne regarde que la pente au point où il se trouve. Dans un creux local, la pente peut devenir nulle alors qu'un meilleur minimum existe ailleurs. Et dans une vallée étroite, les mises à jour peuvent aussi partir d'un côté, puis de l'autre, avec pour effet un progrès plus lent.

Le momentum apporte une forme de mémoire. Au lieu de « repartir de zéro » à chaque itération, l'algorithme garde une partie de la vitesse accumulée avant. Résultat : il aide à traverser des zones plutôt plates et il favorise les directions qui restent cohérentes d'une étape à l'autre. Mais cette inertie n'est pas gratuite : selon le réglage, elle peut faire dépasser l'optimum et rendre l'optimisation instable.

On va donc voir l'idée, ce qu'elle change concrètement pendant l'entraînement, et quand la variante de Nesterov permet de mieux contrôler les oscillations. Les chiffres qui suivent viennent d'exemples jouets : ils rendent le mécanisme plus clair, sans garantir une performance similaire sur un modèle en production.

Pourquoi la descente de gradient reste-t-elle bloquée dans un creux ?

La descente de gradient standard met à jour un paramètre comme suit :

w ← w − η ∇L(w)

Ici, w est un paramètre du modèle, L la fonction de perte, ∇L(w) la pente locale et η le taux d'apprentissage. À chaque itération, l'algorithme avance dans la direction opposée à la pente, avec une taille de pas fixée par η. Le point important : il n'y a pas de mémoire. Le prochain déplacement ne dépend que du gradient actuel.

Un exemple à un seul paramètre

Prenons une fonction de perte avec deux creux. Le premier est peu profond ; le second correspond au meilleur minimum. Entre les deux, il y a une petite bosse. On démarre avec w = −3,5, sur une pente qui mène d'abord vers le premier creux.

Dans l'exemple, la perte est définie par :

L(w) = 0,12 (w − 2,5)² − 0,55 × exp(−(w + 1)² / 0,12)

Le creux local est autour de w = −0,904, avec une perte de 0,881. Le minimum global est à w = 2,5, où la perte vaut 0. La bosse entre les deux creux ne remonte que de 0,13 au-dessus du fond du premier.

Avec un taux d'apprentissage η = 0,1, la descente de gradient progresse d'abord vite, puis ralentit à mesure que la pente s'aplatit. Elle atteint le creux local vers la 21e étape. À partir de là, le gradient est nul, donc la mise à jour l'est aussi : après 50 ou 100 étapes, le paramètre ne bouge presque plus. Il reste donc coincé.

Ce que cet exemple dit - et ne dit pas

Ce n'est pas un « bug », juste la conséquence directe de la règle utilisée. La méthode ne dispose d'aucune information globale qui lui permettrait de distinguer « ce creux-ci » d'un meilleur creux ailleurs. Un gradient nul dit seulement : « ici, je ne trouve aucune pente à suivre ».

Dans un entraînement réel d'un réseau de neurones, la fonction de perte dépend de beaucoup de paramètres et sa géométrie est beaucoup plus compliquée qu'une courbe à une dimension. Cet exemple ne reproduit donc pas l'entraînement industriel : il isole un piège utile à comprendre. Quand on ne s'appuie que sur le gradient courant, on peut progresser lentement... ou rester durablement dans une zone peu favorable.

Le momentum ne donne pas une carte complète de la fonction. Il ajoute simplement une information utile : la direction « suivie » sur les dernières étapes.

Comment le momentum utilise-t-il l'historique des gradients ?

Le momentum garde un vecteur de vitesse v pour chaque paramètre. Une écriture courante est :

vₜ = βvₜ₋₁ + ∇L(wₜ)
wₜ₊₁ = wₜ − ηvₜ

Le coefficient β règle la quantité de vitesse conservée. Avec β = 0,9, on garde 90 % de la vitesse précédente et on ajoute le gradient actuel. Le paramètre avance alors selon la vitesse accumulée, plutôt que de ne réagir qu'à la pente du moment.

Une mémoire pondérée, pas un historique complet

En développant la formule, on obtient :

vₜ = ∇Lₜ + β∇Lₜ₋₁ + β²∇Lₜ₋₂ + ...

Le gradient le plus récent compte à part entière. Celui de l'étape précédente est pondéré par β, puis β², etc. Avec β = 0,9, les poids deviennent 1, 0,9, 0,81, 0,729... L'idée est claire : les gradients anciens ne disparaissent pas d'un coup, ils s'éteignent progressivement.

Quand les gradients restent exactement dans la même direction, la somme des poids tend vers 1 / (1 − β). Avec β = 0,9, ça donne 10. On peut donc parler d'une « mémoire effective » d'environ dix étapes quand le sens ne change pas. Mais ce n'est pas une fenêtre de taille fixe : ce n'est pas « les dix derniers gradients seulement ».

Certaines notes de cours utilisent une convention différente :

vₜ = βvₜ₋₁ + (1 − β)∇Lₜ

Cette variante ajuste l'échelle de la contribution des gradients et peut modifier l'amplitude de la vitesse. Si on compare deux réglages, il faut donc vérifier quelle convention est utilisée.

Quand les gradients s'accordent ou s'annulent

Si plusieurs gradients successifs pointent dans la même direction, ils s'accumulent. Par exemple, avec des gradients constants à +1 et β = 0,9, la vitesse évolue comme 1, 1,9, 2,71, 3,44... Elle tend vers 10. Le déplacement effectif augmente donc dans la direction cohérente.

Si au contraire les gradients changent souvent de signe, la vitesse oscille autour de zéro. Pour la séquence +1, −1, +1, −1, la vitesse vaut environ 1, −0,1, 0,91, −0,18, 0,84. Plus loin, son amplitude se rapproche de 1 / (1 + β), soit environ 0,53 quand β = 0,9.

C'est ce filtrage qui rend le momentum pratique : il renforce les tendances qui persistent et il amortit une partie des inversions rapides. Dans l'exemple à deux creux, la vitesse accumulée avant le creux local permet de continuer à avancer même quand le gradient devient nul. Le paramètre traverse la petite bosse, dépasse le minimum global, puis revient et se stabilise autour de w = 2,5 vers la 89e étape.

Et oui, il y a un compromis : l'inertie aide à franchir un obstacle, mais elle ne sait pas si le prochain pas sera vraiment utile. Le momentum peut passer un petit creux... ou aller trop loin et osciller avant de converger.

Pourquoi le momentum accélère-t-il dans une vallée étroite ?

Un autre cas se produit quand la fonction de perte a des courbures très différentes selon les directions. Imaginez une vallée longue et étroite : elle descend doucement le long de sa longueur, mais ses parois sont raides. Le gradient pousse alors fort de gauche à droite, alors que le progrès « dans le sens de la vallée » avance lentement.

On peut modéliser ça avec deux paramètres :

L = ½(w₁² + 50w₂²)

Le facteur 50 rend la perte beaucoup plus raide dans la direction w₂ que dans la direction w₁. En partant de (−4, 1), la perte initiale vaut 33. L'objectif est de descendre sous 0,001.

Le compromis imposé par le taux d'apprentissage

Avec un taux d'apprentissage η = 0,015, la descente de gradient standard atteint le seuil après 298 étapes. Elle doit avancer prudemment, parce qu'augmenter η peut déstabiliser la direction la plus raide.

Par exemple, si η = 0,045, le facteur de mise à jour dans la direction de courbure 50 devient :

1 − 0,045 × 50 = −1,25

Le signe négatif indique qu'on « saute » d'un côté à l'autre de la vallée. Et comme la valeur absolue est supérieure à 1, les oscillations s'amplifient au lieu de s'atténuer : la mise à jour diverge sur cette direction. Le taux d'apprentissage doit donc rester assez petit pour maîtriser les parois raides, ce qui ralentit le progrès le long du fond de la vallée.

Ce que change le momentum

Avec β = 0,9 et le même η = 0,015, le momentum atteint le seuil en 73 étapes dans cet exemple. Le long de la vallée, les gradients successifs ont tendance à garder le même sens, et la vitesse accumulée aide à avancer plus vite.

En travers de la vallée, les gradients changent plus facilement de sens. Le momentum n'élimine pas ces inversions : il les amortit en partie, mais l'inertie peut encore créer des oscillations. Donc oui, le gain de vitesse existe ici, mais ce n'est pas une trajectoire parfaitement lisse.

En pratique, c'est exactement ce qui compte pour des réseaux de neurones : selon les paramètres, les sensibilités peuvent être très différentes. Une méthode qui réduit les allers-retours tout en accélérant quand les gradients sont cohérents peut diminuer le nombre d'itérations nécessaires. Mais attention : réduire le nombre de pas ne garantit pas automatiquement une baisse proportionnelle du coût total, car chaque étape dépend aussi du coût de calcul, de la taille des lots, du matériel et de la qualité des données.

À retenir : dans une vallée étroite, le momentum ne supprime pas le besoin de régler η. Il exploite surtout la cohérence des gradients le long de la vallée, tout en pouvant encore osciller sur les flancs.

Quand Nesterov améliore-t-il le momentum classique ?

Le momentum classique calcule le gradient au point actuel, puis le combine avec la vitesse conservée. Le momentum de Nesterov modifie légèrement le « moment » où l'on évalue le gradient : il regarde le gradient à une position anticipée, celle que la vitesse précédente est en train de viser.

Une écriture courante est :

vₜ = βvₜ₋₁ + ∇L(wₜ − ηβvₜ₋₁)

Le terme wₜ − ηβvₜ₋₁ correspond à l'anticipation. Si la pente à cet endroit indique que le paramètre risque de dépasser le fond de la vallée, le gradient obtenu peut freiner la vitesse avant que le dépassement ne s'emballe.

Comparaison sur le même exemple

Sur la vallée précédente, le momentum de Nesterov atteint la perte cible en 18 étapes. Le momentum classique met 73 étapes, et la descente de gradient standard 298 étapes. Dans cet exemple, la trajectoire montre aussi moins d'oscillations.

Ces chiffres illustrent le mécanisme, pas un classement « universel ». Tout dépend de la fonction de perte, du point de départ, du taux d'apprentissage, de β, et de la forme exacte de la mise à jour. Une configuration très efficace sur un exemple jouet peut être moins adaptée à un autre jeu de données ou à une contrainte de calcul différente.

Mise en œuvre avec PyTorch

Dans PyTorch, on peut activer le momentum et Nesterov via SGD :

optimiseur = torch.optim.SGD(

modele.parameters(),

lr=0.015,

momentum=0.9,

nesterov=True

)

Chaque paramètre du modèle dispose d'un état de vitesse, donc il y a un coût mémoire à considérer, surtout pour les modèles volumineux. Le code montre l'activation, mais ne remplace pas une vérification sur votre tâche.

On peut aussi vérifier l'idée avec une mini-simulation sur des gradients alternés :

vitesse = 0.0

resultats = []

for gradient in [1, -1, 1, -1, 1]:

vitesse = 0.9 * vitesse + gradient

resultats.append(round(vitesse, 2))

print(resultats)

Le résultat est [1.0, -0.1, 0.91, -0.18, 0.84]. Si tous les gradients valent +1, la vitesse augmente progressivement vers 10. C'est utile pour vérifier l'intuition, mais ça ne remplace pas l'évaluation sur la tâche réelle.

Une méthode de réglage pragmatique

Pour comparer les variantes sur un projet, gardez le reste aussi constant que possible : même modèle, mêmes données, même découpage, même nombre de mises à jour, mêmes critères d'évaluation. Suivez au minimum la perte d'entraînement, la performance sur validation, la stabilité des gradients et le temps de calcul.

Si la perte oscille ou augmente, regardez d'abord le taux d'apprentissage et la normalisation des données avant de conclure que le momentum est responsable. Si l'entraînement est stable mais lent, comparez momentum classique et Nesterov sur plusieurs exécutions, parce que l'aléa des lots peut changer les résultats.

En bref : le bon choix dépend du coût d'une expérimentation et de votre objectif. Pour un prototype, une méthode simple et reproductible peut suffire. Pour un entraînement coûteux, quelques comparaisons contrôlées valent mieux qu'une adoption automatique d'une valeur « réputée ».

Conclusion : choisir une dynamique adaptée

Le momentum ajoute une mémoire pondérée à la descente de gradient. Il renforce les directions suivies de manière régulière, amortit certaines variations et peut aider à franchir un creux local. Dans une vallée étroite, il peut réduire fortement le nombre d'étapes, tout en causant encore des dépassements selon le réglage.

Nesterov ajoute un regard vers l'avant pour anticiper un freinage plus tôt. Les exemples chiffrés montrent l'intérêt possible, mais ils ne dispensent pas de tester sur le modèle visé : performances, stabilité et coût de calcul comptent autant que la théorie.

Pour décider, partez de ce que vous observez : lenteur dans une direction cohérente, oscillations, instabilité, ou coût trop élevé. Ensuite, comparez les variantes avec un protocole contrôlé. En entraînement comme en production, un optimiseur n'est pas une fin en soi : il se juge sur des résultats reproductibles, utiles pour le modèle et pour le produit.

Questions frequentes

Non. Il peut accélérer les directions où les gradients restent cohérents et limiter certaines oscillations, mais une vitesse trop importante peut provoquer des dépassements ou déstabiliser l’entraînement. Son effet dépend de la fonction de perte, du taux d’apprentissage, de β et des données. Il faut le mesurer sur le problème réel.
Dans la formulation présentée, β = 0,9 signifie que 90 % de la vitesse précédente est conservée à chaque étape, avant l’ajout du gradient courant. Les anciens gradients perdent ensuite progressivement de leur influence. Ce réglage ne signifie pas que l’algorithme conserve exactement dix gradients.
Non. L’inertie peut aider à traverser une zone plate ou une petite bosse, comme dans l’exemple à un paramètre. Elle ne garantit pas de franchir des obstacles importants ni de trouver le minimum global d’une fonction complexe. Elle ne remplace ni l’évaluation du modèle ni une stratégie d’entraînement adaptée.
Le momentum classique évalue le gradient à la position actuelle. Nesterov l’évalue à un point d’anticipation, dans la direction où la vitesse précédente mène le paramètre. Cette information peut freiner certaines oscillations plus tôt, mais le résultat dépend toujours des réglages et de la tâche.

Articles similaires