Cette leçon a 3 effets positifs :

  • manipuler des bases de sous-espaces
  • mélanger les dérivées partielles et les vecteurs
  • trouver un algorithme plus performant que la méthode du gradiant pour résoudre $A \, {\bf x} = {\bf b}$

Méthode du gradient conjugué¶

On a vu que dans la méthode du gradiant on peut calculer le µ optimal pour aller directement au minimum de la fonctionnelle $J$ dans le long de la ligne ${\bf x}^k \; + µ \, \nabla J({\bf x}^k)$ avec µ qui varie de $- \infty$ à $+ \infty$ (cf ma33).

On a aussi vu que si on a le µ optimal, alors la plus forte pente suivante, $\nabla J ({\bf x}^{k+1})$, sera orthogonale à la pente qui définie la droite sur laquelle on cherche µ. On a donc

$$\nabla J ({\bf x}^{k+1})^T \, . \, \nabla J ({\bf x}^k) = 0$$

C'est bien car cela veut dire que le minimum suivant, ${\bf x}^{k+2}$, sera le minimum de l'espace généré par $\nabla J ({\bf x}^{k+1})$ et $\nabla J ({\bf x}^k)$ (ce qui est mieux que d'être seulement le minimum le long d'une ligne).

Malheureusement rien me dit que ${\bf x}^{k+3}$ ne sera pas calulé le long de notre première direction, $\nabla J({\bf x}^k)$. On a vu dans le cas du gradiant sans recherche du µ optimal qu'on peut osciller entre 2 valeurs. Cela n'est pas possible avec le µ optimal mais on peut tourner en rond sur quelques valeurs.

Même si on ne tourne pas en rond et qu'on converge est il probable qu'on cherche à nouveau un minimum dans une partie de l'espace $ℝ^n$ qu'on a déjà explorée.

Une recherche optimal du minimum d'une fonction convexe dans un espace $ℝ^n$ ne devrait pas prendre plus de $n$ itération si on est toujours capable de caluler le µ optimal dans la direction choisie. Pour s'en convaincre il suffit de choisir comme directions les vecteurs de la base de notre espace $ℝ^n$. Une fois qu'on a trouvé le minimum dans toutes les directions de la base, on a le minimum global. Il n'y a plus aucune direction possible de recherche qui ne serait pas la combinaison linéaire des vecteurs déjà utilisés.

Cas 2D¶

    

Si on cherche le point ${\bf x} = (x_1, x_2)$ qui minimise $J({\bf x})$ (convexe) et qu'on sait calculer le µ optimal de notre méthode de gradient, alors on trouve le minimum globale en 2 itérations au maximum.

Mais on prend un µ trop grand qui nous fasse passer au dessus du minimum global, alors à la prochaine itération la plus grande pente sera exactement l'opposée de celle qu'on vient d'utiliser et on oscillera.

Sur le dessin on voit bien qu'on trouve le minimum global en 2 itérations mais on se dit que c'est un coup de chance et d'ailleurs est-ce vraiment en 2 itérations puisqu'il est écrit ${\bf x}^k$ ? C'est toute la limite d'un dessin qui veut expliquer ce qui se passe dans $ℝ^n$ à des humains habitués à $ℝ^3$ (cf cette vidéo sur la 4e dimension en dehors du cours).

No description has been provided for this image

Générer une base de $ℝ^n$¶

Si on veut trouver notre minimum global en $n$ itération au maximum, il faut que nos directions ne soit pas redondante et donc que les $n$ premières directions génèrent $ℝ^n$ ou forment une base de $ℝ^n$.

Il faut donc que la nouvelle direction ${\bf d}^k$ soit orthogonales à toutes les directions précédentes ou qu'elle permette de trouver une base qui génère un espace de dimension $k+1$ (on commence avec ${\bf d}^0$).

Est-ce possible ?

Le cas $A {\bf x} = {\bf b}$¶

Dans ce cas la fonctionnelle à minimiser est

$$ J({\bf x}) = \frac{1}{2} \, {\bf x}^T \, A \, {\bf x} - {\bf b}\, . {\bf x} $$

et son gradient est $\nabla J({\bf x}) = A \; {\bf x} - {\bf b}$ si A est symétrique.

On sait que si on calcule ${\bf x}^k$ comme avant on a seulement d'orthogonalité de deux directions successives. Cela arrive lorsque µ est choisi pour minimiser $J$ le long de la droite de direction $\nabla J({\bf x}^k)$.

Que se passe-t-il si ${\bf x}^{k+1}$ minimise $J$ dans l'espace ${\bf G_k}$ généré par toutes les directions précédentes ?

$$ J({\bf x}^{k+1}) = \min_{\bf v \in G_k} J({\bf x}^k + {\bf v}) $$ avec ${\bf G_k} = span\{{\bf d}^0, {\bf d}^1,\dots, {\bf d}^k\} = \left\{ {\bf v} = \sum_{i=0}^{k} \alpha_i \, {\bf d}^i \quad \forall \alpha_i \in ℝ \right\}$.

Alors toutes les dérivées partielles par rapport aux vecteurs de ${\bf G_k}$ sont nulles (tout comme $\partial J / \partial x$ et $\partial J / \partial y$ sont nulles au minumum de J dans le dessin ci-dessus). Vectoriellement cela s'écrit ainsi :

$$ \nabla J({\bf x}^{k+1}) \, . \, {\bf w} = 0 \quad \forall {\bf w} \in {\bf G_k} \qquad (0) $$

ce qui se vérifie facilement si ${\bf w}$ est un des vecteurs de la base :

$$ \nabla J({\bf x}^{k+1}) \, . \, {\bf e}_i = \begin{bmatrix} \partial J / \partial x_{1} \\ \partial J / \partial x_{2} \\ \vdots \\ \partial J / \partial x_{i} \\ \vdots \\ \partial J / \partial x_{n} \\ \end{bmatrix} \, . \, \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 1 \\ \vdots \\ 0 \\ \end{bmatrix} = \frac{\partial J}{\partial x_i}({\bf x}^{k+1}) $$

On note que dire la dérivée partielle de $J$ dans une direction ${\bf w}$ de ${\bf G_k}$ est nulle, revient à dire que $\nabla J({\bf x}^{k+1})$ est orthogonal à ${\bf w}$ (ou nul si $\nabla J({\bf x}^{k+1})$ la même dimension que ${\bf G_k}$).

Générons les directions ${\bf d}^i$¶

Ainsi notre formule itérative devient :

$$ {\bf x}^{k+1} = {\bf x}^k + µ^k\, {\bf d}^k $$

Pour calculer les ${\bf d}^k$ on utilise la formule qui nous dit que les dérivées partielles de $J$ par rapport à un vecteur ${\bf w \in G_k}$ sont nulles. Et comme les directions ${\bf d}^i$ génèrent l'espace ${\bf G_k}$ il suffit que les dérivées partielles de $J$ par rapport à tous les ${\bf d}^i$ soient nulles :

$$ \nabla J({\bf x}^{k+1}) \, . \, {\bf d}^i = 0 \quad \forall i \le k \qquad (1) $$

On déroule les calculs

$$ \begin{align} (A\, {\bf x}^{k+1} - b) \, . \, {\bf d}^i &= 0 \quad \forall i \le k \\ (A\, ({\bf x}^{k} + µ^k \, {\bf d}^k) - b) \, . \, {\bf d}^i &= 0 \quad \forall i \le k \\ (A\, {\bf x}^{k} - b) \, . \, {\bf d}^i + µ^k \, A \, {\bf d}^k \, . \, {\bf d}^i &= 0 \quad \forall i \le k \\ \nabla J({\bf x}^{k}) \, . \, {\bf d}^i + µ^k \, A \, {\bf d}^k \, . \, {\bf d}^i &= 0 \quad \forall i \le k \\ \end{align} $$

Si $i < k$ alors le premier terme est nul ce qui donne

$$ A \, {\bf d}^k \, . \, {\bf d}^i = 0 \quad \forall i < k \qquad (2) $$

Comme A est symétrique, on a aussi $A \, {\bf d}^i \, . \, {\bf d}^k = 0 \quad \forall i < k\quad$ ($\sum_{m=1}^N \sum_{n=1}^N a_{m,n}\, d^i_n\, d^k_m = \sum_{n=1}^N \sum_{m=1}^N a_{n,m}\, d^k_m\, d^i_n$).

Ainsi on a des conditions pour construire la nouvelle direction ${\bf d}^k$.

On suppose que la nouvelle direction est le gradiant + une correction qui est une combinaison linéaire des directions précédantes : $$ {\bf d}^k = - \nabla J({\bf x}^k) + \sum_{j=0}^{k-1} β_j {\bf d}^j $$ alors l'équation (2) devient $$ A \, \left( - \nabla J({\bf x}^k) + \sum_{j=0}^{k-1} β_j {\bf d}^j \right) . {\bf d}^i = 0 \quad \forall i < k $$ La somme va faire apparaître des $A\, {\bf d}^j {\bf d}^i$ qui sont tous nul d'après (2) et sa version symétrique sauf $A\, {\bf d}^i {\bf d}^i$. Donc

$$ β_i = \frac{A\, \nabla J({\bf x}^k) \, . \, {\bf d}^i}{A\, {\bf d}^i \, . \, {\bf d}^i} $$

et ainsi $$ {\bf d}^k = - \nabla J({\bf x}^k) + \sum_{i=0}^{k-1} \frac{A\, \nabla J({\bf x}^k) \, . \, {\bf d}^i} {A\, {\bf d}^i \, . \, {\bf d}^i} \; {\bf d}^i $$

2e tentative¶

La méthode trouvée est bien car elle montre qu'on peut optimiser la descente de gradiant mais le calcul de ${\bf d}^k$ est bien trop lourd. Aussi on va tout recommencer pour trouver une autre facon plus efficace.

Travaillons dans la base des $\nabla J({\bf x}^i)$¶

On repart de l'équation (0) qui permet de montrer que les $\nabla J({\bf x}^i), i \le k$ forment une bases du sous espace $\bf G_k$. Aussi tout vecteur s'exprime dans cette base et donc

$$ {\bf x}^{k+1} = {\bf x}^k + μ^k \, {\bf d}^k \quad \textrm{avec} \quad {\bf d}^k = - \nabla J({\bf x}^k) + \sum_{i=0}^{k-1} γ^i \, \nabla J({\bf x}^i) $$

On note que ces ${\bf d}^i, i \le k$ forment aussi une base de $\bf G_k$.

L'équation (2) nous dit que $A \, {\bf d}^k \, . \, {\bf d}^i = 0 \quad \forall i < k$, aussi

$$ \begin{align} < A \, {\bf d}^k, {\bf x}^{j+1} - {\bf x}^j > &= 0 \quad \forall j < k \\ < {\bf d}^k, A \, ({\bf x}^{j+1} - {\bf x}^j) > &= 0 \quad \textrm{car A est symétrique} \\ < {\bf d}^k, A \, {\bf x}^{j+1} - {\bf b} - A {\bf x}^j + {\bf b} > &= 0 \\ < {\bf d}^k, \nabla J({\bf x}^{j+1}) - \nabla J({\bf x}^j) > &= 0 \\ < - \nabla J({\bf x}^k) + \sum_{i=0}^{k-1} γ^i \, \nabla J({\bf x}^i) , \nabla J({\bf x}^{j+1}) - \nabla J({\bf x}^j) > &= 0 \quad (3) \\ \end{align} $$

Si j = k-1 alors $$ \begin{align} < - \nabla J({\bf x}^k), \nabla J({\bf x}^k) > + \, γ^{k-1} < \nabla J({\bf x}^{k-1}), -\nabla J({\bf x}^{k-1}) > &= 0 \\ γ^{k-1} = -\frac{< \nabla J({\bf x}^{k}), \nabla J({\bf x}^{k}) >} {< \nabla J({\bf x}^{k-1}), \nabla J({\bf x}^{k-1}) >} \end{align} $$

Si j = k-2 alors $$ \begin{align} γ^{k-1} \, < \nabla J({\bf x}^{k-1}), \nabla J({\bf x}^{k-1}) > + \, γ^{k-2} < \nabla J({\bf x}^{k-2}), -\nabla J({\bf x}^{k-2}) > &= 0 \\ γ^{k-2} = γ^{k-1} \frac{< \nabla J({\bf x}^{k-1}), \nabla J({\bf x}^{k-1}) >} {< \nabla J({\bf x}^{k-2}), \nabla J({\bf x}^{k-2}) >} = \frac{< \nabla J({\bf x}^{k}), \nabla J({\bf x}^{k}) >} {< \nabla J({\bf x}^{k-2}), \nabla J({\bf x}^{k-2}) >} \end{align} $$ et en continuant les calculs, on a $\forall j < k-1$ $$ γ^j = \frac{< \nabla J({\bf x}^{k}), \nabla J({\bf x}^{k}) >} {< \nabla J({\bf x}^{j}), \nabla J({\bf x}^{j}) >} $$

La formule générale de ${\bf d}^k$ est donc $$ \begin{align} {\bf d}^k &= -\nabla J({\bf x}^k) - \frac{< \nabla J({\bf x}^{k}), \nabla J({\bf x}^{k}) >} {< \nabla J({\bf x}^{k-1}), \nabla J({\bf x}^{k-1}) >} \, \nabla J({\bf x}^{k-1}) + \sum_{i=0}^{k-2} \frac{< \nabla J({\bf x}^{k}), \nabla J({\bf x}^{k}) >} {< \nabla J({\bf x}^{i}), \nabla J({\bf x}^{i}) >} \, \nabla J({\bf x}^i) \\ &= -\nabla J({\bf x}^k) + β \left( -\nabla J({\bf x}^{k-1}) + \sum_{i=0}^{k-2} \frac{< \nabla J({\bf x}^{k-1}), \nabla J({\bf x}^{k-1}) >} {< \nabla J({\bf x}^{i}), \nabla J({\bf x}^{i}) >} \, \nabla J({\bf x}^i) \right) \\ &= -\nabla J({\bf x}^k) + β \, {\bf d}^{k-1} \quad \textrm{avec} \quad β = \frac{< \nabla J({\bf x}^{k}), \nabla J({\bf x}^{k}) >} {< \nabla J({\bf x}^{k-1}), \nabla J({\bf x}^{k-1}) >} \end{align} $$

On a donc réussi à exprimer la nouvelle direction seulement en fonction du gradient courant et de la direction précédente.

Nouveau calcul de μ¶

Le calcul précédent de μ reste valable puisque ce calcul ne dépend pas de la facon d'exprimer ${\bf d}^k$.

$$ µ^k = -\frac{\nabla J({\bf x}^{k}) \, . \, {\bf d}^k} {A \, {\bf d}^k \, . \, {\bf d}^k} \, $$

Avec notre choix de ${\bf d}^k$ cela donne

$$ µ^k = -\frac{<\nabla J({\bf x}^{k}), - \nabla J({\bf x}^{k}) + β \, {\bf d}^{k-1}>} {<A \, {\bf d}^k, {\bf d}^k>} = \frac{<\nabla J({\bf x}^{k}), \nabla J({\bf x}^{k})>} {<A \, {\bf d}^k, {\bf d}^k>} $$ puisque ${\bf d}^{k-1} \perp \nabla J({\bf x}^{k})$.

In [ ]: