Aller au contenu

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 g(x,y)=x3−3x+y2g(x, y) = x^3 - 3x + y^2.

Pour une fonction ff de nn variables, le gradient en un point xx est le vecteur de ses dérivées partielles :

∇f(x)=(∂f∂x1(x),…,∂f∂xn(x))\nabla f(x) = \left( \frac{\partial f}{\partial x_1}(x), \dots, \frac{\partial f}{\partial x_n}(x) \right)

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é, −∇f(x)-\nabla f(x), 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 :

∇2f(x)=(∂2f∂xi ∂xj(x))1≤i,j≤n\nabla^2 f(x) = \left( \frac{\partial^2 f}{\partial x_i \, \partial x_j}(x) \right)_{1 \leq i, j \leq n}

Elle décrit la courbure. Quand ff est deux fois continûment dérivable (on dit de classe C2C^2), elle est symétrique, car l’ordre des dérivations n’importe pas (théorème de Schwarz).

−2−1012x−2,0−1,5−1,0−0,50,00,51,01,52,0y∇g(2, 1) = (9, 2)−∇g : plus forte descenteminimum local(1, 0), g = −2col (−1, 0)g = 2
Le gradient est partout perpendiculaire aux lignes de niveau et pointe vers la montée. Autour de (1, 0), les courbes se referment en cuvette ; en (−1, 0), elles se croisent en X : c'est un col.

Gradient et Hessienne se combinent dans le développement de Taylor à l’ordre 2, qui décrit ff près d’un point xx :

f(x+h)=f(x)+∇f(x)Th+12 hT∇2f(x) h+o(∥h∥2)f(x + h) = f(x) + \nabla f(x)^T h + \tfrac12 \, h^T \nabla^2 f(x) \, h + o(\lVert h \rVert^2)
  • hh est un petit déplacement ;
  • ∇f(x)Th\nabla f(x)^T h est la variation due à la pente ;
  • 12hT∇2f(x)h\tfrac12 h^T \nabla^2 f(x) h est la correction due à la courbure ;
  • o(∥h∥2)o(\lVert h \rVert^2) désigne un reste négligeable devant ∥h∥2\lVert h \rVert^2 quand hh 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.

Condition du premier ordre : le gradient s’annule

Section intitulée « Condition du premier ordre : le gradient s’annule »

Si x∗x^* est un minimum local d’une fonction dérivable ff (sur tout Rn\mathbb{R}^n, sans contrainte), alors

∇f(x∗)=0\nabla f(x^*) = 0

L’argument est simple : si le gradient n’était pas nul, un petit pas dans la direction −∇f(x∗)-\nabla f(x^*) ferait baisser ff (d’après Taylor à l’ordre 1), et x∗x^* 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.

Rappelons qu’une matrice symétrique HH est semi-définie positive si hTHh≥0h^T H h \geq 0 pour tout hh (toutes ses valeurs propres sont positives ou nulles), et définie positive si hTHh>0h^T H h \gt 0 pour tout h≠0h \neq 0 (toutes ses valeurs propres sont strictement positives).

  • Condition nécessaire : si x∗x^* est un minimum local et ff est C2C^2, alors ∇2f(x∗)\nabla^2 f(x^*) est semi-définie positive.
  • Condition suffisante : si ∇f(x∗)=0\nabla f(x^*) = 0 et ∇2f(x∗)\nabla^2 f(x^*) est définie positive, alors x∗x^* est un minimum local strict.

Au point critique, Taylor se réduit à f(x∗+h)≈f(x∗)+12hT∇2f(x∗)hf(x^* + h) \approx f(x^*) + \tfrac12 h^T \nabla^2 f(x^*) h : si ce terme est strictement positif dans toutes les directions, on remonte de tous les côtés, c’est une cuvette.

montemontedéfinie positiveminimumdescenddescenddéfinie négativemaximummontedescendvaleurs propres de signesopposés : col
Le signe des valeurs propres de la Hessienne dit comment le terrain se courbe autour du point critique : cuvette, sommet ou col.

En deux variables, on note traditionnellement r=∂2f/∂x2r = \partial^2 f / \partial x^2, s=∂2f/∂x∂ys = \partial^2 f / \partial x \partial y et t=∂2f/∂y2t = \partial^2 f / \partial y^2. Le signe du déterminant rt−s2rt - s^2 de la Hessienne (produit des deux valeurs propres) et celui de rr suffisent :

rt−s2rt - s^2rrNature du point critique
>0\gt 0>0\gt 0minimum local
>0\gt 0<0\lt 0maximum local
<0\lt 0point selle (col)
=0= 0on 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és

Le randonneur a trouvé le fond de la vallée (1,0)(1, 0), à l’altitude −2-2. Est-ce le point le plus bas du plateau ? Non ! Allez vers l’ouest : g(−3,0)=−27+9=−18g(-3, 0) = -27 + 9 = -18. Et plus on s’éloigne, plus on descend, puisque x3x^3 tend vers −∞-\infty. La fonction gg n’a aucun minimum global : son unique minimum local n’est qu’un creux sur une pente qui plonge.

−3−2−1012x (coupe y = 0)−20−15−10−505g(x, 0) = x³ − 3xminimum localg(1, 0) = −2col (−1, 0) : g = 2g(−3, 0) = −18, bien plus bas→ −∞ vers l’ouest
Coupe du plateau le long de y = 0 : le creux en (1, 0) est un minimum local, mais le terrain descend sans fin vers l'ouest. Il n'y a pas de minimum global.

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 ff est continue sur Rn\mathbb{R}^n (ou sur un fermé) et coercive, c’est-à-dire f(x)→+∞f(x) \to +\infty quand ∥x∥→+∞\lVert x \rVert \to +\infty, alors ff admet un minimum global. L’idée : loin de l’origine, ff est trop grande pour contenir le minimum, qui se trouve donc dans une boule, un compact.

Une fonction ff est convexe si, pour tous points xx, yy et tout θ∈[0,1]\theta \in [0, 1] :

f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)f\big(\theta x + (1 - \theta) y\big) \leq \theta f(x) + (1 - \theta) f(y)

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 x≠yx \neq y et θ∈ ]0,1[\theta \in \, ]0, 1[, ff est strictement convexe.

Pour une fonction C2C^2, il existe un critère pratique : ff est convexe si et seulement si sa Hessienne est semi-définie positive en tout point. Si la Hessienne est définie positive partout, ff est strictement convexe. Pour f(x)=x4−7x+8f(x) = x^4 - 7x + 8, f′′(x)=12x2≥0f''(x) = 12x^2 \geq 0 : elle est convexe. Pour gg, la Hessienne a une valeur propre 6x6x, négative quand x<0x \lt 0 : elle ne l’est pas, ce qui explique tous ses ennuis.

012x051015x* ≈ 1,2051f(x*) ≈ 1,6734corde au-dessusdu graphef(x) = x⁴ − 7x + 8 : convexe−2−1012x−4−3−2−101234le graphe passeau-dessus de la cordeg(x, 0) = x³ − 3x : non convexe
Convexe : toute corde reste au-dessus du graphe. Pour x³ − 3x, le graphe passe au-dessus de la corde là où la courbure est négative (x < 0) : la fonction n'est pas convexe.

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 ff est strictement convexe, le minimum, s’il existe, est unique.

Une fonction quadratique s’écrit

f(x)=12 xTAx−bTx+cf(x) = \tfrac12 \, x^T A x - b^T x + c

avec AA une matrice symétrique, bb un vecteur et cc une constante. Son gradient vaut Ax−bAx - b et sa Hessienne vaut AA, constante. Si AA est symétrique définie positive, ff est strictement convexe et coercive, et son unique minimum est la solution du système linéaire

Ax∗=bA x^* = b

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.

−3−2−101x−2−1012y(−3/4, 0)f₁ = −3,125courbure 4courbure 2−2−101,5355
Les lignes de niveau d'une quadratique définie positive sont des ellipses centrées sur le minimum. Elles sont plus serrées selon x, où la courbure (valeur propre 4) est la plus forte.
  • 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 rt−s2rt - s^2 et rr.
  • Un minimum global existe si ff 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 12xTAx−bTx\tfrac12 x^T A x - b^T x avec AA symétrique définie positive a un unique minimum, solution de Ax=bAx = b.

Exercice · Trouver et classer un point critique

facile

Soit f(x,y)=x2+xy+y2−3xf(x, y) = x^2 + xy + y^2 - 3x. Trouvez ses points critiques et leur nature. Le minimum est-il global ?

Voir la solution

Le gradient vaut (2x+y−3,  x+2y)(2x + y - 3, \; x + 2y). La seconde équation donne x=−2yx = -2y ; dans la première, −4y+y=3-4y + y = 3, donc y=−1y = -1 et x=2x = 2. Le seul point critique est (2,−1)(2, -1).

Hessienne : r=2r = 2, s=1s = 1, t=2t = 2, constante. rt−s2=3>0rt - s^2 = 3 \gt 0 et r>0r \gt 0 : c’est un minimum local, où f(2,−1)=4−2+1−6=−3f(2, -1) = 4 - 2 + 1 - 6 = -3.

La Hessienne est définie positive partout (valeurs propres 1 et 3), donc ff 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éaire
H = np.array([[2, 1], [1, 2]]) # Hessienne, constante
point = np.linalg.solve(H, [3, 0])
x, y = point
print(point, x**2 + x*y + y**2 - 3*x) # [ 2. -1.] -3.0
print(np.linalg.det(H), np.linalg.eigvalsh(H)) # 3.0 [1. 3.] : définie positive partout

Exercice · Quand la Hessienne ne suffit pas

moyen

Montrez que l’origine est un point critique de f(x,y)=x4+y4f(x, y) = x^4 + y^4 et de k(x,y)=x4−y4k(x, y) = x^4 - y^4, que le critère de Monge ne permet pas de conclure, puis concluez autrement.

Voir la solution

Les gradients (4x3,4y3)(4x^3, 4y^3) et (4x3,−4y3)(4x^3, -4y^3) s’annulent à l’origine. Les Hessiennes y sont nulles (r=12x2=0r = 12x^2 = 0, t=±12y2=0t = \pm 12y^2 = 0, s=0s = 0) : rt−s2=0rt - s^2 = 0, on ne peut pas conclure.

On revient à la définition. f(x,y)=x4+y4≥0=f(0,0)f(x, y) = x^4 + y^4 \geq 0 = f(0, 0) pour tout point : l’origine est un minimum global (strict). Pour kk, sur l’axe des xx, k(x,0)=x4>0k(x, 0) = x^4 \gt 0, et sur l’axe des yy, k(0,y)=−y4<0k(0, y) = -y^4 \lt 0 : kk prend des valeurs plus grandes et plus petites que k(0,0)=0k(0, 0) = 0 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**4
k = 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'origine
t = 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), minimum
print(k(x, y).min(), k(x, y).max()) # -1e-08 1e-08 : des deux signes, point selle

Exercice · Un minimum local trompeur

difficile

Soit f(x,y)=x3+y3−3xyf(x, y) = x^3 + y^3 - 3xy. Trouvez ses points critiques, déterminez leur nature, et dites si ff admet un minimum global.

Voir la solution

Le gradient vaut (3x2−3y,  3y2−3x)(3x^2 - 3y, \; 3y^2 - 3x). Il s’annule si y=x2y = x^2 et x=y2x = y^2, donc x=x4x = x^4, soit x=0x = 0 ou x=1x = 1. Les points critiques sont (0,0)(0, 0) et (1,1)(1, 1).

La Hessienne vaut (6x−3−36y)\begin{pmatrix} 6x & -3 \\ -3 & 6y \end{pmatrix}.

  • En (0,0)(0, 0) : r=t=0r = t = 0, s=−3s = -3, donc rt−s2=−9<0rt - s^2 = -9 \lt 0 : point selle.
  • En (1,1)(1, 1) : r=t=6r = t = 6, s=−3s = -3, donc rt−s2=27>0rt - s^2 = 27 \gt 0 et r>0r \gt 0 : minimum local, de valeur 1+1−3=−11 + 1 - 3 = -1.

Il n’y a pas de minimum global : sur l’axe des xx, f(x,0)=x3f(x, 0) = x^3 tend vers −∞-\infty quand x→−∞x \to -\infty. Par exemple, f(−2,0)=−8<−1f(-2, 0) = -8 \lt -1. Comme pour l’altitude gg 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*y
hess = 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 local
print(f(-2, 0), f(-10, 0)) # -8 -1000 : pas de minimum global