diff --git a/report/report.qmd b/report/report.qmd index 36b55f682dd17f2d76e23d386945da03e572b0b4..c151c2b8962b9326a77804f24edad0371156bb1a 100644 --- a/report/report.qmd +++ b/report/report.qmd @@ -1,6 +1,7 @@ --- title: | Descente de Gradient +  subtitle: ISC_423 author: - Aliya Myaz @@ -83,13 +84,18 @@ ci-dessous ont été effectués sur la fonction $f$ : $$ f(x, y) = x^2 + ky^2 \quad \forall k \in \mathbb{N} -$$ +$$ {#eq-func-bol} $\text{n.b.}$ : Le gradient $\nabla$ de la fonction ci-dessus est accentué dans -la direction de l'axe $y$ à l'aide du facteur $k = 5$, ceci aura son importance +la direction de l'axe $y$ à l'aide du facteur $k = 5$. Ceci aura son importance pour la visualisation de la méthode d'**Adam**. -::: {#fig-basegd-lr layout="[[1], [1, 1]]"} +Sur les figures ci-dessous nous pouvons voir l'effet du _learning rate_ sur le +nombre d'itérations de l'algorithme avant qu'on n'atteigne le minimum se +situant en $(x, y) = (0, 0)$. + + +:::: {#fig-basegd-lr layout="[[1], [1, 1]]"} {width=80%} @@ -97,8 +103,91 @@ pour la visualisation de la méthode d'**Adam**. {width=80%} -Variation de $\lambda$ sur la descente simple +Variation de $\lambda$ lors de la descente simple +:::: + +Dans le cas de la première figure, nous pouvons voir que suite aux grands pas +effectués à chaque itération, la trajectoire est saccadée même si le minimum +est tout de même atteint. Le problème qui peut survenir suite à un $\lambda$ si +grand est le fait de potentiellement passer au-delà d'un fossé qui puisse contenir +le minimum recherché. Ce cas sera illustrer plus tard. + +### Conclusion intermédiaire + +A travers les exemples présenter sur la @fig-basegd-lr, nous pouvons facilement +se convaincre que le bon choix de la valeur du taux d'apprentissage, comme +beaucoup de choses dans la vie, repose sur un compromis. La valeur de $\lambda$ +ne doit pas être à la fois trop petite (sinon le nombre d'itérations deviendra +énorme) ni trop grande (risque de rater un minimum, en "sautant" par-dessus). + +Dès lors, la valeur du taux d'apprentissage choisie pour les algorithmes de +descente simple, Momentum et Nesterov sera de $\lambda = 1 \cdot 10^{-2}$. + +## Effet du taux d'inertie $\gamma$ -- descente Momentum + +À présent, nous nous pencherons sur la première des trois déclinaisons des +descentes "élaborées" en commençant par la méthode **Momentum**. Le but +principal de celle-ci est d'introduire un second paramètre $\gamma$ censé +représenter la mémoire du "passé". Il est évident que la notion de "passé" +est liée aux pas effectuées précédemment. Ce paramètre permet donc principalement +d'accentuer la taille du pas en fonction de la topologie dans son voisinage. +De manière plus simple, cela signifie que si la pente est raide, on peut se +permettre de faire un plus grand. Inversement, si le taux de variation est faible +alors le pas devra être petit. Ceci permet de diminuer la quantité d'itérations +nécéssaires pour atteindre un minimum. + +::: {.callout-note} +Une faible valeur de $\gamma$ implique le fait qu'on porte peu d'importance aux +pas précédents. En effet si $\gamma = 0$, alors on aboutit à une descente de +gradient simple. ::: +:::: {#fig-momentum-gamma layout="[1,1]"} + +{#fig-gamma-01} + +{#fig-gamma-05} + +Introduction du paramètre _momentum_ $\gamma$ +:::: + +Pour pouvoir mieux voir la différence avec les méthode simple, nous allons +définir la valeur de $\lambda = 0.9$. Grâce à cette valeur nous pouvons à présent +réellement apprécier la trajectoire totalement différente produite par la +descente **Momentum**. + +La trajectoire de la descente peut être assimilée à celle d'une bille qui roule +le long d'un dénivelé. Lors d'une forte descente, la fréquence des "pas" est +réduite car ceux-ci sont plus grands. La figure ci-dessous nous permet aussi +de voir que suite aux grands pas effectués initialement, nous avons _overshoot_ +(en bon français) la zone en $y = 0$, d'où la "courbe" de correction tracée qui +rappelle justement la trajectoire d'une bille. + +{#fig-gamma-09} + +### Conclusion intermédiaire + +Dans cette partie nous avons pu voir la manière dont la méthode **Momentum** +permet d'améliorer la descente de gradient. Grâce à l'inertie introduite à l'aide +du paramètre $\gamma$, nous avons pu réduire d'un facteur de $2$ (même un peu +plus, $\sim 2.517$ pour être précis) le nombre d'itérations réquises pour un +même taux d'apprentissage de $\lambda = 0.01$. La méthode simple nécessitait +798 itérations contre les 317 de **Momentum**. + +## Comparaison entre les méthodes Momentum et Nesterov + +Pour cette démonstration, nous avons dû réduire le canal $\alpha$ afin de +diminuer l'opacité du graphique pour pouvoir mieux observer les deux +trajectoires. + +{#fig-nesterov} -<!-- {width=70%} {width=70%} --> +La trajectoire empruntée par la descente **Nesterov** est _étrangement_ +similaire à celle de **Momentum** à un détail près, elle est **moins erratique**. +Ceci est dû au fait qu'avant d'effectuer le pas (c'est-à-dire passer à la +prochaine itération), **Nesterov** pré-calcule $\nabla{f}(\vec{x}_{k + 1})$ pour +corriger le grand pas effectuer par **Momentum** de sorte à pousser la +trajectoire un peu plutôt dans la bonne direction vers le minimum. La @fig-nesterov +l'illustre très bien, les deux trajectoires ont les mêmes tendances sauf que +l'orange (Nesterov) se "redresse" plutôt et atteint le minimum plus rapidement +que Momentum (205 contre 317 itérations).