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 x k 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 xk 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 pk .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 kT1 .g k g kT1 .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 Gx2 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