Skip to content
Snippets Groups Projects
Verified Commit 65f035c5 authored by iliya.saroukha's avatar iliya.saroukha :first_quarter_moon:
Browse files

feat: up to and including Nesterov (done), Adam TODO + other functions

parent a1996f40
Branches
Tags
No related merge requests found
---
title: |
Descente de Gradient
![](./figs/ackley/titlepage.svg)
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]]"}
![$\lambda = 1 \cdot 10^{-1}$, $\text{iter} = 73$](./figs/f/lr_1e-1.svg){width=80%}
......@@ -97,8 +103,91 @@ pour la visualisation de la méthode d'**Adam**.
![$\lambda = 1 \cdot 10^{-3}$, $\text{iter} = 8051$](./figs/f/lr_1e-3.svg){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]"}
![$\gamma = 0.1$](./figs/f/momentum_gamma_1e-1.svg){#fig-gamma-01}
![$\gamma = 0.5$](./figs/f/momentum_gamma_5e-1.svg){#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.
![Descente Momentum, $\gamma = 0.9$](./figs/f/momentum_gamma_9e-1.svg){#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.
![Trajectoires des descentes, Momentum vs Nesterov](./figs/f/nesterov.svg){#fig-nesterov}
<!-- ![](./figs/f/lr_2e-2.svg){width=70%} ![](./figs/f/lr_1e-3.svg){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).
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment