Saltar al contenido

¿Cómo funciona el algoritmo de Levenberg-Marquardt en detalle pero de una manera comprensible?

Solución:

Minimizar una función es como intentar encontrar el punto más bajo de una superficie. Piense en usted mismo caminando sobre una superficie montañosa y que está tratando de llegar al punto más bajo. Encontrarías la dirección que va cuesta abajo y caminarás hasta que ya no vaya cuesta abajo. Luego, elegiría una nueva dirección que vaya cuesta abajo y caminará en esa dirección hasta que ya no vaya cuesta abajo, y así sucesivamente. Eventualmente (con suerte) llegaría a un punto en el que ya no hay dirección cuesta abajo. Entonces estarías en un mínimo (local).

El algoritmo LM y muchos otros algoritmos de minimización utilizan este esquema.

Supongamos que la función que se minimiza es F y que estamos en el punto x (n) de nuestra iteración. Deseamos encontrar la siguiente iteración x (n + 1) tal que F (x (n + 1))

Primero, calcule una aproximación lineal a F en el punto x (n). Es fácil averiguar la dirección cuesta abajo de una función lineal, por lo que usamos la función de aproximación lineal para determinar la dirección cuesta abajo. A continuación, necesitamos saber hasta dónde podemos llegar en esta dirección elegida. Si nuestra función lineal de aproximación es una buena aproximación de F para un área grande alrededor de x (n), entonces podemos dar un paso bastante grande. Si es una buena aproximación solo muy cercana ax (n), entonces solo podemos dar un paso muy pequeño.

Esto es lo que hace LM: calcula una aproximación lineal a F en x (n), dando así la dirección cuesta abajo, luego calcula qué tan grande es el paso a dar en función de qué tan bien la función lineal se aproxima a F en x (n). LM determina qué tan buena es la función de aproximación básicamente dando un paso en la dirección así determinada y comparando cuánto disminuyó la aproximación lineal a F con cuánto disminuyó la función real F. Si están cerca, la función de aproximación es buena y podemos dar un paso un poco más grande. Si no están cerca, entonces la función de aproximación no es buena y debemos retroceder y dar un paso más pequeño.

  • Prueba http://en.wikipedia.org/wiki/Levenberg–Marquardt_algorithm
  • Tutorial en PDF de Ananth Ranganathan
  • JavaNumerics tiene una implementación bastante legible
  • El ICS tiene una implementación C / C ++

Las ideas básicas del algoritmo LM se pueden explicar en unas pocas páginas, pero para una implementación de nivel de producción que sea rápida y sólida, se necesitan muchas optimizaciones sutiles. El estado del arte sigue siendo la implementación de Minpack de Moré et al., Documentada en detalle por Moré 1978 (http://link.springer.com/content/pdf/10.1007/BFb0067700.pdf) y en la guía del usuario de Minpack (http : //www.mcs.anl.gov/~more/ANL8074b.pdf). Para estudiar el código, mi traducción de C (https://jugit.fz-juelich.de/mlz/lmfit) es probablemente más accesible que el código original de Fortran.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *