Skip to content

[Search/Optim] Optimisation convexe avancée from scratch : SMO, ADMM, opérateurs proximaux #16061

Description

@jsboige

Contexte pédagogique

Notre série ML ML/DataScienceWithAgents/01-Fondations/ et 02-Preprocessing/ couvre le gradient descent, SGD, Adam, RMSProp — mais reste sur l'optimisation différentiable continue. Les optimiseurs pour problèmes convexes structurés sont absents :

  1. SMO (Sequential Minimal Optimization) pour SVM : décomposition du QP dual en sous-problèmes 2-variables, KKT complementarity, working set selection.
  2. ADMM (Alternating Direction Method of Multipliers) : décomposition de problèmes contraints (Lasso, group Lasso, sparse logistic regression), update primal/dual alternés, pénalité augmentée.
  3. Proximal methods : ISTA/FISTA pour Lasso (prox_{λ||·||₁}), forward-backward splitting, algorithmes du premier ordre pour la parcimonie.

Ces méthodes sont des piliers de la ML classique (avant le deep learning), encore utilisées pour les modèles linéaires sparse, SVM, et le compressed sensing. Elles sont absentes du dépôt.

Acceptance

Bloc A — from scratch (le geste fondateur)

  1. Notebook SMO-from-scratch : implémenter SMO pour SVM binaire (soft-margin, kernel RBF), décomposition 2-variables, working set selection (heuristic de Platt), critère d'arrêt (KKT + gap duality), comparaison accuracy/temps avec scikit-learn (validation référence). Sans sklearn.svm.SVC.fit interne, on réimplémente la boucle SMO.
  2. Notebook ADMM-from-scratch : implémenter ADMM pour min ½||Ax - b||² + λ||x||₁ (Lasso), update steps x^{k+1} = (AᵀA + ρI)⁻¹(Aᵀb + ρ(z^k - u^k)), z^{k+1} = soft_threshold(x^{k+1} + u^k, λ/ρ), u^{k+1} = u^k + x^{k+1} - z^{k+1}, mesure convergence objective + dual residual.
  3. Notebook Proximal-from-scratch : implémenter ISTA (forward-backward splitting, gradient step + soft-thresholding), FISTA (acceleration par momentum inertiel, taux de convergence O(1/k²)), comparaison ISTA vs FISTA sur Lasso sparse recovery (signal recovery from compressed measurements).
  4. Stack cohérente : PyTorch + numpy + scipy (pour solveurs linéaires). Pas de cvxpy, pas de sklearn.svm pour l'optimisation interne, pas de sklearn.linear_model. On réimplémente.

Bloc B — geste SOTA / lib complémentaire (le pendant industriel)

  1. Notebook SVM-SOTA-comparison : sklearn.svm.SVC (avec kernel RBF, soft-margin) sur le même dataset binaire que Bloc A.1. Comparaison accuracy / temps d'entraînement / nombre de support vectors trouvés. Justification : scikit-learn est l'implémentation SOTA standard, inclut SMO optimisé (LIBSVM backend).
  2. Notebook Lasso-SOTA-comparison : sklearn.linear_model.Lasso (coordinate descent) + sklearn.linear_model.LassoCV (cross-validation du λ) sur le même problème que Bloc A.2 et A.3. Comparaison objective value / sparsité de la solution / temps. Justification : scikit-learn inclut les implémentations optimisées (coordinate descent pour Lasso, LARS, LASSO-LARS).
  3. Notebook CVXPY-OPT : cvxpy formulation déclarative d'un problème Lasso et résolution via ECOS/SCS, comparaison avec les solutions ADMM/Proximal sur le même problème. Justification : cvxpy est l'API de modeling standard pour la convex optimization, sépare modeling de solving. Permet de valider que les solvers from scratch convergent vers le même optimum global.
  4. Comparaison explicite Bloc A vs Bloc B : tableau récapitulatif — objective value final, temps d'entraînement, nombre d'itérations, lignes de code, capacité à scaler (n features). Justifie le pourquoi du from scratch (compréhension convergence, dualité, parcimonie) et le quand du SOTA (production, gros problèmes).

Branchement pédagogique

À rattacher à ML/DataScienceWithAgents/01-Fondations/ : créer 1.5-Convex-Optimization-from-scratch/ (3 notebooks A) + 1.6-Convex-Optimization-SOTA/ (3 notebooks B). Les notebooks 1.1-1.4 couvrent gradient descent différentiable, ceux-ci étendent au non-différentiable.

Cohérence maison

  • Notebooks en français, exécutables de bout en bout avec outputs, ≥3 exercices par notebook
  • Dataset réduit : classification binaire synthétique (2D, 200 points), régression sparse synthétique (n=100, p=500)
  • C.1 strict : pas d'erreur volontaire
  • C.2 strict : outputs commités

Scope disjoint

  • Pas de deep learning optimization (SGD/Adam déjà couverts en 1.3)
  • Pas de second-order methods (Newton, quasi-Newton BFGS — autre sujet, non couvert)
  • Pas de convex optimization sur GPU
  • Pas d'élargissement silencieux de 1.1-1.4

Notes

  • Le notebook SMO est l'opportunité de formaliser la dualité KKT et la complementarity condition — pont avec d'autres notebooks théoriques.
  • Si une ramification .NET s'avère pertinente (Accord.NET a SequentialMinimalOptimization), créer un jumeau C# ; sinon Python seul avec justification.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:mlcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions