Lors de la modélisation mathématique, pas nécessairement stochastique d’ailleurs, il n’est pas rare d’être confronté à un problème d’optimisation. On peut par exemple citer la minimisation des moindres carrés, la minimisation d’une forme quadratique sous contraintes linéaires comme pour l’allocation optimale d’actifs financier dans l’approche de Markowitz. Bref savoir minimiser, ou maximiser c’est égal, est très important.
Pour aurant, il n’est pas rare de rencontrer un problème d’optimisation qui n’admet pas de solution explicite. On aura alors recours à des techniques d’optimisation numérique dont la descente du gradient fait partie. Il y en a d’autre bien sûr mais nous nous restreindrons à cette dernière. Posons donc le cadre général de travail.
On considère le problème d’optimisation suivant
\[\begin{equation} \underset{\theta \in \Theta}{\arg \min\ } f(\theta; \mathbf{x}), \qquad \Theta \subset \mathbb{R}^p, \end{equation}\]où ici \(\mathbf{x}\) est fixé et jouera bien souvent le rôle en statistique des données. Je vous laisse remarquer que l’estimateur du maximum de vraisemblance peut s’écrire sous cette forme. Notons également que puisque nous parlons de gradient cela suppose bien évidemment que \(f\) est différentiable. Pour simplifier les notations on utilisera le (léger) abus de notations
\[\begin{equation*} \nabla f(\theta; \mathbf{x}) = \nabla_\theta f(\theta; \mathbf{x}) = \left( \frac{\partial f(\theta; \mathbf{x})}{\partial \theta_1}, \ldots, \frac{\partial f(\theta; \mathbf{x})}{\partial \theta_p}\right)^\top. \end{equation*}\]Sans plus attendre voici l’algorithme (itératif)
Tant que \(\|\nabla f(\theta_t; x)\| > \epsilon\) faire
Renvoyer \(\theta_{t+1}\).
Vous aurez remarqué que l’algorithme de descente du gradient est conditionné à trois “choix” de l’utilisateur :
La version stochastique de l’algorithme précédent est utilisé lorsque le calcul du gradient \(\nabla f(\theta ; x)\) est très couteux comme cela peut être le cas lorsque les observations \(\mathbf{x} = (x_1, \ldots, x_n)^\top\) sont très nombreuses (le big data quoi !).
On supposera ici que l’on peut réécrire notre problème d’optimisation sous la forme \[\begin{equation} \underset{\theta \in \Theta}{\arg \min\ } \sum_{i=1}^n f(\theta; x_i), \qquad \Theta \subset \mathbb{R}^p. \end{equation}\]L’algorithme du gradient stochastique s’écrit alors
Tant qu’un minimum (approché) n’est pas atteint faire
Pour \(b = 1, \ldots, B\) faire
Renvoyer \(\theta_{t+1}\).
Dans l’algorithme précédent, les ensembles \(I_1, \ldots, I_B\) forment une partition de \(\{1, \ldots, n\}\), et en plus des “choix utilisateur” liés à l’algorihtme du gradient on devra en plus choisir la taille \(B\) de la partition. En machine learning, lorsque l’algorithme a fait une itération de la boucle for on parle alors d’epoch (désolé pour le franglais mais visiblement en Machine Learning on aime bien !)
où typiquement l’on choisit \(\gamma = 0.9\) et \(v_0 = 0\).
où on a utilisé l’abus de notation \(\mathbf{x} = ((\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n))^\top\), \(\mathbf{x}_i \in \mathbb{R}^p\) et \(y_i \in \{0, 1\}\) et
Nous allons donc utiliser la régression logistique sur deux applications :
Pour chaque jeu de données, vous utiliserez une descente du gradient classique, celle de Nesterov et la version stochastique.