Optimisation Mathématique · Algorithmique · R
Intuition géométrique, stratégies de recherche de pas (Armijo, Wolfe, dichotomie) et implémentations pratiques en langage R.
Imaginez que vous êtes perdu au milieu d'une chaîne de montagnes, les yeux bandés, et que votre seul objectif est d'atteindre la vallée la plus basse. Votre instinct vous dirait de tâtonner, de sentir la pente, et de faire un pas dans la direction où la descente est la plus raide.
C'est exactement le principe fondamental de la Descente de Gradient, l'algorithme moteur de l'optimisation en apprentissage automatique.

Le défi majeur est de choisir combien avancer à chaque pas. Un pas trop petit ralentit la convergence, tandis qu'un pas trop grand risque de survoler le minimum ou de faire diverger l'algorithme.
1. Trois Stratégies de Pas
Le choix de conditionne la rapidité et la stabilité de la convergence.
01 / Pas Exact
Calcul analytique direct du pas optimal pour les fonctions quadratiques à surface parabolique.
02 / Armijo & Wolfe
Recherche de pas (line search) adaptative garantissant une décroissance suffisante et une courbure adéquate.
03 / Dichotomie
Bisection séquentielle de l'intervalle du pas jusqu'à satisfaction des critères d'arrêt.
1.1 Pas Exact pour Fonctions Quadratiques
Pour des fonctions quadratiques de la forme , le pas optimal s'exprime analytiquement :
f <- function(x, y) x^2/2 + 7*y^2/2grad_f <- function(x, y) c(x, 7*y)step_exact <- function(x, y) {(x^2 + 49*y^2) / (x^2 + 343*y^2)}

1.2 Recherche de Pas Armijo & Wolfe (Line Search Adaptative)
Dans le cas général non quadratique, nous appliquons une recherche adaptative basée sur deux règles formelles :
Condition d'Armijo (Décroissance Suffisante)
Garantit que la fonction diminue d'une quantité proportionnelle à la pente initiale :
Condition de Wolfe (Contrôle de Courbure)
Évite les pas trop petits en vérifiant que le gradient résiduel est plus plat :

2. Exemple Interactif & Surfaces Complexes


Optimisation du Code : De Pas Fixe à Line Search Adaptative
−x <- x - 0.01 * g[1]; y <- y - 0.01 * g[2] # Pas fixe risqué+alpha <- line_search_armijo(x, y, g, c1=1e-4)+x <- x - alpha * g[1]; y <- y - alpha * g[2]