Caractérisez les minimums d'une fonction
Imaginez un randonneur perdu dans le brouillard, sur un plateau vallonné. Il ne voit rien au-delà de quelques mètres, mais il sent sous ses pieds dans quel sens le terrain descend, et si le sol est creusé en cuvette ou bombé. Comment saura-t-il qu’il est arrivé au fond d’une vallée ? Et comment être sûr que ce n’est pas simplement un replat, ou un col entre deux sommets ?
Ces deux sensations, la pente et la courbure, ont un nom mathématique : le gradient et la Hessienne. Dans ce chapitre, vous allez les utiliser pour reconnaître un minimum, avant d’apprendre à le calculer numériquement aux chapitres 6 et 7. Notre fil rouge sera l’altitude du plateau, décrite par la fonction .
La pente et la courbure : gradient et Hessienne
Section intitulée « La pente et la courbure : gradient et Hessienne »Pour une fonction de variables, le gradient en un point est le vecteur de ses dérivées partielles :
Il indique la direction de plus forte montée, et sa norme dit à quel point ça monte. Il est toujours perpendiculaire aux lignes de niveau (les courbes d’altitude constante d’une carte de randonnée). Son opposé, , est donc la direction de plus forte descente : retenez-la, c’est tout le chapitre suivant.
La Hessienne est la matrice des dérivées secondes :
Elle décrit la courbure. Quand est deux fois continûment dérivable (on dit de classe ), elle est symétrique, car l’ordre des dérivations n’importe pas (théorème de Schwarz).
Gradient et Hessienne se combinent dans le développement de Taylor à l’ordre 2, qui décrit près d’un point :
- est un petit déplacement ;
- est la variation due à la pente ;
- est la correction due à la courbure ;
- désigne un reste négligeable devant quand tend vers 0.
C’est ce développement qui justifie toutes les conditions de la section suivante, et c’est aussi lui que la méthode de Newton exploitera au chapitre 7.
Les conditions d’optimalité
Section intitulée « Les conditions d’optimalité »Condition du premier ordre : le gradient s’annule
Section intitulée « Condition du premier ordre : le gradient s’annule »Si est un minimum local d’une fonction dérivable (sur tout , sans contrainte), alors
L’argument est simple : si le gradient n’était pas nul, un petit pas dans la direction ferait baisser (d’après Taylor à l’ordre 1), et ne serait pas un minimum. Un point où le gradient s’annule s’appelle un point critique (ou stationnaire).
Mais attention, c’est une condition nécessaire, pas suffisante. Un sommet ou un col ont aussi une pente nulle. Il faut regarder la courbure pour trancher.
Condition du second ordre : la courbure
Section intitulée « Condition du second ordre : la courbure »Rappelons qu’une matrice symétrique est semi-définie positive si pour tout (toutes ses valeurs propres sont positives ou nulles), et définie positive si pour tout (toutes ses valeurs propres sont strictement positives).
- Condition nécessaire : si est un minimum local et est , alors est semi-définie positive.
- Condition suffisante : si et est définie positive, alors est un minimum local strict.
Au point critique, Taylor se réduit à : si ce terme est strictement positif dans toutes les directions, on remonte de tous les côtés, c’est une cuvette.
En dimension 2 : les notations de Monge
Section intitulée « En dimension 2 : les notations de Monge »En deux variables, on note traditionnellement , et . Le signe du déterminant de la Hessienne (produit des deux valeurs propres) et celui de suffisent :
| Nature du point critique | ||
|---|---|---|
| minimum local | ||
| maximum local | ||
| point selle (col) | ||
| on ne peut pas conclure |
Numériquement, on calcule directement les valeurs propres de la Hessienne :
import numpy as np
def hessienne_g(x, y): return np.array([[6.0 * x, 0.0], [0.0, 2.0]])
for point in [(1, 0), (-1, 0)]: vp = np.linalg.eigvalsh(hessienne_g(*point)) # valeurs propres d'une matrice symétrique print(point, vp) # (1, 0) : 2 et 6, toutes positives ; (-1, 0) : -6 et 2, signes opposésMinimum local ou global ? L’existence
Section intitulée « Minimum local ou global ? L’existence »Le randonneur a trouvé le fond de la vallée , à l’altitude . Est-ce le point le plus bas du plateau ? Non ! Allez vers l’ouest : . Et plus on s’éloigne, plus on descend, puisque tend vers . La fonction n’a aucun minimum global : son unique minimum local n’est qu’un creux sur une pente qui plonge.
Les conditions d’optimalité ne regardent que le voisinage du point. Pour garantir qu’un minimum global existe, on dispose de deux résultats classiques :
- Théorème de Weierstrass : une fonction continue sur un ensemble compact (fermé et borné) y atteint son minimum et son maximum.
- Coercivité : si est continue sur (ou sur un fermé) et coercive, c’est-à-dire quand , alors admet un minimum global. L’idée : loin de l’origine, est trop grande pour contenir le minimum, qui se trouve donc dans une boule, un compact.
La convexité, ou comment se simplifier la vie
Section intitulée « La convexité, ou comment se simplifier la vie »Une fonction est convexe si, pour tous points , et tout :
Géométriquement, la corde qui relie deux points du graphe reste au-dessus du graphe : la fonction est une cuvette sans bosse. Si l’inégalité est stricte pour et , est strictement convexe.
Pour une fonction , il existe un critère pratique : est convexe si et seulement si sa Hessienne est semi-définie positive en tout point. Si la Hessienne est définie positive partout, est strictement convexe. Pour , : elle est convexe. Pour , la Hessienne a une valeur propre , négative quand : elle ne l’est pas, ce qui explique tous ses ennuis.
La convexité change tout :
- tout minimum local est global ;
- tout point critique est un minimum global (plus besoin d’examiner la Hessienne en chaque point) ;
- si est strictement convexe, le minimum, s’il existe, est unique.
Le cas roi : les fonctions quadratiques
Section intitulée « Le cas roi : les fonctions quadratiques »Une fonction quadratique s’écrit
avec une matrice symétrique, un vecteur et une constante. Son gradient vaut et sa Hessienne vaut , constante. Si est symétrique définie positive, est strictement convexe et coercive, et son unique minimum est la solution du système linéaire
Minimiser une quadratique et résoudre un système linéaire, c’est donc le même problème. C’est pour cela que les méthodes de descente des chapitres suivants servent aussi à résoudre de grands systèmes linéaires.
En résumé
Section intitulée « En résumé »- Le gradient donne la direction de plus forte montée ; la Hessienne décrit la courbure. Taylor à l’ordre 2 les combine.
- Condition nécessaire : un minimum local annule le gradient (point critique) et a une Hessienne semi-définie positive.
- Condition suffisante : gradient nul et Hessienne définie positive donnent un minimum local strict ; en dimension 2, on regarde et .
- Un minimum global existe si est continue sur un compact (Weierstrass) ou continue et coercive.
- Une fonction convexe (Hessienne semi-définie positive partout) a tous ses minimums locaux globaux ; strictement convexe, elle a au plus un minimiseur.
- Une quadratique avec symétrique définie positive a un unique minimum, solution de .
Exercices
Section intitulée « Exercices »Exercice · Trouver et classer un point critique
facileSoit . Trouvez ses points critiques et leur nature. Le minimum est-il global ?
Voir la solution
Le gradient vaut . La seconde équation donne ; dans la première, , donc et . Le seul point critique est .
Hessienne : , , , constante. et : c’est un minimum local, où .
La Hessienne est définie positive partout (valeurs propres 1 et 3), donc est strictement convexe : ce minimum est global et unique.
En code
import numpy as np
# Gradient (2x + y - 3, x + 2y) = 0 : un système linéaireH = np.array([[2, 1], [1, 2]]) # Hessienne, constantepoint = np.linalg.solve(H, [3, 0])x, y = pointprint(point, x**2 + x*y + y**2 - 3*x) # [ 2. -1.] -3.0print(np.linalg.det(H), np.linalg.eigvalsh(H)) # 3.0 [1. 3.] : définie positive partout# Gradient (2x + y - 3, x + 2y) = 0 : un système linéaireH <- rbind(c(2, 1), c(1, 2)) # Hessienne, constantep <- solve(H, c(3, 0))p; p[1]^2 + p[1] * p[2] + p[2]^2 - 3 * p[1] # 2 -1 ; -3det(H); eigen(H)$values # 3 ; 3 1 : définie positive partoutExercice · Quand la Hessienne ne suffit pas
moyenMontrez que l’origine est un point critique de et de , que le critère de Monge ne permet pas de conclure, puis concluez autrement.
Voir la solution
Les gradients et s’annulent à l’origine. Les Hessiennes y sont nulles (, , ) : , on ne peut pas conclure.
On revient à la définition. pour tout point : l’origine est un minimum global (strict). Pour , sur l’axe des , , et sur l’axe des , : prend des valeurs plus grandes et plus petites que arbitrairement près de l’origine, qui est donc un point selle. Deux fonctions à Hessienne nulle, deux natures différentes : la Hessienne seule ne pouvait pas trancher.
En code
import numpy as np
f = lambda x, y: x**4 + y**4k = lambda x, y: x**4 - y**4# Hessiennes à l'origine : diag(12x², ±12y²) = matrice nulle, Monge ne conclut pas# On regarde les valeurs sur un petit cercle de rayon 0,01 autour de l'originet = np.linspace(0, 2 * np.pi, 361)x, y = 0.01 * np.cos(t), 0.01 * np.sin(t)print(f(x, y).min(), f(x, y).max()) # 5e-09 1e-08 : toujours > 0 = f(0, 0), minimumprint(k(x, y).min(), k(x, y).max()) # -1e-08 1e-08 : des deux signes, point sellef <- function(x, y) x^4 + y^4k <- function(x, y) x^4 - y^4# Hessiennes à l'origine : diag(12x², ±12y²) = matrice nulle, Monge ne conclut pas# On regarde les valeurs sur un petit cercle de rayon 0,01 autour de l'originet <- seq(0, 2 * pi, length.out = 361)x <- 0.01 * cos(t); y <- 0.01 * sin(t)range(f(x, y)) # 5e-09 1e-08 : toujours > 0 = f(0, 0), minimumrange(k(x, y)) # -1e-08 1e-08 : des deux signes, point selleExercice · Un minimum local trompeur
difficileSoit . Trouvez ses points critiques, déterminez leur nature, et dites si admet un minimum global.
Voir la solution
Le gradient vaut . Il s’annule si et , donc , soit ou . Les points critiques sont et .
La Hessienne vaut .
- En : , , donc : point selle.
- En : , , donc et : minimum local, de valeur .
Il n’y a pas de minimum global : sur l’axe des , tend vers quand . Par exemple, . Comme pour l’altitude du cours, un unique minimum local n’est pas une garantie.
En code
import numpy as np
f = lambda x, y: x**3 + y**3 - 3*x*yhess = lambda x, y: np.array([[6*x, -3], [-3, 6*y]])
for p in [(0, 0), (1, 1)]: # points critiques : y = x², x = y² H = hess(*p) print(p, np.linalg.det(H), np.linalg.eigvalsh(H), f(*p))# (0, 0) -9.0 [-3. 3.] 0 : valeurs propres de signes opposés, point selle# (1, 1) 27.0 [3. 9.] -1 : définie positive, minimum localprint(f(-2, 0), f(-10, 0)) # -8 -1000 : pas de minimum globalf <- function(x, y) x^3 + y^3 - 3 * x * yhess <- function(x, y) rbind(c(6 * x, -3), c(-3, 6 * y))
for (p in list(c(0, 0), c(1, 1))) { # points critiques : y = x², x = y² H <- hess(p[1], p[2]) cat(p, ": det", det(H), ", valeurs propres", eigen(H)$values, ", f =", f(p[1], p[2]), "\n")}# 0 0 : det -9 , valeurs propres 3 -3 , f = 0 : point selle# 1 1 : det 27 , valeurs propres 9 3 , f = -1 : minimum localf(-2, 0); f(-10, 0) # -8 et -1000 : pas de minimum global