Optimisation impossible avec Gauss-Newton et Levenberg Marquardt
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Optimisation impossible avec Gauss-Newton et Levenberg Marquardt



  1. #1
    invite6b900f7a

    Optimisation impossible avec Gauss-Newton et Levenberg Marquardt


    ------

    Bonjour,

    Voilà j'ai créé un programme qui doit faire l'optimisation d'un critère des moindres carrés sachant que j'utilise un modèle non linéaire à 6 paramètres.

    J'ai 2 possibilités. Soit j'utilise un optimiseur de Gauss-Newton mais dans ce cas le programme m'affiche une erreur "problème singulier" ce qui signifie que mon hessien n'est pas inversible.

    Soit j'utilise un optimiseur de Levenberg Marquardt mais dans ce cas mon optimiseur fait 4 ou 5 iterations en ne modifiant que legerement le 1er paramètre (du genre s'il est à 1 il met 0.99994 puis 0.99996) et il me renvoi à chaque fois les paramètres initiaux.

    Donc à votre avis qu'est ce qui cloche dans ce que j'ai fait ?

    J'ai aussi la possibilité d'utiliser un optimiseur NonLinearConjugateGradientOpti mizer mais ça impose de reprogrammer un peu tout donc je voudrais être sur qu'il n'y a pas d'autre possibilité et que ça vaille le coup

    -----

  2. #2
    invitebe0cd90e

    Re : Optimisation impossible avec Gauss-Newton et Levenberg Marquardt

    Salut,

    je ne suis pas un specialiste de la modelisation, mais un reflexe de programmeur serait de commencer par utiliser ton modele pour generer toi meme un exemple. ca se fait bien avec Matlab/octave, tu choisis toi meme des parametres, et tu generes des points en utilisant ces parametres, et en ajoutant une erreur aleatoire faible, genre quelques pour cent.

    Du coup tu te retrouves avec une liste de points pour lesquels tu connais la reponse. ca va te permettre de tester l'algo LM, avec differentes valeurs initiales, voire en choisissant pour certain parametres la valeur que tu sais etre la bonne, pour essayer d'identifier le ou les parametres qui foirent. Enfin bref, c'est du tatonnement mais ca peut t'aider a avoir une vue plus clair du comportement de ton modele face a LM.

    le comportement que tu observes est il le meme quelles que soit les valeurs initiales que tu choisis ? Est ce que c'est seulement le premier parametre qui bouge si peu ?

    Avec certain modeles, certain des parametres peuvent etre lus de facon approximative sur la courbe obtenue en relaint tes points experimentaux. Si c'est le cas ca devrait te permettre de choisir de "bonnes" valeurs initiales.

    Ceci dit effectivement c'est un comportement etrange..Generalement ce qui peut arriver c'est qu'il ne converge pas, ou parte vers des valeurs n'ayant aucun sens physique, mais qu'il stagne comme ca... regarde la doc de la fonction que tu utilises, tu dois pouvoir ajuster le pas de l'algorithme. En principe l'interet de Lm est justement qu'il ajuste ce pas au fur et a mesure, mais je parie que tu peux entrer en parametre un facteur qui va ajuster la "taille" des sauts qu'il va effectuer.

    Notes que si tes parametres ont des ordres de grandeur tres different, ca peut aussi poser probleme, notamment pour savoir quand l'algo doit s'arreter. Ca aussi ca peut s'ajuster. De memoire, sous octave, on pouvait controler le pas et sans doute les conditions d'arret independamment pour chaque parametre ce qui permettait de pallier a ca.

    Tout ca pour dire qu'un algo comme ca ne fait pas de miracle, il faut tatonner un peu et l'aider au maximum.

  3. #3
    invite6b900f7a

    Re : Optimisation impossible avec Gauss-Newton et Levenberg Marquardt

    Salut,

    Merci de ta réponse. Pour répondre à tes questions. Je pensais que le comportement était le même quelque soit les valeurs initales et seul le 1er paramettre changaient legerement. Mais j'ai essayé avec des valeurs très petites et là eureka. Alors que le critère n'était evalué que 4 fois et le jacobien 1 fois avant, là le critère a été evalué plus d'une dizaine de fois et le jacobien 3 ou 4. De plus d'abord il n'y a eu que le 1er paramèttre qui a bougé puis le 3ème mais ça s'est arrêté là.

    On peut en effet modifier des paramèttres mais je t'avoue ne pas trop savoir lequel prendre, ni dans quel sens aller. Je te les joins :
    * initial step bound factor: 100.0
    * maximal iterations: 1000
    * cost relative tolerance: 1.0e-10
    * parameters relative tolerance: 1.0e-10
    * orthogonality tolerance: 1.0e-10

    Par contre je pense qu'il est impossible de controller l'arrêt sur chaque paramèttre

  4. #4
    invitebe0cd90e

    Re : Optimisation impossible avec Gauss-Newton et Levenberg Marquardt

    Salut,

    Juste avec leur description comme ca, j'avoue ne pas voir a quoi correspond chacun des parametres... Faut essayer de les bidouiller en regardant dans la doc a quoi ils correspondent exactement.. En gros, l'algorithme s'arrete quand les parametres avant et apres une iteration sont "sensiblement les memes", il faut donc soit diminuer le seuil de tolerance pour dire qu deux vecteurs sont sensiblements egaux, soit augmenter la taille des sauts. Quel logiciel utilise tu ?

    Ceci dit, dans tous les cas je pense que c'est utile de fabriquer toi meme une liste de faux points experimentaux, ca te permettra de faire des tests et de bidouiller les reglages jusqu'a ce que tu puisses constater que ca fonctionne. Essaie aussi de voir si tu peux deviner de bonnes valeurs initiales grace a la courbe correspondant a tes points (en cherchant une interpretation "visuelle" de certains parametres). Enfin, est ce que tu laisses ton logiciel calculer lui meme la dérivée du modele ? Si oui, probablement que tu dois pouvoir la calculer de facon exacte, et la passer en parametre au logiciel. En effet, le logiciel calcule une approximation numerique un peu naive de ladite derivée, et si le modele est un peu instable ca peut donner un resultat plus ou moins bon.

    Encore une fois je ne suis pas un specialiste, donc je ne peux pas garantir qu'il n'existe pas de strategie plus efficace et plus simples. Mais j'ai deja eu a traiter des modeles non lineaires avec pasmal de parametres et surtout pas mal de symetries, et les algos numeriques que j'ai essayé se cassaient les dents. Du coup j'ai reprogrammé un truc totalement différent basé sur l'analyse par intervalle, mais c'est beaucoup plus de boulot si tu dois programmer ca toi meme.

    Je n'avais pas pu les utiliser directement, mais peut etre que dans ton cas ca fonctionnera : il existe des logiciels tout fait qui determine le(s) minimum(s) d'une fonction en utilisant l'analyse par intervalle, par exemple globsol : http://interval.louisiana.edu/GlobSo...d_GlobSol.html

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Optimisation-levenberg-marquart
    Par invite9c7554e3 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 27/04/2010, 18h47
  2. Optimisation avec contraintes sous Matlab
    Par invite690e7e9c dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 01/11/2009, 09h29
  3. Méthode de Levenberg-Marquardt.
    Par invite1d80e60c dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 03/01/2008, 13h56
  4. Analyse complexe : intégrale avec moyenne de Gauss
    Par invite4b31cbd7 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 11/02/2007, 17h13
  5. différence entre gauss et gauss-jordan...
    Par invite3569df15 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 02/08/2005, 20h26