← Tous les articles

Mathématiques Prototype

Comprendre le gradient

Comment un modèle peut-il savoir dans quel sens modifier ses paramètres pour réduire ses erreurs ?

Avant de parler d’apprentissage, nous devons répondre à une question plus simple : si nous changeons légèrement un paramètre, comment la valeur d’une fonction va-t-elle évoluer ?

Avec un seul paramètre, cette question nous ramène à la pente d’une courbe. Avec deux paramètres, elle nous conduit sur une surface. Avec des millions, le principe reste le même.

Le gradient est l’information qui relie toutes ces situations.

Une courbe, un point, une pente

Imaginons une fonction qui associe une valeur à un paramètre θ\gOne{\theta} :

L(θ)=θ2L(\gOne{\theta})=\gOne{\theta}^2

Pour l’instant, peu importe ce que représente cette valeur. Nous voulons simplement comprendre comment elle change lorsque nous déplaçons θ\gOne{\theta}.

Plaçons-nous en θ=2\gOne{\theta}=2. La fonction vaut alors 44.

Si nous augmentons légèrement θ\gOne{\theta}, la valeur augmente. Si nous le diminuons légèrement, elle baisse. Mais nous pouvons être plus précis : à quelle vitesse cette valeur change-t-elle autour de notre position ?

La dérivée répond à cette question :

L′(θ)=2θL'(\gOne{\theta})=2\gOne{\theta}

En θ=2\gOne{\theta}=2, elle vaut 44. Géométriquement, c’est la pente de la tangente à la courbe à cet endroit.

Pour un petit déplacement Δθ\gStep{\Delta\theta}, nous pouvons donc estimer la variation de la fonction :

L(θ+Δθ)−L(θ)≈L′(θ) ΔθL(\gOne{\theta}+\gStep{\Delta\theta})-L(\gOne{\theta}) \approx L'(\gOne{\theta})\,\gStep{\Delta\theta}

Un déplacement de +0,01+0{,}01 produit ici une augmentation d’environ 0,040{,}04. Un déplacement de −0,01-0{,}01 produit une diminution d’environ 0,040{,}04.

La tangente est une approximation locale de la courbe. Plus nous nous éloignons du point de départ, moins cette approximation a de raisons d’être précise.

EXPÉRIENCE 01 / 06

Une pente en chaque point

-303θL
● Point θ (déplaçable)Tangente et sens de montéeΔθ

Approximation locale

L(θ)=θ2L(\gOne{\theta})=\gOne{\theta}^2
L′(2)=4L'(\gOne{2})=\gGrad{4}
L(2)=4L(\gOne{2})=4

Variation estimée

L′(θ)Δθ=4×0.01=0.04L'(\gOne{\theta})\gStep{\Delta\theta}=\gGrad{4}\times\gStep{0.01}=0.04

Variation réelle

L(θ+Δθ)−L(θ)=0.0401L(\gOne{\theta}+\gStep{\Delta\theta})-L(\gOne{\theta})=0.0401

Écart réel − estimation : 0.0001

De l’autre côté de la parabole, en θ=−2\gOne{\theta}=-2, la dérivée vaut −4-4. Augmenter θ\gOne{\theta} fait maintenant diminuer la fonction. Pour monter, nous devons aller vers les valeurs plus négatives.

Le signe de la dérivée nous indique donc le sens de montée. Sa valeur absolue mesure à quel point la fonction varie rapidement, localement.

Et au fond de la parabole ? La dérivée vaut zéro. La tangente est horizontale : pour des déplacements minuscules, le terme de variation du premier ordre est nul. Cela ne signifie pas que la fonction reste constante autour du point.

La dérivée ne connaît que le voisinage

Changeons maintenant de courbe :

L(θ)=sin⁡θ+0,2θL(\gOne{\theta})=\sin\gOne{\theta}+0{,}2\gOne{\theta}

Elle monte, redescend, puis remonte. Pourtant, nous pouvons poser exactement la même question en chaque point : que se passe-t-il si nous bougeons légèrement notre paramètre ?

Sa dérivée vaut :

L′(θ)=cos⁡θ+0,2L'(\gOne{\theta})=\cos\gOne{\theta}+0{,}2

Il n’est pas nécessaire de connaître la forme complète de la courbe pour lire sa pente à une position donnée. C’est aussi la limite de cette information : une pente nous renseigne sur ce qui se passe ici, pas sur ce qui nous attend au loin.

EXPÉRIENCE 02 / 06

Une information locale

-3036θL
● Point θ (déplaçable)Tangente et sens de montée

La pente à la position choisie

L(θ)=sin⁡(θ)+0.2θL(\gOne{\theta})=\sin(\gOne{\theta})+0.2\gOne{\theta}

La dérivée de sin θ est cos θ ; celle de 0,2θ est 0,2.

L′(θ)=cos⁡(θ)+0.2L'(\gOne{\theta})=\cos(\gOne{\theta})+0.2
L′(2)=cos⁡(2)+0.2L'(\gOne{2})=\cos(\gOne{2})+0.2
L′(2)=−0.2161L'(\gOne{2})=\gGrad{-0.2161}
L(2)=1.3093L(\gOne{2})=1.3093

La pente est négative : augmenter légèrement θ fait baisser L. Pour monter, il faut diminuer θ. Déplacez le point pour voir la pente changer. Elle décrit le voisinage du point, pas toute la courbe.

Deux paramètres : la courbe devient une surface

Supposons maintenant que la fonction dépende de deux paramètres :

L(θ1,θ2)=θ12+2θ22L(\gOne{\theta_1},\gTwo{\theta_2})=\gOne{\theta_1}^2+2\gTwo{\theta_2}^2

Une position est désormais un couple (θ1,θ2)(\gOne{\theta_1},\gTwo{\theta_2}). La valeur de la fonction donne la hauteur au-dessus de cette position. Notre courbe devient une surface en forme de bol.

Nous pouvons encore mesurer une pente, mais il faut préciser dans quelle direction nous nous déplaçons.

Commençons par modifier seulement θ1\gOne{\theta_1}, en gardant θ2\gTwo{\theta_2} fixe. Nous obtenons une coupe de la surface : une courbe dont nous pouvons mesurer la pente.

Cette pente est la dérivée partielle par rapport à θ1\gOne{\theta_1} :

∂L∂θ1=2θ1\frac{\partial L}{\partial\gOne{\theta_1}}=2\gOne{\theta_1}

Puis nous faisons l’inverse : nous gardons θ1\gOne{\theta_1} fixe et modifions seulement θ2\gTwo{\theta_2}.

∂L∂θ2=4θ2\frac{\partial L}{\partial\gTwo{\theta_2}}=4\gTwo{\theta_2}

Le symbole ∂\partial indique simplement que nous dérivons par rapport à un paramètre tout en maintenant les autres constants.

EXPÉRIENCE 03 / 06

Une coordonnée à la fois

L120θ₁θ₂Coupe à θ₂ = 1.00Axes : ±2 · échelle de hauteur fixe

Coupe : θ₂ reste fixe

θ₁−22

Les deux dérivées partielles

L=θ12+2θ22L=\gOne{\theta_1}^2+2\gTwo{\theta_2}^2

Point choisi : θ₁ = 1, θ₂ = 1.

1. Faire varier θ₁, garder θ₂ fixe

La dérivée de θ₁² est 2θ₁. Le terme 2θ₂² reste constant : sa dérivée par rapport à θ₁ vaut 0.

∂L∂θ1=2θ1+0\frac{\partial L}{\partial\gOne{\theta_1}}=2\gOne{\theta_1}+0
=2×(1)=2=2\times(\gOne{1})=\gOne{2}

2. Faire varier θ₂, garder θ₁ fixe

Cette fois, θ₁² est constant. Pour 2θ₂², on garde le coefficient 2 et on dérive θ₂² en 2θ₂ : cela donne 2 × 2θ₂ = 4θ₂.

∂L∂θ2=0+2×2θ2\frac{\partial L}{\partial\gTwo{\theta_2}}=0+2\times2\gTwo{\theta_2}
=4×(1)=4=4\times(\gTwo{1})=\gTwo{4}

Ces deux résultats sont des pentes. La hauteur de la surface au même point vaut :

L(1,1)=3L(\gOne{1},\gTwo{1})=3

La tangente verte montre la pente de la coupe sélectionnée. L’autre coordonnée reste constante pendant le déplacement.

Assembler les pentes : le gradient

Nous avons maintenant deux informations : le taux de variation selon le premier axe et le taux de variation selon le second.

Nous les réunissons dans un vecteur :

∇L(θ1,θ2)=[∂L∂θ1∂L∂θ2]\gGrad{\nabla} L(\gOne{\theta_1},\gTwo{\theta_2})= \begin{bmatrix} \dfrac{\partial L}{\partial\gOne{\theta_1}}\\[4pt] \dfrac{\partial L}{\partial\gTwo{\theta_2}} \end{bmatrix}

Ce vecteur s’appelle le gradient. Le symbole ∇\gGrad{\nabla} se lit « nabla » (C’est de ce symbole que vient le nom Nablab.)

À la position (1,1)(1,1) de notre surface, il vaut :

∇L(1,1)=[24]\gGrad{\nabla} L(1,1)= \begin{bmatrix}\gOne{2}\\\gTwo{4}\end{bmatrix}

Nous pouvons le représenter par une flèche dans le plan des paramètres. Elle combine les deux pentes et pointe dans la direction de plus forte augmentation locale, lorsque nous comparons des déplacements de même longueur.

Le mot « locale » est important ici : nous cherchons la meilleure direction pour un déplacement infinitésimal, pas une destination qui serait forcément la plus haute après un grand saut.

ANIMATION 04 / 06

Construire le gradient

Déplacez le curseur pour construire les deux composantes, puis leur somme : le gradient.

-3-3-2-2-1-1112233θ₁θ₂

Assembler les composantes

On se place au point (θ₁, θ₂) = (1, 1). Avec les dérivées calculées dans l’expérience précédente :

∂L∂θ1=2×1=2\frac{\partial L}{\partial\gOne{\theta_1}}=2\times\gOne{1}=\gOne{2}
∂L∂θ2=4×1=4\frac{\partial L}{\partial\gTwo{\theta_2}}=4\times\gTwo{1}=\gTwo{4}

Le gradient réunit ces deux pentes dans un vecteur :

∇L(1,1)=[24]\gGrad{\nabla} L(\gOne{1},\gTwo{1})=\begin{bmatrix}\gOne{2}\\\gTwo{4}\end{bmatrix}
[20]+[04]=[24]\begin{bmatrix}\gOne{2}\\0\end{bmatrix}+\begin{bmatrix}0\\\gTwo{4}\end{bmatrix}=\begin{bmatrix}\gOne{2}\\\gTwo{4}\end{bmatrix}

Plan des paramètres (θ₁, θ₂). Les flèches sont affichées à l’échelle × 0,4 pour rester dans le repère.

La flèche bleue représente la pente 2 selon θ₁, la violette la pente 4 selon θ₂. Leur somme forme la flèche verte : le gradient (2, 4).

Lire une surface sans la 3D

Une carte topographique représente un relief à l’aide de lignes de niveau. Chaque ligne relie des positions situées à la même altitude.

Nous pouvons faire la même chose avec notre fonction : chaque ligne relie des couples (θ1,θ2)(\gOne{\theta_1},\gTwo{\theta_2}) pour lesquels LL a la même valeur.

Dans notre exemple, ces lignes sont des ellipses autour du minimum. Dans cet exemple simplifié, les lignes de niveau sont régulières. Pour d’autres fonctions, elles peuvent avoir des formes plus complexes, comme sur une carte topographique.

Une seule vue 2D suffit alors pour voir notre position, la valeur de la fonction et le gradient.

Et une propriété apparaît : lorsque le gradient est non nul, il est perpendiculaire à la ligne de niveau au point considéré.

Pourquoi perpendiculaire ?

Dans quelle direction monter le plus vite ?

Plaçons-nous sur une ligne de niveau et choisissons une direction de déplacement. Nous pouvons tourner cette direction, mais nous conservons toujours la même longueur de petit pas.

Certaines directions font monter la fonction, d’autres la font descendre. Une direction tangente à la ligne de niveau donne une variation du premier ordre nulle.

Si nous suivions exactement la ligne de niveau, notre hauteur resterait constante. Un petit pas droit dans sa direction tangente ne suit pas parfaitement une ligne courbe : sa variation réelle peut donc être légèrement différente de zéro. Cette différence devient négligeable au premier ordre lorsque le pas diminue.

EXPÉRIENCE 05 / 06

Choisir une direction

-3-3-2-2-1-1112233θ₁θ₂

Comparez ces directions. Laquelle fait le plus augmenter L localement ?

Suivre une ligne de niveau

● Point sur l’ellipse : L = 3

1. Les pentes au point blanc (1, 1)

∇L(1,1)=[2×14×1]=[24]\gGrad{\nabla L}(1,1)=\begin{bmatrix}\gOne{2\times1}\\\gTwo{4\times1}\end{bmatrix}=\begin{bmatrix}\gOne{2}\\\gTwo{4}\end{bmatrix}

2 et 4 sont les composantes du gradient, calculées dans les expériences précédentes. Elles restent fixes : le point blanc ne bouge pas.

2. La direction choisie u

u=[u1u2]≈[10]\gDirection{\mathbf u}=\begin{bmatrix}\gDirection{u_1}\\\gDirection{u_2}\end{bmatrix}\approx\begin{bmatrix}\gDirection{1}\\\gDirection{0}\end{bmatrix}

u₁ et u₂ indiquent les parts de la direction selon les deux axes. « Selon θ₁ » donne (1, 0), « Selon θ₂ » donne (0, 1). La flèche orange garde une longueur de 1 pour comparer les directions à longueur égale.

D’où viennent les décimales de u ?

On fait tourner une flèche de longueur 1. Pour un angle β mesuré depuis l’axe θ₁, ses coordonnées sont cos β et sin β.

u1=cos⁡(0∘)≈1\gDirection{u_1}=\cos(0^\circ)\approx\gDirection{1}
u2=sin⁡(0∘)≈0\gDirection{u_2}=\sin(0^\circ)\approx\gDirection{0}

La longueur reste 1, car cos² β + sin² β = 1. Ces coordonnées décrivent la direction choisie ; elles ne sont pas les dérivées de L.

3. Combiner les deux contributions

On multiplie chaque pente par la composante correspondante de u, puis on additionne :

DuL=2 u1+4 u2D_{\gDirection{\mathbf u}}L=\gOne{2}\,\gDirection{u_1}+\gTwo{4}\,\gDirection{u_2}
≈2×(1)+4×(0)\approx\gOne{2}\times(\gDirection{1})+\gTwo{4}\times(\gDirection{0})
≈2\approx\gGrad{2}

DᵤL est le taux de variation de L dans la direction u. La valeur de la fonction au point blanc reste L(1, 1) = 1² + 2 × 1² = 3.

La fonction augmente dans cette direction, localement.

Le point violet suit exactement la ligne de niveau : la valeur de L reste constante.

u : longueur 1Tangente en pointillés

Nous pouvons décomposer une direction en deux parties : une partie tangente à la ligne de niveau et une partie perpendiculaire.

La partie tangente n’apporte aucune augmentation au premier ordre. Pour une longueur de déplacement fixée, lui consacrer une partie du pas réduit donc ce qui reste pour monter. La direction de plus forte montée est entièrement perpendiculaire à la ligne de niveau, du côté où les valeurs augmentent.

Ce que dit le produit scalaire

Nous venons d’observer le phénomène. Une formule permet de le résumer :

DuL=∇L⋅uD_{\gDirection{\mathbf u}}L=\gGrad{\nabla} L\cdot\gDirection{\mathbf u}

La dérivée directionnelle DuLD_{\gDirection{\mathbf u}}L mesure le taux de variation de LL dans la direction unitaire u\gDirection{\mathbf u}.

Le produit scalaire peut aussi s’écrire :

∇L⋅u=∥∇L∥cos⁡φ\gGrad{\nabla} L\cdot\gDirection{\mathbf u} =\|\gGrad{\nabla} L\|\cos\varphi

où φ\varphi est l’angle entre le gradient et notre direction.

Lorsque les deux sont alignés, cos⁡φ=1\cos\varphi=1 : le taux de variation est maximal. Lorsqu’ils sont perpendiculaires, il vaut zéro. Lorsqu’ils pointent en sens opposés, il est minimal : nous descendons le plus vite, localement.

Nous supposons ici la distance euclidienne habituelle dans les coordonnées choisies. Changer l’échelle des paramètres change ce que nous considérons comme des déplacements de même longueur.

Explorer l’angle et le produit scalaire
ANIMATION 06 / 06

Trouver le bon angle

-3-3-2-2-1-1112233θ₁θ₂

Mouvement réduit : utilisez les pas ou le curseur.

La longueur du gradient (2, 4)

La norme est la longueur du vecteur. Le théorème de Pythagore donne :

∥∇L∥=22+42\|\gGrad{\nabla L}\|=\sqrt{\gOne{2}^2+\gTwo{4}^2}
=4+16=20≈4.4721=\sqrt{4+16}=\sqrt{20}\approx4.4721

φ : angle avec le gradient

φ=0∘\varphi=0^\circ
∇L⋅u=∥∇L∥cos⁡φ\gGrad{\nabla L}\cdot\gDirection{\mathbf u}=\|\gGrad{\nabla L}\|\cos\varphi
=20cos⁡(0∘)=4.4721=\sqrt{20}\cos(0^\circ)=4.4721
√20−√200°90°180°270°360°

Maximum à 0°, zéro à 90°, minimum à 180°. La direction u a toujours une norme de 1. Le gradient est affiché à l’échelle × 0,4.

Et avec des millions de paramètres ?

Avec un seul paramètre, le gradient n’a qu’une composante : la dérivée.

Avec deux paramètres, il contient deux dérivées partielles. Avec nn paramètres, il en contient nn :

∇L(θ)=[∂L∂θ1∂L∂θ2⋮∂L∂θn]\gGrad{\nabla} L(\boldsymbol\theta)= \begin{bmatrix} \dfrac{\partial L}{\partial\gOne{\theta_1}}\\[4pt] \dfrac{\partial L}{\partial\gTwo{\theta_2}}\\ \vdots\\ \dfrac{\partial L}{\partial\theta_n} \end{bmatrix}

Nous ne pouvons plus dessiner le paysage complet, mais nous pouvons toujours calculer comment la fonction réagit à une petite modification de chaque paramètre.

Pour un modèle de machine learning, ces paramètres sont notamment ses poids et ses biais. La fonction LL mesure ses erreurs. Le gradient rassemble donc les informations nécessaires pour savoir comment ces erreurs évoluent localement lorsque nous changeons les paramètres.

Reste une question : maintenant que nous savons dans quelle direction l’erreur augmente le plus vite, comment utiliser cette information pour la réduire ?

C’est le rôle de la descente de gradient.