Articulo de referencia

Algoritmo de Broyden-Fletcher-Goldfarb-Shanno

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 . [ ...

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 soloO(norte2){\displaystyle {\mathcal {O}}(n^{2})}, en comparación conO(norte3){\displaystyle {\mathcal {O}}(n^{3})}en 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 minimizarF(incógnita){\displaystyle f(\mathbf {x} )}, dóndeincógnita{\displaystyle \mathbf {x} }es un vector enRnorte{\displaystyle \mathbb {R} ^{n}}, yF{\displaystyle f}es una función escalar diferenciable. No hay restricciones en los valores queincógnita{\displaystyle \mathbf {x} }puede tomar.

El algoritmo comienza con una estimación inicial.incógnita0{\displaystyle \mathbf {x} _{0}}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:

Bkpagk=F(incógnitak),{\displaystyle B_{k}\mathbf {p} _{k}=-\nabla f(\mathbf {x} _{k}),}

dóndeBk{\displaystyle B_{k}}es una aproximación a la matriz hessiana enincógnitak{\displaystyle \mathbf {x} _{k}}, que se actualiza iterativamente en cada etapa, yF(incógnitak){\displaystyle \nabla f(\mathbf {x} _ {k})}es 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 minimizandoF(incógnitak+γpagk){\displaystyle f(\mathbf {x} _{k}+\gamma \mathbf {p} _{k})}sobre el escalarγ>0.{\displaystyle \gamma >0.}

La condición cuasi-Newton impuesta a la actualización deBk{\displaystyle B_{k}}es

Bk+1(incógnitak+1incógnitak)=F(incógnitak+1)F(incógnitak).{\displaystyle B_{k+1}(\mathbf {x} _{k+1}-\mathbf {x} _{k})=\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k}).}

Dejaryk=F(incógnitak+1)F(incógnitak){\displaystyle \mathbf {y} _{k}=\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k})}ysk=incógnitak+1incógnitak{\displaystyle \mathbf {s} _{k}=\mathbf {x} _{k+1}-\mathbf {x} _{k}}, entoncesBk+1{\displaystyle B_{k+1}}Satisface

Bk+1sk=yk{\displaystyle B_{k+1}\mathbf {s} _{k}=\mathbf {y} _{k}},

que es la ecuación de la secante.

La condición de curvaturaskTyk>0{\displaystyle \mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k}>0}debería quedar satisfechoBk+1{\displaystyle B_{k+1}}ser definida positiva, lo cual se puede verificar premultiplicando la ecuación de la secante conskT{\displaystyle \mathbf {s} _{k}^{\mathsf {T}}}. 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 puntoincógnitak+1{\displaystyle \mathbf {x} _{k+1}}a ser calculado comoBk+1{\displaystyle B_{k+1}}, la matriz hessiana aproximada en la etapa k se actualiza mediante la suma de dos matrices:

Bk+1=Bk+Uk+Vk.{\displaystyle B_{k+1}=B_{k}+U_{k}+V_{k}.}

AmbosUk{\displaystyle U_{k}}yVk{\displaystyle V_{k}}son 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 deBk+1{\displaystyle B_{k+1}}, el formulario de actualización se puede elegir comoBk+1=Bk+αT+βvvT{\displaystyle B_{k+1}=B_{k}+\alpha \mathbf {u} \mathbf {u} ^{\mathsf {T}}+\beta \mathbf {v} \mathbf {v} ^{\mathsf {T}}}. Imponiendo la condición de secante,Bk+1sk=yk{\displaystyle B_{k+1}\mathbf {s} _{k}=\mathbf {y} _{k}}. Elegir=yk{\displaystyle \mathbf {u} =\mathbf {y} _ {k}}yv=Bksk{\displaystyle \mathbf {v} =B_ {k}\mathbf {s} _ {k}}, podemos obtener: [ 9 ]

α=1ykTsk,{\displaystyle \alpha ={\frac {1}{\mathbf {y} _{k}^{\mathsf {T}}\mathbf {s} _{k}}},}
β=1skTBksk.{\displaystyle \beta =-{\frac {1}{\mathbf {s} _{k}^{\mathsf {T}}B_{k}\mathbf {s} _{k}}}.}

Finalmente, sustituimosα{\displaystyle \alpha }yβ{\displaystyle \beta }enBk+1=Bk+αT+βvvT{\displaystyle B_{k+1}=B_{k}+\alpha \mathbf {u} \mathbf {u} ^{\mathsf {T}}+\beta \mathbf {v} \mathbf {v} ^{\mathsf {T}}}y obtener la ecuación de actualización deBk+1{\displaystyle B_{k+1}}:

Bk+1=Bk+ykykTykTskBkskskTBkTskTBksk.{\displaystyle B_{k+1}=B_{k}+{\frac {\mathbf {y} _{k}\mathbf {y} _{k}^{\mathsf {T}}}{\mathbf {y} _{k}^{\mathsf {T}}\mathbf {s} _{k}}}-{\frac {B_{k}\mathbf {s} _{k}\mathbf {s} _{k}^{\mathsf {T}}B_{k}^{\mathsf {T}}}{\mathbf {s} _{k}^{\mathsf {T}}B_{k}\mathbf {s} _{k}}}.}

Algoritmo

Consideremos el siguiente problema de optimización sin restricciones. minimizarincógnitaRnorteF(incógnita),{\displaystyle {\begin{aligned}{\underset {\mathbf {x} \in \mathbb {R} ^{n}}{\text{minimizar}}}\quad &f(\mathbf {x} ),\end{aligned}}} dóndeF:RnorteR{\displaystyle f:\mathbb {R} ^{n}\to \mathbb {R} }es una función objetivo no lineal y dos veces diferenciable .

A partir de una suposición inicialincógnita0Rnorte{\displaystyle \mathbf {x} _{0}\in \mathbb {R} ^{n}}y una estimación inicial de la matriz hessianaB0Rnorte×norte{\displaystyle B_{0}\in \mathbb {R} ^{n\times n}}Los siguientes pasos se repiten comoincógnitak{\displaystyle \mathbf {x} _{k}}converge a la solución:

  1. Obtén una direcciónpagk{\displaystyle \mathbf {p} _{k}}resolviendoBkpagk=F(incógnitak){\displaystyle B_{k}\mathbf {p} _{k}=-\nabla f(\mathbf {x} _{k})}.
  2. Realizar una optimización unidimensional ( búsqueda lineal ) para encontrar un tamaño de paso aceptable.αk{\displaystyle \alpha _{k}}en la dirección encontrada en el primer paso. Si se realiza una búsqueda lineal exacta, entoncesαk=argminαF(incógnitak+αpagk){\displaystyle \alpha _{k}=\arg \min _{\alpha }f(\mathbf {x} _{k}+\alpha \mathbf {p} _{k})}En la práctica, una búsqueda lineal inexacta suele ser suficiente, con un resultado aceptable.αk{\displaystyle \alpha _{k}}que cumplen las condiciones de Wolfe .
  3. Colocarsk=αkpagk{\displaystyle \mathbf {s} _{k}=\alpha _{k}\mathbf {p} _{k}}y actualizaciónincógnitak+1=incógnitak+sk{\displaystyle \mathbf {x} _{k+1}=\mathbf {x} _{k}+\mathbf {s} _{k}}.
  4. yk=F(incógnitak+1)F(incógnitak){\displaystyle \mathbf {y} _{k}={\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k})}}.
  5. Bk+1=Bk+ykykTykTskBkskskTBkTskTBksk{\displaystyle B_{k+1}=B_{k}+{\frac {\mathbf {y} _{k}\mathbf {y} _{k}^{\mathsf {T}}}{\mathbf {y} _{k}^{\mathsf {T}}\mathbf {s} _{k}}}-{\frac {B_{k}\mathbf {s} _{k}\mathbf {s} _{k}^{\mathsf {T}}B_{k}^{\mathsf {T}}}{\mathbf {s} _{k}^{\mathsf {T}}B_{k}\mathbf {s} _{k}}}}.

La convergencia se puede determinar observando la norma del gradiente; dado algúnϵ>0{\displaystyle \epsilon >0}, se puede detener el algoritmo cuando||F(incógnitak)||ϵ.{\displaystyle ||\nabla f(\mathbf {x} _{k})||\leq \epsilon .}SiB0{\displaystyle B_{0}}se inicializa conB0=I{\displaystyle B_{0}=I}, el primer paso será equivalente a un descenso de gradiente , pero los pasos posteriores se refinan cada vez más medianteBk{\displaystyle B_{k}}, la aproximación al hessiano.

El primer paso del algoritmo se lleva a cabo utilizando la inversa de la matriz.Bk{\displaystyle B_{k}}, que se puede obtener de manera eficiente aplicando la fórmula de Sherman-Morrison al paso 5 del algoritmo, dando como resultado

Bk+11=(IskykTykTsk)Bk1(IykskTykTsk)+skskTykTsk.{\displaystyle B_{k+1}^{-1}=\left(I-{\frac {\mathbf {s} _{k}\mathbf {y} _{k}^{\mathsf {T}}}{\mathbf {y} _{k}^{\mathsf {T}}\mathbf {s} _{k}}}\right)B_{k}^{-1}\left(I-{\frac {\mathbf {y} _{k}\mathbf {s} _{k}^{\mathsf {T}}}{\mathbf {y} _{k}^{\mathsf {T}}\mathbf {s} _{k}}}\right)+{\frac {\mathbf {s} _{k}\mathbf {s} _{k}^{\mathsf {T}}}{\mathbf {y} _{k}^{\mathsf {T}}\mathbf {s} _{k}}}.}

Esto se puede calcular de manera eficiente sin matrices temporales, reconociendo queBk1{\displaystyle B_{k}^{-1}}es simétrico y queykTBk1yk{\displaystyle \mathbf {y} _{k}^{\mathsf {T}}B_{k}^{-1}\mathbf {y} _{k}}yskTyk{\displaystyle \mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k}}son escalares, utilizando una expansión como

Bk+11=Bk1+(skTyk+ykTBk1yk)(skskT)(skTyk)2Bk1ykskT+skykTBk1skTyk.{\displaystyle B_{k+1}^{-1}=B_{k}^{-1}+{\frac {(\mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k}+\mathbf {y} _{k}^{\mathsf {T}}B_{k}^{-1}\mathbf {y} _{k})(\mathbf {s} _{k}\mathbf {s} _{k}^{\mathsf {T}})}{(\mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k})^{2}}}-{\frac {B_{k}^{-1}\mathbf {y} _{k}\mathbf {s} _{k}^{\mathsf {T}}+\mathbf {s} _{k}\mathbf {y} _{k}^{\mathsf {T}}B_{k}^{-1}}{\mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k}}}.}

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:Hk=definiciónBk1.{\displaystyle H_{k}{\overset {\operatorname {def} }{=}}B_{k}^{-1}.}[ 10 ]

A partir de una suposición inicialincógnita0{\displaystyle \mathbf {x} _{0}}y una matriz hessiana invertida aproximadaH0{\displaystyle H_{0}}Los siguientes pasos se repiten comoincógnitak{\displaystyle \mathbf {x} _{k}}converge a la solución:

  1. Obtén una direcciónpagk{\displaystyle \mathbf {p} _{k}}resolviendopagk=HkF(incógnitak){\displaystyle \mathbf {p} _{k}=-H_{k}\nabla f(\mathbf {x} _{k})}.
  2. Realizar una optimización unidimensional ( búsqueda lineal ) para encontrar un tamaño de paso aceptable.αk{\displaystyle \alpha _{k}}en la dirección encontrada en el primer paso. Si se realiza una búsqueda lineal exacta, entoncesαk=argminαF(incógnitak+αpagk){\displaystyle \alpha _{k}=\arg \min _{\alpha }f(\mathbf {x} _{k}+\alpha \mathbf {p} _{k})}En la práctica, una búsqueda lineal inexacta suele ser suficiente, con un resultado aceptable.αk{\displaystyle \alpha _{k}}que cumplen las condiciones de Wolfe .
  3. Colocarsk=αkpagk{\displaystyle \mathbf {s} _{k}=\alpha _{k}\mathbf {p} _{k}}y actualizaciónincógnitak+1=incógnitak+sk{\displaystyle \mathbf {x} _{k+1}=\mathbf {x} _{k}+\mathbf {s} _{k}}.
  4. yk=F(incógnitak+1)F(incógnitak){\displaystyle \mathbf {y} _{k}={\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k})}}.
  5. Hk+1=Hk+(skTyk+ykTHkyk)(skskT)(skTyk)2HkykskT+skykTHkskTyk{\displaystyle H_{k+1}=H_{k}+{\frac {(\mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k}+\mathbf {y} _{k}^{\mathsf {T}}H_{k}\mathbf {y} _{k})(\mathbf {s} _{k}\mathbf {s} _{k}^{\mathsf {T}})}{(\mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k})^{2}}}-{\frac {H_{k}\mathbf {y} _{k}\mathbf {s} _{k}^{\mathsf {T}}+\mathbf {s} _{k}\mathbf {y} _{k}^{\mathsf {T}}H_{k}}{\mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k}}}}.

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.skTyk{\displaystyle \mathbf {s} _{k}^{\mathsf {T}}\mathbf {y} _{k}}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 modificansk{\displaystyle \mathbf {s} _{k}}y/oyk{\displaystyle \mathbf {y} _{k}}para 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

  1. Fletcher, Roger (1987), Métodos prácticos de optimización (2.ª  ed.), Nueva York: John Wiley & Sons , ISBN 978-0-471-91547-8
  2. 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
  3. 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 
  4. 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
  5. 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
  6. 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
  7. 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 
  8. 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 . 
  9. Fletcher, Roger (1987), Métodos prácticos de optimización (2.ª ed.), Nueva York: John Wiley & Sons , ISBN  978-0-471-91547-8
  10. Nocedal, Jorge; Wright, Stephen J. (2006), Optimización numérica (2.ª ed.), Berlín, Nueva York: Springer-Verlag , ISBN  978-0-387-30303-1
  11. 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 . 
  12. Jorge Nocedal; Stephen J. Wright (2006), Optimización numérica
  13. "Biblioteca Científica GNU — Documentación GSL 2.6" . www.gnu.org . Consultado el 22 de noviembre de 2020 .
  14. "R: Optimización de propósito general" . stat.ethz.ch. Consultado el 22 de noviembre de 2020 .
  15. "scipy.optimize.fmin_bfgs — Guía de referencia de SciPy v1.5.4" . docs.scipy.org . Consultado el 22 de noviembre de 2020 .
  16. "scipy.optimize.minimize — Guía de referencia de SciPy v1.5.4" . docs.scipy.org . Consultado el 22 de enero de 2025 .
  17. "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