diff --git a/report/report.qmd b/report/report.qmd
index c151c2b8962b9326a77804f24edad0371156bb1a..3847259831202725fd3f87593abb995b8033180d 100644
--- a/report/report.qmd
+++ b/report/report.qmd
@@ -88,7 +88,8 @@ $$ {#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
-pour la visualisation de la méthode d'**Adam**.
+pour lors de l'explication de la problématique des ravines ainsi que de la
+visualisation de la méthode d'**Adam**.
 
 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
@@ -97,16 +98,16 @@ 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%}
+![$\lambda = 1 \cdot 10^{-1}$, $\text{iter} = 73$](./figs/f/lr_1e-1.svg){#fig-base-high-lr width="80%"}
 
-![$\lambda = 1 \cdot 10^{-2}$, $\text{iter} = 798$](./figs/f/lr_1e-2.svg){width=80%}
+![$\lambda = 1 \cdot 10^{-2}$, $\text{iter} = 798$](./figs/f/lr_1e-2.svg){#fig-base-mid-lr width="100%"}
 
-![$\lambda = 1 \cdot 10^{-3}$, $\text{iter} = 8051$](./figs/f/lr_1e-3.svg){width=80%}
+![$\lambda = 1 \cdot 10^{-3}$, $\text{iter} = 8051$](./figs/f/lr_1e-3.svg){#fig-base-low-lr width="100%"}
 
 Variation de $\lambda$ lors de la descente simple
 ::::
 
-Dans le cas de la première figure, nous pouvons voir que suite aux grands pas
+Dans le cas de la @fig-base-high-lr, 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
@@ -142,7 +143,7 @@ pas précédents. En effet si $\gamma = 0$, alors on aboutit à une descente de
 gradient simple.
 :::
 
-:::: {#fig-momentum-gamma layout="[1,1]"}
+:::: {#fig-momentum-gamma layout="[1, 1]"}
 
 ![$\gamma = 0.1$](./figs/f/momentum_gamma_1e-1.svg){#fig-gamma-01}
 
@@ -189,5 +190,217 @@ prochaine itération), **Nesterov** pré-calcule $\nabla{f}(\vec{x}_{k + 1})$ po
 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
+l'orange (Nesterov) se "redresse" plus tôt et atteint le minimum plus rapidement
 que Momentum (205 contre 317 itérations).
+
+## Méthode d'Adam
+
+Finalement, nous pouvons introduire la dernière des quatres méthodes nommée
+**Adam** (_Adapative Momentum_). Les avantages principaux de cette méthode sont
+bien résumés dans son nom. Essayons donc de le décortiquer :
+
+- **_Adaptive_** $\rightarrow$ le principe "adaptatif" (ou dynamique) consiste à
+tenter d'adapter le taux d'apprentissage par rapport aux spécificités de chaque
+composantes / dimensions. En d'autres termes, le but est de diminuer le taux
+d'apprentissage pour les dimensions ayant un fort gradient et inversément,
+accentuer ce taux pour les dimensions ayant une faible variation. Ceci permet
+notamment de palier à certaines problématiques qui peuvent survenir lors d'une
+descente de gradient sur une fonction _non-isotropique_ (possédant des
+asymétries au niveau des taux de variation de chaque dimension).
+
+- **_Momentum_** $\rightarrow$ cet aspect, contrairement à celui énoncé
+précédemment, nous est à présent familier. En bref, il permet d'introduire un
+phénomène d'_inertie_ en réduisant la fréquences des _pas_ (en faisant des plus
+grands) lorsque le gradient présente une forte variation de sorte à accélerer
+la convergence vers un minimum.
+
+### Variation du taux d'apprentissage $\lambda$ -- Adam
+
+:::: {#fig-adam-lr layout="[[1, 1], [1]]" width=80}
+
+![$\lambda = 0.01$, $\text{iter} = 2440$](./figs/f/adam_lr_1e-2.svg){#fig-adam-lr-low}
+
+![$\lambda = 0.1$, $\text{iter} = 321$](./figs/f/adam_lr_1e-1.svg){#fig-adam-lr-mid}
+
+![$\lambda = 0.7$, $\text{iter} = 307$](./figs/f/adamLR_7e-1.svg){#fig-adam-lr-high width="50%"}
+
+Variation du taux d'apprentissage -- Adam
+::::
+
+Grâce à la @fig-adam-lr, nous pouvons observer l'effet du _learning rate_
+$\lambda$ sur la vitesse de convergence de cette méthode. Ce à quoi il est
+nécéssaire de prêter attention est le fait que la valeur de $0.01$ utilisée
+pour ce paramètre par les méthodes précédentes s'avère être beaucoup trop
+faible dans le cas d'Adam. Le minimum n'est atteint qu'au bout de $2440$
+itérations ce qui est approximativement trois fois plus que pour la méthode
+simple.
+
+Ceci nous a donc pousser à augmenter cette valeur jusqu'à $\lambda = 0.7$. Cette
+valeur pour le taux d'apprentissage s'est avéré être assez haute pour éviter
+des itérations inutiles mais en même temps pas trop grande non plus afin de ne
+pas rendre l'algorithme instable.
+
+### Comparaisons des descentes entre les quatres méthodes
+
+Les deux graphiques ci-dessous permettent à présent de servir de résumé sur
+les diverses méthodes abordés à travers la visualisation des trajectoires
+différentes qu'elles tracent.
+
+La méthode qui se distingue le plus reste quand même celle d'**Adam**, suite 
+au fait qu'elle prend en compte l'isotropie présente dans la fonction. En
+l'occurrence, le gradient dans la direction de l'axe $y$ est beaucoup plus
+prononcé que celui de l'axe $x$, or la trajectoire tracée par **Adam** ne
+priorise pas forcément la dimension ayant la plus grande variation du gradient.
+Cela lui permet donc de ne pas être "influencer" par une dimension en
+particulier. Ceci est important car dans le cas d'une vraie fonction de coût,
+il est possible que la dimension ayant en général une faible variation du
+gradient possède à un moment un minimum plus important que les autres directions.
+
+:::: {#fig-all-methods layout="[1, 1]"}
+
+![Graphes des descentes](./figs/f/graph.svg){#fig-graph-all-methods}
+
+![Chemins empruntés par les diverses méthodes](./figs/f/topology.svg){#fig-topology-all-methods}
+
+Comparaisons des méthodes de descente de gradient
+::::
+
+### Paramètres spécifiques
+
+**Adam** introduit deux nouveaux paramètres, $\beta_{1}$ et $\beta_{2}$, qui 
+permettent de modéliser ces notions de taux d'apprentissage adaptatif et
+d'inertie. Nous allons à présent tenter de les faire varier même si les valeurs
+conseillées dans le papier scientifique ["_Adam: A Method for Stochastic Optimization_"](https://arxiv.org/pdf/1412.6980)
+sont respectivement $0.9$ et $0.999$.
+
+:::: {#fig-adam-betas layout="[[1, 1], [1, 1]]"}
+
+![Faible $\beta_{1}$ et $\beta_{2}$, $\text{iter} = 99'999$](./figs/f/adam_low_beta1_low_beta2.svg){#fig-adam-low-b1-low-b2}
+
+![Faible $\beta_{1}$, $\beta_{2}$ normal, $\text{iter} = 46$](./figs/f/adam_low_beta1_standard_beta2.svg){#fig-adam-low-b1-standard-b2}
+
+![$\beta_{1}$ normal, faible $\beta_{2}$, $\text{iter} = 99'999$](./figs/f/adam_standard_beta1_low_beta2.svg){#fig-standard-b1-low-b2}
+
+![$\beta_{1}$ et $\beta_{2}$ conseillé](./figs/f/adam_standard_betas.svg){#fig-standard-b1-standard-b2}
+
+Influence des paramètres $\beta_{1}$ et $\beta_{2}$ sur la méthode d'Adam
+::::
+
+# Pièges
+
+Après avoir passer en revue les particularités de chaque algorithme de descente,
+nous allons à présent parler de certains pièges auxquelles ces méthodes peuvent
+faire face. Nous présenterons les problématiques des ravines, des plateaux ainsi
+que des minimaux locaux.
+
+## Ravines
+
+Le problèmes des ravines auxquelles nous avons fait référence précédemment est
+illustré à l'aide la @fig-base-high-lr. Suite au fait que la fonction 
+$f(x, y) = x^2 + 5y^2$ présente une non-isotropie (en d'autres termes le 
+gradient n'est pas uniforme dans toutes les dimensions), nous pouvons voir que
+l'algorithme de descente simple avec un taux d'apprentissage de $\lambda = 0.1$
+arrive très rapidement à descendre dans la "vallée", au bout d'une **seule
+itération** suite au fait que le gradient est très prononcé dans la direction
+de l'axe $y$. Cependant pour pouvoir par la suite converger vers le minimum,
+72 itérations supplémentaires sont nécessaires car le gradient dans la direction
+de l'axe $x$ est comparativement très faible.
+
+## Plateaux
+
+## Minimums locaux
+
+# Descentes sur diverses fonctions
+
+Après avoir pu discuter de manière détaillée des diverses méthodes de descente
+ainsi que de leurs implications sur la vitesse de convergence et les
+trajectoires tracées, nous pouvons à présent un peu nous amuser en essayant de
+trouver les minimums de fonctions non-triviales à l'aide des méthodes de
+descente étudiées.
+
+## Le "puit"
+
+Ou plus communément connu sous le nom de :
+
+$$
+f(x, y) = 1 - \exp(-10x^2 - y^2)
+$$ {#eq-func-well}
+
+:::: {#fig-well layout="[1,1]"}
+
+![Graphique de la fonction "puit"](./figs/puit/graph.svg){#fig-well-graph}
+
+![Méthodes de descentes](./figs/puit/topology.svg){#fig-well-topology}
+
+Descentes sur la fonction "puit" -- $f(x, y) = 1 - \exp(-10x^2 - y^2)$
+::::
+
+### Valeur de la fonction de coût
+
+Le graphique ci-dessous permet d'illustrer clairement l'évolution de la valeur
+de la fonction de coût $f$ par rapport au nombre d'itérations effectuées par
+chaque méthode. Nous pouvons voir qu'**Adam** ait atteint le minimum en premier,
+au bout de seulement $275$ itérations. **Momentum** et **Nesterov** sont tous deux
+très similaires, $\sim 2'000$ itérations. Puis finalement la méthode de base qui
+nécessité $17'452$ itérations pour y parvenir.
+
+![Évolution de la valeur de la fonciton de coût](./figs/puit/cost_function.svg){#fig-well-cost-function width="80%"}
+
+## Rosenbrock
+
+$$
+\text{Rosenbrock}(x, y) = (1 - x)^2 + (y - x^2)^2
+$$ {#eq-func-rosenbrock}
+
+:::: {#fig-rosenbrock layout="[1,1]"}
+
+![Graphique de la fonction Rosenbrock](./figs/rosenbrock/graph.svg){#fig-rosenbrock-graph width="80%"}
+
+![Méthodes de descentes](./figs/rosenbrock/topology.svg){#fig-rosenbrock-topology width="80%"}
+
+Descentes sur la fonction Rosenbrock
+::::
+
+## Ackley
+
+Pour terminer en beauté, nous allons effectuer notre dernière descente sur une
+fonction complexe, celle d'[Ackley](https://en.wikipedia.org/wiki/Ackley_function). 
+Cette fonction fut nommée après David Ackley, la personne l'ayant proposée dans
+thèse de doctorat.
+
+$$
+\text{Ackley}(x, y) = -20\exp\left[-0.2\sqrt{0.5(x^2 + y^2)}\right] - \exp\left[0.5(\cos 2\pi x + \cos 2\pi y)\right] + e + 20
+$$ {#eq-func-ackley}
+
+::: {.callout-note}
+La fonction d'Ackley est souvent utilisé comme outil de test pour les
+algorithmes d'optimisation car elle permet d'illustrer le piège créé par la
+présence d'une grande quantité de minimums locaux. Le but à atteindre est son
+minimum global en $(0, 0)$.
+:::
+
+### Graphique de la fonction
+
+![Graphique de la fonction Ackley](./figs/ackley/titlepage.svg){#fig-ackley-graph}
+
+### Descente sur la fonction d'Ackley
+
+Les graphiques ci-dessous permettent d'illustrer le comportement des divers
+algorithmes lors de la descente sur la fonction d'Ackley. Sur la @fig-ackley-topology-micro
+nous pouvons très clairement voir que les descentes simple, Momentum et Nesterov
+sont toutes restées coincées dans un minimum local. La seule méthode qui a su
+passer au-delà de ce minimum est **Adam**. Après $1 \cdot 10^{5}$ itérations,
+le minimum global n'a tout de même pas pu être atteint cependant, Adam s'est
+retrouvé dans le fossé global. Avec plus d'itérations, il est très probable
+qu'Adam aurait convergé sur le minimum en $(0, 0)$.
+
+:::: {#fig-ackley layout="[[1, 1], [1]]"}
+
+![Descentes sur la fonction d'Ackley](./figs/ackley/graph.svg){#fig-ackley-graph-descent}
+
+![Vue macroscopique des trajectoires](./figs/ackley/topology_macro.svg){#fig-ackley-topology-macro}
+
+![Vue microscopique des trajectoires](./figs/ackley/topology_micro.svg){#fig-ackley-topology-micro width="80%"}
+
+Descentes sur la fonction Ackley
+::::