Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
gradient_descent
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ISC2
maths
gradient_descent
Commits
65f035c5
Verified
Commit
65f035c5
authored
11 months ago
by
iliya.saroukha
Browse files
Options
Downloads
Patches
Plain Diff
feat: up to and including Nesterov (done), Adam TODO + other functions
parent
a1996f40
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
report/report.qmd
+94
-5
94 additions, 5 deletions
report/report.qmd
with
94 additions
and
5 deletions
report/report.qmd
+
94
−
5
View file @
65f035c5
---
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$
, c
eci aura son importance
la direction de l'axe $y$ à l'aide du facteur $k = 5$
. C
eci 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).
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment