En optimización numérica , el algoritmo Broyden–Fletcher–Goldfarb–Shanno ( BFGS ) es un método iterativo para resolver problemas de optimización no lineal sin restricciones . [ 1 ] Al igual que el método relacionado de Davidon–Fletcher–Powell , BFGS determina la dirección de descenso precondicionando el gradiente con información de curvatura. Lo hace mejorando gradualmente una aproximación a la matriz hessiana de la función de pérdida , obtenida únicamente a partir de evaluaciones del gradiente (o evaluaciones aproximadas del gradiente) mediante un método de secante generalizado . [ 2 ]
Dado que las actualizaciones de la matriz de curvatura BFGS no requieren inversión de matriz , su complejidad computacional es solo, en comparación conen el método de Newton . También se usa comúnmente L-BFGS , que es una versión de memoria limitada de BFGS que es particularmente adecuada para problemas con un número muy grande de variables (por ejemplo, >1000). La variante BFGS-B maneja restricciones de caja simples. [ 3 ] La matriz BFGS también admite una representación compacta , lo que la hace más adecuada para problemas con grandes restricciones.
El algoritmo recibe su nombre de Charles George Broyden , Roger Fletcher , Donald Goldfarb y David Shanno . [ 4 ] [ 5 ] [ 6 ] [ 7 ] Es una instancia de un algoritmo más general de John Greenstadt. [ 8 ]
Razón fundamental
El problema de optimización consiste en minimizar, dóndees un vector en, yes una función escalar diferenciable. No hay restricciones en los valores quepuede tomar.
El algoritmo comienza con una estimación inicial.para obtener el valor óptimo y procede iterativamente para obtener una mejor estimación en cada etapa.
La dirección de búsqueda p k en la etapa k viene dada por la solución del análogo de la ecuación de Newton:
dóndees una aproximación a la matriz hessiana en, que se actualiza iterativamente en cada etapa, yes el gradiente de la función evaluada en x k . Luego se utiliza una búsqueda lineal en la dirección p k para encontrar el siguiente punto x k +1 minimizandosobre el escalar
La condición cuasi-Newton impuesta a la actualización dees
Dejary, entoncesSatisface
- ,
que es la ecuación de la secante.
La condición de curvaturadebería quedar satisfechoser definida positiva, lo cual se puede verificar premultiplicando la ecuación de la secante con. Si la función no es fuertemente convexa , entonces la condición debe imponerse explícitamente, por ejemplo, encontrando un punto x k +1 que satisfaga las condiciones de Wolfe , que implican la condición de curvatura, utilizando una búsqueda lineal.
En lugar de requerir la matriz hessiana completa en el puntoa ser calculado como, la matriz hessiana aproximada en la etapa k se actualiza mediante la suma de dos matrices:
Ambosyson matrices simétricas de rango uno, pero su suma es una matriz de actualización de rango dos. Las matrices de actualización BFGS y DFP difieren de su predecesora por una matriz de rango dos. Otro método de rango uno más simple se conoce como método de rango uno simétrico , que no garantiza la positividad definida . Para mantener la simetría y la positividad definida de, el formulario de actualización se puede elegir como. Imponiendo la condición de secante,. Elegiry, podemos obtener: [ 9 ]
Finalmente, sustituimosyeny obtener la ecuación de actualización de:
Algoritmo
Consideremos el siguiente problema de optimización sin restricciones. dóndees una función objetivo no lineal y dos veces diferenciable .
A partir de una suposición inicialy una estimación inicial de la matriz hessianaLos siguientes pasos se repiten comoconverge a la solución:
- Obtén una direcciónresolviendo.
- Realizar una optimización unidimensional ( búsqueda lineal ) para encontrar un tamaño de paso aceptable.en la dirección encontrada en el primer paso. Si se realiza una búsqueda lineal exacta, entoncesEn la práctica, una búsqueda lineal inexacta suele ser suficiente, con un resultado aceptable.que cumplen las condiciones de Wolfe .
- Colocary actualización.
- .
- .
La convergencia se puede determinar observando la norma del gradiente; dado algún, se puede detener el algoritmo cuandoSise inicializa con, el primer paso será equivalente a un descenso de gradiente , pero los pasos posteriores se refinan cada vez más mediante, la aproximación al hessiano.
El primer paso del algoritmo se lleva a cabo utilizando la inversa de la matriz., que se puede obtener de manera eficiente aplicando la fórmula de Sherman-Morrison al paso 5 del algoritmo, dando como resultado
Esto se puede calcular de manera eficiente sin matrices temporales, reconociendo quees simétrico y queyson escalares, utilizando una expansión como
Por lo tanto, para evitar cualquier inversión de matriz, se puede aproximar la inversa de la matriz hessiana en lugar de la propia matriz hessiana:[ 10 ]
A partir de una suposición inicialy una matriz hessiana invertida aproximadaLos siguientes pasos se repiten comoconverge a la solución:
- Obtén una direcciónresolviendo.
- Realizar una optimización unidimensional ( búsqueda lineal ) para encontrar un tamaño de paso aceptable.en la dirección encontrada en el primer paso. Si se realiza una búsqueda lineal exacta, entoncesEn la práctica, una búsqueda lineal inexacta suele ser suficiente, con un resultado aceptable.que cumplen las condiciones de Wolfe .
- Colocary actualización.
- .
- .
En problemas de estimación estadística (como máxima verosimilitud o inferencia bayesiana), los intervalos creíbles o intervalos de confianza para la solución pueden estimarse a partir de la inversa de la matriz hessiana final . Sin embargo, estas cantidades están definidas técnicamente por la matriz hessiana verdadera, y la aproximación BFGS puede no converger a la matriz hessiana verdadera. [ 11 ]
Nuevos desarrollos
La fórmula de actualización de BFGS depende en gran medida de la curvatura.Ser estrictamente positivo y acotado lejos de cero. Esta condición se cumple al realizar una búsqueda lineal con condiciones de Wolfe en un objetivo convexo. Sin embargo, algunas aplicaciones prácticas (como los métodos de programación cuadrática secuencial) suelen producir curvaturas negativas o casi nulas. Esto puede ocurrir al optimizar un objetivo no convexo o al emplear un enfoque de región de confianza en lugar de una búsqueda lineal. También es posible obtener valores espurios debido al ruido en el objetivo.
En tales casos, se puede utilizar una de las llamadas actualizaciones BFGS amortiguadas (véase [ 12 ] ) que modificany/opara obtener una actualización más sólida.
Implementaciones destacadas
Algunas implementaciones de código abierto destacadas son:
- ALGLIB implementa BFGS y su versión de memoria limitada en C++ y C#.
- GNU Octave utiliza una forma de BFGS en su
fsolvefuncionamiento, con extensiones de región de confianza . - GSL implementa BFGS como gsl_multimin_fdfminimizer_vector_bfgs2 . [ 13 ]
- En R , el algoritmo BFGS (y la versión L-BFGS-B que permite restricciones de caja) se implementa como una opción de la función base optim(). [ 14 ]
- En SciPy , la función scipy.optimize.fmin_bfgs implementa BFGS. [ 15 ] También es posible ejecutar BFGS utilizando cualquiera de los algoritmos L-BFGS estableciendo el parámetro L en un número muy grande. Este es también uno de los métodos predeterminados que se utilizan al ejecutar scipy.optimize.minimize sin restricciones. [ 16 ]
- En Julia , el paquete Optim.jl implementa BFGS y L-BFGS como una opción de solucionador para la función optimize() (entre otras opciones). [ 17 ]
- Stan implementa BFGS junto con la diferenciación automática como una opción para resolver problemas de estimación de máxima verosimilitud y estimación de máxima probabilidad a posteriori .
Entre las implementaciones propietarias más destacadas se incluyen:
- El software de optimización no lineal a gran escala Artelys Knitro implementa, entre otros, los algoritmos BFGS y L-BFGS.
- En la caja de herramientas de optimización de MATLAB , la función fminunc utiliza BFGS con búsqueda lineal cúbica cuando el tamaño del problema se establece en "escala media".
- Mathematica incluye BFGS.
- LS-DYNA también utiliza BFGS para resolver problemas implícitos.
Véase también
Referencias
- ↑ Fletcher, Roger (1987), Métodos prácticos de optimización (2.ª ed.), Nueva York: John Wiley & Sons , ISBN 978-0-471-91547-8
- ↑ Dennis, JE Jr .; Schnabel, Robert B. (1983), "Métodos secantes para la minimización sin restricciones" , Métodos numéricos para la optimización sin restricciones y ecuaciones no lineales , Englewood Cliffs, NJ: Prentice-Hall, pp. 194–215 , ISBN 0-13-627216-9
- ↑ Byrd, Richard H.; Lu, Peihuang; Nocedal, Jorge; Zhu, Ciyou (1995), "Un algoritmo de memoria limitada para la optimización con restricciones de límites" , SIAM Journal on Scientific Computing , 16 (5): 1190– 1208, CiteSeerX 10.1.1.645.5814 , doi : 10.1137/0916069
- ↑ Broyden, CG (1970), "La convergencia de una clase de algoritmos de minimización de doble rango", Journal of the Institute of Mathematics and Its Applications , 6 : 76–90 , doi : 10.1093/imamat/6.1.76
- ↑ Fletcher, R. (1970), "Un nuevo enfoque para los algoritmos de métrica variable", Computer Journal , 13 (3): 317–322 , doi : 10.1093/comjnl/13.3.317
- ↑ Goldfarb, D. (1970), "Una familia de actualizaciones métricas variables derivadas por medios variacionales", Mathematics of Computation , 24 (109): 23– 26, doi : 10.1090/S0025-5718-1970-0258249-6
- ↑ Shanno, David F. (julio de 1970), "Condicionamiento de métodos cuasi-Newton para la minimización de funciones", Mathematics of Computation , 24 (111): 647–656 , doi : 10.1090/S0025-5718-1970-0274029-X , MR 0274029
- ↑ Greenstadt, J. (1970). "Variaciones sobre métodos de métrica variable. (Con discusión)" . Matemáticas de la Computación . 24 (109): 1– 22. doi : 10.1090/S0025-5718-1970-0258248-4 . ISSN 0025-5718 .
- ↑ Fletcher, Roger (1987), Métodos prácticos de optimización (2.ª ed.), Nueva York: John Wiley & Sons , ISBN 978-0-471-91547-8
- ↑ Nocedal, Jorge; Wright, Stephen J. (2006), Optimización numérica (2.ª ed.), Berlín, Nueva York: Springer-Verlag , ISBN 978-0-387-30303-1
- ↑ Ge, Ren-pu; Powell, MJD (1983). "La convergencia de matrices métricas variables en optimización sin restricciones". Mathematical Programming . 27 (2). 123. doi : 10.1007/BF02591941 . S2CID 8113073 .
- ↑ Jorge Nocedal; Stephen J. Wright (2006), Optimización numérica
- ↑ "Biblioteca Científica GNU — Documentación GSL 2.6" . www.gnu.org . Consultado el 22 de noviembre de 2020 .
- ↑ "R: Optimización de propósito general" . stat.ethz.ch. Consultado el 22 de noviembre de 2020 .
- ↑ "scipy.optimize.fmin_bfgs — Guía de referencia de SciPy v1.5.4" . docs.scipy.org . Consultado el 22 de noviembre de 2020 .
- ↑ "scipy.optimize.minimize — Guía de referencia de SciPy v1.5.4" . docs.scipy.org . Consultado el 22 de enero de 2025 .
- ↑ "Optim.jl Opciones configurables" . julianlsolvers .
Lecturas adicionales
- Avriel, Mordecai (2003), Programación no lineal: análisis y métodos , Dover Publishing, ISBN 978-0-486-43227-4
- Bonnans, J. Frédéric; Gilbert, J. Charles; Lemaréchal, Claude ; Sagastizábal, Claudia A. (2006), "Métodos newtonianos", Optimización numérica: aspectos teóricos y prácticos (Segunda edición), Berlín: Springer, pp. 51–66 , ISBN 3-540-35445-X
- Fletcher, Roger (1987), Métodos prácticos de optimización (2.ª ed.), Nueva York: John Wiley & Sons , ISBN 978-0-471-91547-8
- Luenberger, David G.; Ye , Yinyu (2008), Programación lineal y no lineal , Serie internacional en investigación operativa y ciencias de la gestión, vol. 116 (Tercera ed.), Nueva York: Springer, pp. xiv+546, ISBN 978-0-387-74502-2, MR 2423726
- Kelley, CT (1999), Métodos iterativos para la optimización , Filadelfia: Society for Industrial and Applied Mathematics, págs. 71–86 , ISBN 0-89871-433-8
- Algoritmos y métodos de optimización