Comparaison de deux méthodes de recherche de minimum local

publicité
Comparaison méthodes de recherche de minimum local
Formation d'Ingénieur – Maître
Formation continue
Université Paris Sud
MEMOIRE DE MATHEMATIQUES
Nom de l'auditeur : Mickaël SAUVAGE
Dates : 07 juillet 2003
Libellé du projet :
Comparaison de deux méthodes de recherche de minimum local :
Méthode du gradient - Méthode du gradient conjugué
Nombre de pages :
13
Notes du destinataire :
Mickaël SAUVAGE
Mémoire de mathématiques
Page 1 sur 13
Comparaison méthodes de recherche de minimum local
Sommaire
INTRODUCTION................................................................................................................................................. 3
1. LA METHODE DU GRADIENT .................................................................................................................... 4
2. LA METHODE DU GRADIENT CONJUGUE............................................................................................. 5
3. COMPARAISON DES DEUX METHODES AVEC MATLAB................................................................... 6
3.1. DESCRIPTION DE LA FONCTION UTILISEE ....................................................................................................... 6
3.2. LE PROGRAMME POUR LA METHODE DU GRADIENT ....................................................................................... 8
3.3. LE PROGRAMME POUR LA METHODE DU GRADIENT CONJUGUE.................................................................... 10
CONCLUSIONS ................................................................................................................................................. 13
Mickaël SAUVAGE
Mémoire de mathématiques
Page 2 sur 13
Comparaison méthodes de recherche de minimum local
Introduction
La recherche d'un minimum local sur une fonction est très utilisés pour trouver des
solutions permettant de minimiser une erreur. La phase d'apprentissage supervisé d'un réseau
de neurones est un cas concret d'application nécessitant de faire des recherches sur le
minimum d'une fonction. Dans le cas du réseau de neurone, il faut effectuer des calculs pour
optimiser la valeur de chacun des points des entrées de chaque neurone et la masse de calcul
nécessaire peut devenir très rapidement importante. Il est donc nécessaire d'avoir des outils de
calcul qui soient les plus rapides possible.
Je vais comparer deux méthodes de recherche de minimum local d'une fonction : la
première méthode va utiliser l'algorithme du gradient et la seconde, l'algorithme du gradient
conjugué.
Ces deux méthodes sont des méthodes itératives et nous allons comparer la vitesse
avec laquelle ces méthodes convergent et le nombre d'itérations nécessaires pour trouver la
solution avec une erreur déterminée.
Mickaël SAUVAGE
Mémoire de mathématiques
Page 3 sur 13
Comparaison méthodes de recherche de minimum local
1. La méthode du gradient
Cette méthode est la plus simple à mettre en œuvre pour trouver un minimum local sur
une fonction. Comme son nom l'indique, on utilise le gradient en un point donné de courbe
pour donner la direction de la descente. La distance entre le point xk et le point xk+1 est calculé
en fonction de la valeur du gradient gk et d'un pas déterminé à l'avance λ.
xk +1 = xk − λ .g k
Le pas λ a une influence très importante sur la vitesse de convergence de la méthode
du gradient. Plus λ est grand, plus la méthode convergera rapidement. Cependant, si λ est trop
grand il y a un risque de divergence de la suite.
Mickaël SAUVAGE
Mémoire de mathématiques
Page 4 sur 13
Comparaison méthodes de recherche de minimum local
2. La méthode du gradient conjugué
La méthode du gradient conjugué utilise, comme son nom l'indique, le gradient de la
fonction pour déterminer la direction de la recherche du minimum locale. C'est une méthode
itérative tout comme la méthode du gradient, mais elle utilise un algorithme pour que la
direction de recherche soit optimisée. Cette direction est déterminée en fonction du gradient
au point Xn mais aussi en fonction du gradient du point précédent Xn-1, c'est pour cette
raison que l'on parle de gradient conjugué.
Pour la première itération, la direction choisie correspond à la valeur négative du
gradient :
d0 = −g0
Pour réduire le nombre d'itération, le point Xn+1 est choisi en trouvant le minimum de
la fonction dans la direction déterminée précédemment.
xk +1 = x k + α k .d k
Une méthode pour trouver la valeur minimale de f(xk+1) est de calculer l'ensemble des
points décrit par l'équation ci dessus pour αk ∈ [0 ; 1] avec un pas déterminé. On calcul
ensuite l'ensemble des f(xk+1). On conserve finale xk+1 permettant d'obtenir le minimum de
f(xk+1).
La direction suivante est déterminée en fonction de la direction précédente (conjugué
de l'une par rapport à l'autre). La méthode la plus courante consiste à combiner la direction
précédente avec le calcul du gradient au point xk+1 pour calculer la nouvelle direction :
d k = − g k + p k .d k −1
Il existe plusieurs versions de la méthode du gradient conjugué, elles se distinguent par
la manière dont la constante pk est calculée.
Voici la méthode de calcul de Fletcher-Reeves :
g kT .g k
Pk = T
g k −1 .g k −1
Pk représente alors le rapport entre la norme au carré du gradient actuel et la norme au
carré du gradient précédent.
Voici la méthode de calcul de Polak-Ribiére :
Pk =
Mickaël SAUVAGE
∆g kT−1 .g k
g kT−1 .g k −1
Mémoire de mathématiques
Page 5 sur 13
Comparaison méthodes de recherche de minimum local
Avec cette méthode, la constante Pk prend en compte la variation du gradient.
3. Comparaison des deux méthodes avec matlab
3.1. Description de la fonction utilisée
Pour comparer les deux méthodes, j'utilise une fonction dérivable et disposant d'un
minimum local facile à calculer.
Voici la fonction choisie :
f ( x, y ) = ( x − 2) 4 + ( x − 2. y ) 2
Voici la surface représentant cette fonction :
Voici son diagramme de courbes iso niveau :
Mickaël SAUVAGE
Mémoire de mathématiques
Page 6 sur 13
Comparaison méthodes de recherche de minimum local
Le minimum de la fonction f(x,y) = (x-2)4 + (x-2.y)2 correspond au point de
coordonnée (2,1).
Le gradient de cette fonction ce calcul de la manière suivante :
df ( x, y )
= 4.( x − 2) 3 + 2.( x − 2. y )
dx
df ( x, y )
= −4.( x − 2. y )
dy
La norme du gradient ce calcul de la manière suivante :
G = G x2 + G y2
Gx et Gy représentent la composante en x et en y du gradient G
Mickaël SAUVAGE
Mémoire de mathématiques
Page 7 sur 13
Comparaison méthodes de recherche de minimum local
3.2. Le programme pour la méthode du gradient
J'ai baptisé le programme utilisant la méthode du gradient Mick1_grad.m
clear all
close all
[x,y] = meshgrid(-2:0.1:2);
hold on
z = (x-2).^4 + (x-2*y).^2;
% plot3(x,y,z); % affichage de la courbe
mesh(x,y,z);
pas = 0.01;
n = 1;
% On demande les coordonnées d'un point de départ
[xx(n),yy(n)]=ginput(1);
zz(n) = (xx(n)-2).^4 + (xx(n)-2*yy(n)).^2;
plot3(xx(n),yy(n),zz(n),'+r');
% On affiche le point de départ
dx(n) = 4*(xx(n)-2).^3 + 2*(xx(n)-2*yy(n));
dy(n) = -4*(xx(n)-2*yy(n));
% calcul de la dérivée par rapport à x
% calcul de la dérivée par rapport à y
while sqrt(dx(n)^2 + dy(n)^2) > 0.001
% On continu tant que la norme du gradient > 0.001
% calcul du point suivant
xx(n+1) = xx(n) - pas*dx(n);
yy(n+1) = yy(n) - pas*dy(n);
n = n + 1;
zz(n) = (xx(n)-2).^4 + (xx(n)-2*yy(n)).^2;
plot3(xx(n),yy(n),zz(n),'+r');
% On affiche le point de départ
dx(n) = 4*(xx(n)-2).^3 + 2*(xx(n)-2*yy(n));
dy(n) = -4*(xx(n)-2*yy(n));
% calcul de la dérivée par rapport à x
% calcul de la dérivée par rapport à y
end
n
xx(n)
yy(n)
% nombre d'itérations
% position du dernier point x
% position du dernier point y
Mickaël SAUVAGE
Mémoire de mathématiques
Page 8 sur 13
Comparaison méthodes de recherche de minimum local
Voici le résultat de la simulation avec Matlab :
Voici les paramètres de simulation :
•
•
•
Pas réglé à 0.01
Arrêt de l'algorithme quand la norme du gradient est inférieur à 0.001
Point de départ = (-1,5 ; -1,5)
La simulation donne les résultats suivants :
•
•
Solution trouvée au point (1.9346 ; 0.9673)
Nombre d'itérations = 3686
On remarque que le nombre d'itérations est important. Celui ci aurait pu être réduit en
choisissant un pas supérieur mais avec un risque de divergence de la solution trouvée.
Mickaël SAUVAGE
Mémoire de mathématiques
Page 9 sur 13
Comparaison méthodes de recherche de minimum local
3.3. Le programme pour la méthode du gradient conjugué
J'ai baptisé le programme utilisant la méthode du gradient conjugué Mick2_grad.m.
Voici le listing du programme Mick2_grad.m :
clear all
close all
% Constrtuction de la représentation de la fonction
[x,y] = meshgrid(-2:0.1:2);
z = (x-2).^4 + (x-2*y).^2;
figure(1)
surf(x,y,z)
shading interp
title('f(x,y) = (x-2)^4 + (x-2y)^2 en trois dimensions')
figure(2)
contour(x,y,z,50)
title('Courbes isovaleur de la fonction f(x,y) = (x-2)^4 + (x-2y)^2')
hold on
clear x;
% Choix du point de départ de la méthode
[x(1),x(2)]=ginput(1); % x(1) = x0 et x(2) = y0
plot(x(1),x(2),'+r')
x=x'; % transformation en vecteur
xinit=x
go = [1,1]'; % initialisation du vecteur du gradient avec une matrice vide
i = 1;
while sqrt(go(1)^2 + go(2)^2) > 0.001 % Norme du gradient > 0.001
% Evaluation de la fonction et de son gradient par le biais de fonctions dédiées
f=(x(1)-2).^4 + (x(1)-2*x(2)).^2;
g(1)= 4*(x(1)-2).^3 + 2*(x(1)-2*x(2)); % dérivée par rapport à x
g(2)= -4*(x(1)-2*x(2));
% dérivée par rapport à y
Mickaël SAUVAGE
Mémoire de mathématiques
Page 10 sur 13
Comparaison méthodes de recherche de minimum local
if i == 1 % si premier passage
g=g';
% On met la valeur du gradient sous forme d'un vecteur
p = 1;
d = 0*g;
else
p = g'*g/(go'*go);
% Critère de descente de Fletcher-Reeves
%p = (g-go)'*g/(go'*go); % Critère de descente de Polak-Ribière
end
d = -g+p*d;
% vecteur direction
% Détermination du réel s tel que x+s*d minimise la fonction f selon la direction choisie
lambda = 0:0.001:1;
for j=1:length(lambda) % on génère un tableau fn correspondant aux valeurs de la courbes suivant la direction
donnée
xn = x + lambda(j)*d;
% calcul des points qui vont suivre la direction
fn(j)=(xn(1)-2).^4 + (xn(1)-2*xn(2)).^2; % valeur de la fonction sur ces points
end
% Récupération de la valeur minimale ainsi que de l'indice correspondant
[aa ind]=min(fn); % aa = valeur minimum, ind = indice pour laquel la valeur est minimale
% On réajuste x selon la valeur de lambda trouvée
x = x + lambda(ind)*d;
% On attribue à go la valeur courante de g avant réévaluation de ce dernier
go = g;
plot(x(1),x(2),'+r')
hold on
i = i +1;
% On incrémente le compteur d'itération
end
x
i
% On affiche la solution
% On affiche le nombre d'itérations
plot(x(1),x(2),'o')
hold off
Mickaël SAUVAGE
Mémoire de mathématiques
Page 11 sur 13
Comparaison méthodes de recherche de minimum local
Voici le résultat de la simulation avec matlab :
Les paramètres de simulation étaient identique par rapport à ceux utilisés avec l'algorithme du
gradient soit :
•
•
Arrêt de l'algorithme quand la norme du gradient est inférieur à 0.001
Point de départ = (-1,5 ; -1,5)
La simulation donne les résultats suivants :
•
•
Solution trouvée au point (1.9634 ; 0.9816)
Nombre d'itérations = 40
On remarque immédiatement la rapidité de convergence de l'algorithme du gradient conjugué
par rapport à l'algorithme du gradient simple. Le nombre d'itérations est beaucoup plus faible.
Mickaël SAUVAGE
Mémoire de mathématiques
Page 12 sur 13
Comparaison méthodes de recherche de minimum local
Conclusions
Nous venons de voir la supériorité de l'algorithme du gradient conjugué par rapport à
l'algorithme du gradient simple au niveau de la rapidité de convergence et du nombre
d'itérations nécessaires pour trouver la solution.
De plus, l'algorithme du gradient conjugué n'est pas beaucoup plus compliqué et ne
nécessite donc pas beaucoup plus de ressource machine que l'algorithme du gradient simple
et les temps de calcul sont du coup fortement réduits.
Dans le programme j'ai intégré deux critères de descente : le critère de FletcherReeves et celui de Polak-Ribiére. Ces deux critères donnent des résultats a peu près similaires.
Mickaël SAUVAGE
Mémoire de mathématiques
Page 13 sur 13
Téléchargement