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

feat: quatro is maaaad

parent d1924da9
No related branches found
No related tags found
No related merge requests found
---
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]]"}
![$\lambda = 1 \cdot 10^{-1}$, $\text{iter} = 73$](./figs/f/lr_1e-1.svg){width=80%}
![$\lambda = 1 \cdot 10^{-2}$, $\text{iter} = 798$](./figs/f/lr_1e-2.svg){width=80%}
![$\lambda = 1 \cdot 10^{-3}$, $\text{iter} = 8051$](./figs/f/lr_1e-3.svg){width=80%}
Variation de $\lambda$ sur la descente simple
:::
<!-- ![](./figs/f/lr_2e-2.svg){width=70%} ![](./figs/f/lr_1e-3.svg){width=70%} -->
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment