From 6fb6dc5ccbec1fa5205fc2d93d0518fdec9a02cc Mon Sep 17 00:00:00 2001 From: Orestis Malaspinas <orestis.malaspinas@hesge.ch> Date: Thu, 10 Sep 2020 14:46:35 +0200 Subject: [PATCH] updated optim chapter --- 03_optimisation.md | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/03_optimisation.md b/03_optimisation.md index 9fce76f..f19a34c 100644 --- a/03_optimisation.md +++ b/03_optimisation.md @@ -717,7 +717,7 @@ Avec ce qui précède, voyez-vous une façon de trouver le minimum de la fonctio --- -<!-- Une méthode pour trouver le minimum de $f(x,y)$ est la méthode de la *descente de gradient*. Cette méthode +Une méthode pour trouver le minimum de $f(x,y)$ est la méthode de la *descente de gradient*. Cette méthode correspond intuitivement à la méthode que suivrait un skieur pour arriver le plus vite possible en bas d'une montagne. Pour ce faire, il suivrait toujours la pente la plus raide possible. @@ -726,8 +726,8 @@ itérative. Soient donnés un point de départ $\vec x_0$, et une fonction objectif $f(\vec x)$, on va approximer le zéro itérativement avec une suite $\vec x_1$, $\vec x_2$, ... telle que \begin{align} -\vec x_1&=x_0-\lambda\cdot f(\vec x_0),\\ -\vec x_2&=x_1-\lambda\cdot f(\vec x_1),\\ +\vec x_1&=x_0-\lambda\cdot \nabla f(\vec x_0),\\ +\vec x_2&=x_1-\lambda\cdot \nabla f(\vec x_1),\\ \cdots \vec x_{n+1}&=x_n-\lambda\cdot f(\vec x_n), \end{align} @@ -738,6 +738,31 @@ peut se voir dans la @fig:gradient. {#fig:gradient width=70%} +--- + +#### Exemple (quelques itérations) {-} + +Prenons la fonction objectif $f(x,y)$ suivante +$$ +f(x,y)=x^2+y^2, +$$ +et son gradient +$$ +\nabla f(x,y)=2x+2y. +$$ +Si on prend comme point de départ $\vec x_0=(1,0.5)$ et $\lambda=0.25$, on a +\begin{align} +\vec x_1=\vec x_0-\lambda\cdot \nabla f(\vec x_0)=(1,0.5)-0.25\cdot (2\cdot 1, 2\cdot 0.5)=(0.5, 0.25),\\ +\vec x_2=\vec x_1-\lambda\cdot \nabla f(\vec x_1)=(0.5,0.25)-0.25\cdot (2\cdot 0.5, 2\cdot 0.25)=(0.25, 0.125),\\ +\cdots +\end{align} +En changeant $\lambda=0.5$, on voit qu'on arrive sur le zéro de la fonction en une itération +\begin{align} +\vec x_1=\vec x_0-\lambda\cdot \nabla f(\vec x_0)=(1,0.5)-0.5\cdot (2\cdot 1, 2\cdot 0.5)=(0, 0). +\end{align} + +--- + Comme pour les fonction à une seule variable, il est nécessaire de spécifier une condition d'arrêt pour la descente de gradient. En général, on choisit une tolérance, $\varepsilon>0$, et la condition d'arrêt s'écrit $$ @@ -749,5 +774,6 @@ Dépendant de la valeur de $\lambda$ la *convergence* de la méthode peut varier il faut une énorme quantité d'itérations pour atteindre le minimum. A l'inverse, en choisissant un $\lambda$ trop grand, nous ne somme pas sûrs que nous convergerons un jour. En effet, on pourrait s'éloigner de plus en plus du minimum plutôt que de sen approcher. En général, on choisit $\lambda\in[0,1)$ mais il n'y a pas de méthode générale pour en choisir une valeur "optimale". -Cela signifie que pour une fonction quelconque, $\lambda$ est choisi de façon empirique. --> +Cela signifie que pour une fonction quelconque, $\lambda$ est choisi de façon empirique. + -- GitLab