diff --git a/report/report.qmd b/report/report.qmd new file mode 100644 index 0000000000000000000000000000000000000000..36b55f682dd17f2d76e23d386945da03e572b0b4 --- /dev/null +++ b/report/report.qmd @@ -0,0 +1,104 @@ +--- +title: | + Descente de Gradient +subtitle: ISC_423 +author: + - Aliya Myaz + - Omar Alkheja + - Iliya Saroukhanian +lang: fr-CH +date: today +date-format: long +format: + pdf: + documentclass: scrreprt + papersize: a4 + lof: true + highlight-style: github + toc: true + number-sections: true + colorlinks: true +--- + +# Introduction + +Dans le cadre de ce travail pratique, nous étions amenés à nous familiariser +avec le concept de la descente de gradient dans le contexte de l’apprentissage +machine et l’intelligence artificielle. + +La descente de gradient (le concept en lui-même ainsi que les divers +algorithmes) sont utilisés dans l’entraînement des réseaux neuronaux lors de la +rétropropagation ("Backpropagation"). En bref, la rétropropagation consiste à +"remonter" dans le réseau depuis la couche de sortie en direction de la couche +d’entrée afin d’ajuster les poids de chaque neurones qui ont contribué à un +résultat faussé de sorte à pouvoir corriger le réseau. Cette correction +s’effectue grâce à une descente de gradient sur une fonction, dite de "coût", +qui représente l’erreur commise lors d’une mauvaise classification. + +# Expérimentation + +## Résumé des points abordés + +À présent, nous allons présenter les diverses expériences effectuées, notamment +en ce qui concerne l'ajustement du **_learning rate_** (taux d'apprentissage) +$\lambda$ qui correspond donc à la taille du pas effectué à chaque itération des +des diverses méthodes de descente. Ceci sera illustré principalement à travers +la descente **simple**. + +Dans un second temps, nous présenterons l'impact du paramètre **_momentum_** +(inertie) $\gamma$ dans le cadre de la descente **Momentum**. À la suite de ceci, +nous tenterons de faciliter la visualisation de la méthode **Nesterov** en la +comparant immédiatement à la **Momentum**. + +Par la suite, nous introduirons la méthode la plus élaborée de quatres +présentées dans ce travail pratique, celle d'**Adam**. Initialement, nous allons +tenter d'étudier l'effet du _learning rate_ $\lambda$ sur cet algorithme et les +raisons pour lesquelles sa valeur devra diverger par rapport aux trois autres +méthodes. + +En suite, nous tenterons de jouer avec les deux paramètres specifiques à +**Adam**, $\beta_{1}$ et $\beta_{2}$, afin d'essayer de visualiser la manière +dont ces deux paramètres permettent de rendre le _learning rate_ dynamique +(c'est-à-dire l'ajuster en fonction des asymétries possiblement introduites par +un gradient plus prononcé dans une des dimensions par rapport aux autres). Cette +notion de taux d'apprentissage dynamique provient de l'algorithme **RMSProp** +(_Root Mean Square Propagation_) qui en calculant la moyenne des carrés des +composantes du gradient permet d'établir un taux d'apprentissage variable par +composante. + +Les paramètres d'**Adam** permettent aussi d'émuler un comportement d'inertie +présent dans les méthodes **Momentum** et **Nesterov** à l'aide d'un calcul +des moyennes mobiles. + +En somme, **Adam** est censé représente le meilleur des deux mondes (taux +d'apprentissage variable par composante et l'inertie qui permet de pouvoir passer +au-delà de certains minimums locaux dans le but d'en trouver un global). + +## Effet du taux d'apprentissage $\lambda$ -- descente simple + +Pour pouvoir illustrer l'effet du taux d'apprentissage sur le comportement de +la descente, nous avons pris trois valeurs de $\lambda$ séparée à chaque fois +d'un ordre de grandeur pour rendre la visualisation plus claire. Les exemples +ci-dessous ont été effectués sur la fonction $f$ : + +$$ +f(x, y) = x^2 + ky^2 \quad \forall k \in \mathbb{N} +$$ + +$\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 +pour la visualisation de la méthode d'**Adam**. + +::: {#fig-basegd-lr layout="[[1], [1, 1]]"} + +{width=80%} + +{width=80%} + +{width=80%} + +Variation de $\lambda$ sur la descente simple +::: + + +<!-- {width=70%} {width=70%} -->