BFGS de memoria limitada ( L-BFGS o LM-BFGS ) es un algoritmo de optimización de la familia de métodos cuasi-Newton que se aproxima al algoritmo Broyden–Fletcher–Goldfarb–Shanno (BFGS) utilizando una cantidad limitada de memoria de computadora . [1] Es un algoritmo popular para la estimación de parámetros en el aprendizaje automático . [2] [3] El problema objetivo del algoritmo es minimizar sobre valores sin restricciones del vector real donde es una función escalar diferenciable.
Al igual que el BFGS original, L-BFGS utiliza una estimación de la matriz hessiana inversa para dirigir su búsqueda a través del espacio de variables, pero donde BFGS almacena una aproximación densa a la hessiana inversa ( siendo n el número de variables en el problema), L-BFGS almacena solo unos pocos vectores que representan la aproximación implícitamente. Debido a su requisito de memoria lineal resultante, el método L-BFGS es particularmente adecuado para problemas de optimización con muchas variables. En lugar de la hessiana inversa H k , L-BFGS mantiene un historial de las m actualizaciones pasadas de la posición x y el gradiente ∇ f ( x ), donde generalmente el tamaño del historial m puede ser pequeño (a menudo ). Estas actualizaciones se utilizan para realizar implícitamente operaciones que requieren el producto H k -vector.
El algoritmo comienza con una estimación inicial del valor óptimo, , y procede iterativamente a refinar esa estimación con una secuencia de mejores estimaciones . Las derivadas de la función se utilizan como un factor clave del algoritmo para identificar la dirección del descenso más pronunciado y también para formar una estimación de la matriz hessiana (segunda derivada) de .
L-BFGS comparte muchas características con otros algoritmos cuasi-Newton, pero es muy diferente en la forma en que se lleva a cabo la multiplicación matriz-vector, donde es la dirección aproximada de Newton, es el gradiente actual y es la inversa de la matriz de Hesse. Existen múltiples enfoques publicados que utilizan un historial de actualizaciones para formar este vector de dirección. Aquí, presentamos un enfoque común, la denominada "recursión de dos bucles". [4] [5]
Tomamos como dada la posición en la k -ésima iteración y donde es la función que se está minimizando y todos los vectores son vectores columna. También asumimos que hemos almacenado las últimas m actualizaciones de la forma
Definimos , y será la aproximación 'inicial' del hessiano inverso con el que comienza nuestra estimación en la iteración k .
El algoritmo se basa en la recursión BFGS para el hessiano inverso como
Para una k fija definimos una secuencia de vectores como y . Luego, un algoritmo recursivo para calcular a partir de es definir y . También definimos otra secuencia de vectores como . Hay otro algoritmo recursivo para calcular estos vectores que es definir y luego definir recursivamente y . El valor de es entonces nuestra dirección de ascenso.
De esta manera podemos calcular la dirección de descenso de la siguiente manera:
Esta formulación proporciona la dirección de búsqueda para el problema de minimización, es decir, . Para los problemas de maximización, se debería tomar -z en su lugar. Nótese que la matriz hessiana inversa aproximada inicial se elige como una matriz diagonal o incluso un múltiplo de la matriz identidad, ya que esto es numéricamente eficiente.
El escalado de la matriz inicial garantiza que la dirección de búsqueda esté bien escalada y, por lo tanto, la longitud del paso unitario se acepta en la mayoría de las iteraciones. Se utiliza una búsqueda de línea de Wolfe para garantizar que se cumpla la condición de curvatura y que la actualización de BFGS sea estable. Tenga en cuenta que algunas implementaciones de software utilizan una búsqueda de línea de retroceso Armijo , pero no pueden garantizar que la condición de curvatura se cumpla con el paso elegido, ya que puede ser necesaria una longitud de paso mayor que para satisfacer esta condición. Algunas implementaciones abordan esto omitiendo la actualización de BFGS cuando es negativo o demasiado cercano a cero, pero este enfoque generalmente no se recomienda ya que las actualizaciones pueden omitirse con demasiada frecuencia para permitir que la aproximación hessiana capture información de curvatura importante. Algunos solucionadores emplean la llamada actualización (L)BFGS amortiguada que modifica cantidades y para satisfacer la condición de curvatura.
La fórmula de recursión de dos bucles es ampliamente utilizada por optimizadores sin restricciones debido a su eficiencia en la multiplicación por el hessiano inverso. Sin embargo, no permite la formación explícita ni del hessiano directo ni del inverso y es incompatible con restricciones que no sean de caja. Un enfoque alternativo es la representación compacta , que implica una representación de bajo rango para el hessiano directo y/o inverso. [6] Esto representa el hessiano como una suma de una matriz diagonal y una actualización de bajo rango. Tal representación permite el uso de L-BFGS en entornos restringidos, por ejemplo, como parte del método SQP.
Se ha dicho que L-BFGS es "el algoritmo de elección" para ajustar modelos log-lineales (MaxEnt) y campos aleatorios condicionales con -regularización . [2] [3]
Dado que BFGS (y, por lo tanto, L-BFGS) está diseñado para minimizar funciones suaves sin restricciones , el algoritmo L-BFGS debe modificarse para manejar funciones que incluyen componentes o restricciones no diferenciables . Una clase popular de modificaciones se denomina métodos de conjunto activo, basados en el concepto de conjunto activo . La idea es que cuando se restringe a un pequeño vecindario de la iteración actual, la función y las restricciones se pueden simplificar.
El algoritmo L-BFGS-B extiende L-BFGS para manejar restricciones de caja simples (también conocidas como restricciones de límite) en variables; es decir, restricciones de la forma l i ≤ x i ≤ u i donde l i y u i son límites inferior y superior constantes por variable, respectivamente (para cada x i , se pueden omitir uno o ambos límites). [7] [8] El método funciona identificando variables fijas y libres en cada paso (usando un método de gradiente simple), y luego usando el método L-BFGS solo en las variables libres para obtener mayor precisión, y luego repitiendo el proceso.
El quasi-Newton de memoria limitada orthant-wise ( OWL-QN ) es una variante de L-BFGS para ajustar modelos regularizados , que explota la escasez inherente de dichos modelos. [3] Minimiza funciones de la forma
donde es una función de pérdida convexa diferenciable . El método es un método de tipo conjunto activo: en cada iteración, estima el signo de cada componente de la variable y restringe el paso posterior para que tenga el mismo signo. Una vez que se fija el signo, el término no diferenciable se convierte en un término lineal suave que puede manejarse mediante L-BFGS. Después de un paso L-BFGS, el método permite que algunas variables cambien de signo y repite el proceso.
Schraudolph et al. presentan una aproximación en línea tanto para BFGS como para L-BFGS. [9] De manera similar al descenso de gradiente estocástico , esto se puede utilizar para reducir la complejidad computacional evaluando la función de error y el gradiente en un subconjunto extraído aleatoriamente del conjunto de datos general en cada iteración. Se ha demostrado que O-LBFGS tiene una convergencia global casi segura [10] mientras que la aproximación en línea de BFGS (O-BFGS) no es necesariamente convergente. [11]
Las implementaciones de código abierto notables incluyen:
optim
La rutina optimizadora de propósito general de R utiliza el método L-BFGS-B.Entre las implementaciones notables que no son de código abierto se incluyen: