El descenso de gradiente y muchos otros métodos son útiles para encontrar mínimos locales en las funciones de costos. Pueden ser eficientes cuando la función de costo se puede evaluar rápidamente en cada punto, ya sea numérica o analíticamente.
Tengo lo que me parece una situación inusual. Cada evaluación de mi función de costos es costosa. Estoy tratando de encontrar un conjunto de parámetros que minimicen una superficie 3D contra las superficies de verdad del suelo. Cada vez que cambio un parámetro, necesito ejecutar el algoritmo contra toda la cohorte de muestra para medir su efecto. Para calcular un gradiente, necesito cambiar los 15 parámetros de forma independiente, lo que significa que tengo que regenerar todas las superficies y compararlas con la cohorte de muestra demasiadas veces por gradiente, y definitivamente demasiadas veces en el transcurso de la optimización.
He desarrollado un método para sortear este problema y actualmente lo estoy evaluando, pero me sorprende que no haya encontrado mucho en la literatura sobre las costosas evaluaciones de la función de costos. Esto me hace preguntarme si estoy haciendo que el problema sea más difícil de lo que es y que podría haber una mejor manera ya disponible.
Entonces, mis preguntas son básicamente las siguientes: ¿Alguien sabe de métodos para optimizar las funciones de costos, convexas o no, cuando la evaluación es lenta? O, ¿estoy haciendo algo tonto en primer lugar al volver a ejecutar el algoritmo y compararlo con la muestra de cohorte tantas veces?
fuente
Respuestas:
TL; DR
Recomiendo usar LIPO. Es demostrablemente correcto y probablemente mejor que la búsqueda aleatoria pura (PRS). También es extremadamente simple de implementar y no tiene hiperparámetros. No he realizado un análisis que compare LIPO con BO, pero mi expectativa es que la simplicidad y eficiencia de LIPO implica que superará a BO.
(Ver también: ¿Cuáles son algunas de las desventajas de la optimización de hiperparámetros bayesianos? )
Optimización Bayesiana
Los métodos de optimización bayesiana crean modelos sustitutos de procesos gaussianos para explorar el espacio de parámetros. La idea principal es que las tuplas de parámetros que están más juntas tendrán valores de función similares, por lo que la suposición de una estructura de covarianza entre puntos permite al algoritmo hacer conjeturas educadas sobre cuál es la mejor tupla de parámetros que vale la pena probar a continuación. Esta estrategia ayuda a reducir el número de evaluaciones de funciones; de hecho, la motivación de los métodos BO es mantener el número de evaluaciones de funciones lo más bajo posible mientras se "usa todo el búfalo" para hacer buenas suposiciones sobre qué punto probar a continuación. Existen diferentes cifras de mérito (mejora esperada, mejora cuantil esperada, probabilidad de mejora ...) que se utilizan para comparar los puntos a visitar a continuación.
Compare esto con algo así como una búsqueda de cuadrícula, que nunca usará ninguna información de sus evaluaciones de funciones anteriores para informar a dónde ir después.
Por cierto, esta también es una poderosa técnica de optimización global , y como tal no hace suposiciones sobre la convexidad de la superficie. Además, si la función es estocástica (por ejemplo, las evaluaciones tienen un ruido aleatorio inherente), esto puede explicarse directamente en el modelo GP.
Por otro lado, tendrá que ajustar al menos un GP en cada iteración (o varias, eligiendo el "mejor", o promediando las alternativas, o métodos completamente bayesianos). Luego, el modelo se usa para hacer (probablemente miles) de predicciones, generalmente en forma de optimización local de varios pasos, con la observación de que es mucho más barato evaluar la función de predicción GP que la función bajo optimización. Pero incluso con esta sobrecarga computacional, tiende a darse el caso de que incluso las funciones no convexas se pueden optimizar con un número relativamente pequeño de llamadas a funciones.
Un artículo ampliamente citado sobre el tema es Jones et al. , "Optimización global eficiente de costosas funciones de caja negra". Pero hay muchas variaciones en esta idea.
Búsqueda aleatoria
Incluso cuando la función de costo es costosa de evaluar, la búsqueda aleatoria puede ser útil. La búsqueda aleatoria es muy simple de implementar. La única opción que debe tomar un investigador es establecer la probabilidad que desee que sus resultados se encuentren en un cuantil ; el resto procede automáticamente usando resultados de probabilidad básica.qp q
Suponga que su cuantil es y desea una probabilidad de que los resultados del modelo se encuentren en el top por ciento de todas las tuplas de hiperparámetros. La probabilidad de que todas las tuplas intentadas no estén en esa ventana es (porque se eligen independientemente al azar de la misma distribución), por lo que la probabilidad de que al menos una tupla esté en esa región es . Poniendo todo junto, tenemosp = 0.95 100 × ( 1 - q ) = 5 n q n = 0.95 n 1 - 0.95 nq=0.95 p=0.95 100×(1−q)=5 n qn=0.95n 1−0.95n
que en nuestro caso específico produce .n≥59
Este resultado es la razón por la cual la mayoría de las personas recomiendan intentos de tuplas para la búsqueda aleatoria. Vale la pena señalar que es comparable al número de experimentos necesarios para obtener buenos resultados con los métodos basados en el Proceso Gaussiano cuando hay un número moderado de parámetros. A diferencia de los procesos gaussianos, el número de tuplas de consultas no cambia con el número de hiperparámetros para buscar; de hecho, para una gran cantidad de hiperparámetros, un método gaussiano basado en procesos puede tomar muchas iteraciones para avanzar.n = 60n=60 n=60
Dado que tiene una garantía probabilística de cuán buenos son los resultados, puede ser una herramienta persuasiva para convencer a su jefe de que no es necesario realizar más experimentos.
LIPO y sus variantes
Esta es una llegada emocionante que, si no es nueva , ciertamente es nueva para mí. Continúa alternando entre colocar límites informados en la función y muestrear desde el mejor límite, y usar aproximaciones cuadráticas. Todavía estoy trabajando en todos los detalles, pero creo que esto es muy prometedor. Este es un buen artículo escrito en un blog , y el documento es Cédric Malherbe y Nicolas Vayatis " Optimización global de las funciones de Lipschitz ".
fuente
La literatura sobre la evaluación de la costosa función de recuadro negro es bastante amplia y generalmente se basa en métodos de modelos sustitutos, como señalaron otras personas. El cuadro negro aquí significa que se sabe poco acerca de la función subyacente, lo único que puede hacer es evaluar en un punto elegido (los gradientes generalmente no están disponibles).xf(x) x
Yo diría que el estándar de oro actual para la evaluación de la función de caja negra (muy) costosa es la optimización bayesiana (BO) (global ). Sycorax ya describió algunas características de BO, así que solo estoy agregando información que podría ser útil.
Como punto de partida, es posible que desee leer este documento general 1 . También hay uno más reciente [2].
La optimización bayesiana ha crecido constantemente como un campo en los últimos años, con una serie de talleres dedicados (por ejemplo, BayesOpt , y mira estos videos del taller de Sheffield sobre BO), ya que tiene aplicaciones muy prácticas en el aprendizaje automático, como para optimizar los hiperparámetros de los algoritmos de ML: consulte, por ejemplo, este documento [3] y la caja de herramientas relacionada, SpearMint . Hay muchos otros paquetes en varios idiomas que implementan varios tipos de algoritmos de optimización bayesianos.
Como mencioné, el requisito subyacente es que cada evaluación de la función es muy costosa, por lo que los cálculos relacionados con BO agregan una sobrecarga insignificante. Para dar un estadio, BO puede ser definitivamente útil si su función se evalúa en un tiempo del orden de minutos o más. También puede aplicarlo para cálculos más rápidos (por ejemplo, decenas de segundos), pero dependiendo del algoritmo que use, puede que tenga que adoptar varias aproximaciones. Si su función se evalúa en la escala de tiempo de segundos , creo que está alcanzando los límites de la investigación actual y quizás otros métodos podrían ser más útiles. Además, tengo que decir que BO rara vez es realmente un recuadro negro y a menudo tienes que ajustar los algoritmos, a veces mucho , para que funcione a pleno potencial con un problema específico del mundo real.
BO aparte, para una revisión de los métodos generales de optimización sin derivación, puede echar un vistazo a esta revisión [4] y buscar algoritmos que tengan buenas propiedades de convergencia rápida. Por ejemplo, la búsqueda de coordenadas multinivel (MCS) generalmente converge muy rápidamente a un mínimo de vecindad (no siempre el mínimo global, por supuesto). MCS está pensado para la optimización global, pero puede hacerlo local estableciendo restricciones de límite apropiadas.
Finalmente, está interesado en BO para funciones de destino que son costosas y ruidosas , vea mi respuesta a esta pregunta .
Referencias
1 Brochu et al., "Un tutorial sobre optimización bayesiana de funciones de costos costosos, con aplicación al modelado de usuarios activos y aprendizaje jerárquico de refuerzo" (2010).
[2] Shahriari et al., "Sacando al ser humano del círculo: una revisión de la optimización bayesiana" (2015).
[3] Snoek et al., "Optimización práctica bayesiana de algoritmos de aprendizaje automático", NIPS (2012).
[4] Rios y Sahinidis, "Optimización libre de derivados: una revisión de algoritmos y comparación de implementaciones de software", Journal of Global Optimization (2013).
fuente
Yo mismo no conozco los algoritmos, pero creo que el tipo de algoritmo de optimización que está buscando es la optimización sin derivación , que se utiliza cuando el objetivo es costoso o ruidoso .
Por ejemplo, eche un vistazo a este documento (Björkman, M. & Holmström, K. "Optimización global de costosas funciones no convexas utilizando funciones de base radial". Optimización e ingeniería (2000) 1: 373. doi: 10.1023 / A: 1011584207202) cuyo resumen parece indicar que esto es exactamente lo que quieres:
fuente
No estas solo.
Los sistemas costosos de evaluar son muy comunes en ingeniería, como los modelos de método de elementos finitos (FEM) y los modelos de dinámica de fluidos computacional (CFD). La optimización de estos modelos computacionalmente caros es muy necesaria y desafiante porque los algoritmos evolutivos a menudo necesitan decenas de miles de evaluaciones del problema, lo que no es una opción para problemas costosos de evaluar. Afortunadamente, hay muchos métodos (algoritmos) disponibles para resolver este problema. Hasta donde yo sé, la mayoría de ellos se basan en modelos sustitutos (metamodelos). Algunos se enumeran a continuación.
En resumen, estos algoritmos de optimización basados en sustitutos intentan encontrar el óptimo global del problema utilizando la menor cantidad de evaluaciones posible. Esto se logra haciendo un uso completo de la información que proporciona el sustituto (sustitutos). Las revisiones sobre la optimización de problemas computacionalmente caros se encuentran en [4-6].
Referencia:
fuente
Las dos estrategias simples que he usado con éxito en el pasado son:
Esas estrategias son muy específicas para cada caso, no sé si pueden ser aplicables en su caso o no, lo siento si no lo son. Ambos podrían ser aplicables (como lo fue en mis casos de uso): aplique la estrategia de "costo delta" a un modelo analítico más simple: el rendimiento puede mejorar en varios órdenes de magnitud.
Otra estrategia sería utilizar un método de segundo orden que normalmente tiende a reducir el número de iteraciones (pero cada iteración es más compleja), por ejemplo, el algoritmo Levenberg-Marquardt . Pero teniendo en cuenta que no parece tener una forma de evaluar el gradiente de manera directa y eficiente, probablemente esta no sea una opción viable en este caso.
fuente
Como otras personas mencionaron, un modelo sustituto (también llamado superficie de respuesta) es un enfoque poderoso. En mi opinión, una cosa crucial que la gente olvida es que puede realizar varias evaluaciones de funciones en paralelo , si usa CPU multinúcleo.
Sugeriría mirar este código , usa un modelo de respuesta simple, pero se escala en CPU multinúcleo, lo que da una aceleración igual a la cantidad de núcleos utilizados. En este artículo se describe una matemática detrás del método .
fuente
Hay muchos trucos utilizados en el descenso de gradiente estocástico que también se pueden aplicar a la evaluación de la función objetivo. La idea general es tratar de aproximar la función objetivo utilizando un subconjunto de datos .
Mis respuestas en estas dos publicaciones discuten por qué funciona el descenso de gradiente estocástico: la intuición detrás de esto es aproximar el gradiente usando un subconjunto de datos.
¿Cómo podría el descenso de gradiente estocástico ahorrar tiempo en comparación con el descenso de gradiente estándar?
¿Cómo ejecutar la regresión lineal de forma paralela / distribuida para la configuración de Big Data?
El mismo truco se aplica a la función objetivo.
Sigamos usando la regresión lineal como ejemplo: supongamos que la función objetivo es . Si es enorme, digamos un billón de filas, evaluarlo una vez llevará mucho tiempo. Siempre podemos usar un subconjunto de y para aproximar la función objetivo, que es la pérdida al cuadrado en el subconjunto de datos.∥Ax−b∥2 A A b
fuente