Descente de gradient projeté
\DeclareMathOperator*{\argmin}{argmin} \DeclareMathOperator*{\argmax}{argmax}
- Comment optimiser une fonction sous contraintes? Application au problème des moindres carrés linéaires avec données réelles. Application du théorème de projection sur un ensemble convexe fermé.
Dans ce TP, nous allons utiliser la méthode de descente de gradient pour trouver un minimiseur d’une fonction f:\mathbb{R}^d\rightarrow\mathbb{R} pour d\geq 2 en posant des contraintes sur f ou sur l’ensemble \mathcal{C} des solutions du problème.
Algorithme de la descente de gradient projeté
Dans cette partie, on suppose que l’on a une fonction f, et on va introduire la descente de gradient projeté (🇬🇧 projected gradient descent) avec l’ensemble de contraintes convexe fermé \mathcal{C}. On note \Pi_{\mathcal{C}} la projection convexe, i.e. LA1 fonction convexe qui envoie un élément dans l’ensemble convexe fermé \mathcal{C}.
\begin{algorithm} \caption{Descente de gradient projeté (à pas fixe)} \begin{algorithmic} \INPUT $\nabla f, \Pi_{\mathcal{C}}, x_{init}, \gamma,$ maxiter, $\epsilon$ \STATE $x = x_{init}$ \COMMENT{Initialization} \FOR{$i=1,\dots,$maxiter} \STATE $g\leftarrow \nabla f(x)$ \COMMENT{Evaluation du gradient en l'itéré courant} \IF{$\|g\|^2 \leq \epsilon^2$ } \COMMENT{Caractérisation d'un extremum} \STATE Break \ELSE \STATE $x \leftarrow \Pi_{\mathcal{C}}\big(x - \gamma g\big)$ \COMMENT{Pas dans la direction opposée au gradient} \ENDIF \ENDFOR \OUTPUT $x$ \end{algorithmic} \end{algorithm}
Dans la suite de cette partie, on travaillera avec la fonction f_{test} définie ainsi:
\begin{align*} f_{test}:\quad \mathbb{R}^2 &\to \mathbb{R}^2\\ \begin{pmatrix} x_1 \\ x_2 \\\end{pmatrix} & \mapsto (x_1 - 1)^2 + 3(x_2 + 1)^2 \end{align*}
Question 1: Minimiser avec ou sans contraintes
Quel est le minimum global de f_{test} ? (on pourra utiliser la descente de gradient du TP précédent). Utiliser la méthode minimize
de la librairie scipy
pour trouver le minimum de f_{test} sur \mathbb{R}^2_+. Pour cela, utiliser l’argument bounds
et une méthode d’optimisation qui supporte cette contrainte, par exemple method="TNC"
. Voir la documentation si besoin.
Question 2: Descente de gradient projeté
Implémenter la méthode de descente du gradient projeté à pas fixe en prenant comme argument une fonction de projection \Pi_{\mathcal{C}}:\mathbb{R}^d\to \mathbb{R}^d quelconque.
Question 3: Application à la contrainte de positivité
Avec l’algorithme précédent, résoudre numériquement : \begin{aligned} \min_{x\in\mathbb{R}^2}\ & f_{\text{test}}(x) \\ & \text{ s.c. } \begin{cases} x_1 \geq 0 \\ x_2 \geq 0 \end{cases} \end{aligned}
Cette formulation induit la positivité des paramètres. Elle est notamment utilisée en physique quand il y a une interprétation directe comme la vitesse ou la masse d’un objet.
Question 4: Application aux projections sur les boules
Avec l’algorithme précédent, résoudre numériquement : \begin{aligned} \min_{x\in\mathbb{R}^2}\ & f_{\text{test}}(x) \\ & \text{ s.c. } \|x\|_2^2\leq 1 \end{aligned} Adapter l’exemple ci-dessus pour résoudre avec la contrainte \|x\|^2\leq 1/2. Vous pouvez dans un premier temps tester votre fonction de projection sur quelques points dont les projetés sont faciles à calculer à la main.
En s’aidant de l’exemple dans la documentation de la fonction minimize
de scipy
, résoudre le problème suivant :
\begin{aligned}
\min_{x\in\mathbb{R}^2}\ f_{\text{test}}(x)
\text{ s.c. }
\begin{cases}
x_1 - 3 x_2 \geq -2 \\
x_1 + x_2 \geq 0
\end{cases} \enspace.
\end{aligned}
Ce problème est avec des contraintes d’inégalités linéaires. Pour le résoudre à la main, il serait possible d’utiliser la méthode des multiplicateurs de Lagrange.