2 votos

¿Qué algoritmos de optimización son mejores para atravesar geometrías complicadas y qué compensaciones existen entre los distintos algoritmos?

Hola a todos :] así que la versión corta es sólo el título, y específicamente en lo que respecta a los algoritmos incluidos en R's optimx::optimx() en method = es decir: Nelder-Mead', 'BFGS', 'CG', 'L-BFGS-B', 'nlm', 'nlminb', 'spg', 'ucminf', 'newuoa', 'bobyqa', 'nmkb', 'hjkb', 'Rcgmin', y 'Rvmmin' . Tengo una idea general de cómo funcionan algunos de ellos, pero en aplicaciones del mundo real algunos tardan más en ejecutarse que otros y no estoy muy seguro de cuándo ese tiempo extra está justificado o no. Es de suponer que ninguno de ellos es estrictamente mejor que otro, si no, ¿para qué molestarse en incluirlos en el paquete?

En concreto, me interesa saber cuáles son los mejores para atravesar geometrías especialmente complicadas llenas de óptimos locales en múltiples dimensiones. Además, ¿cuáles son las mejores formas de mejorar el rendimiento y la estabilidad de la optimización en este contexto? Por ejemplo, un truco común en la filogenética bayesiana es elevar la probabilidad a alguna potencia entre (0,1) para proporcionar una distribución de propuesta más flexible durante MC3 (es decir, 'monte carlo de cadena de markov acoplada a metrópolis'). Estas cadenas 'calentadas' pueden atravesar los espacios entre los máximos locales con más facilidad... pero no estoy seguro de si eso se aplicaría con diferentes algoritmos de optimización o cuándo. ¿Alguna idea? También puedo simplemente volver a ejecutar el algoritmo de optimización muchas veces y tomar el mínimo de las ejecuciones, pero eso es costoso.


OK, versión más larga de la pregunta con la motivación / fondo actual. A menudo me encuentro en la posición de tener que visualizar los datos con alguna propiedad discreta que quiero codificar en la visualización de datos utilizando el color. Hay un montón de paletas de colores discretos por ahí, por ejemplo, en los paquetes de RColorBrewer o wesanderson . A veces, sin embargo, quiero utilizar una paleta específica, pero tiene muy pocos colores -- por ejemplo, hay 9 colores incluidos en "Set1" en RColorBrewer, y necesito 12. Así que traté de escribir un pequeño script para encontrar nuevos colores para añadir a un espacio de color discreto existente que maximice la separación de los colores existentes. Pero parece que tiende a quedarse atascado en mínimos locales, a juzgar por el hecho de que las ejecuciones separadas de optimx() devuelven valores diferentes, cada uno informando alegremente de la convergencia. Por ejemplo, aquí hay tres ejecuciones separadas de mi script con inicialización aleatoria de parámetros de color a partir de normales iid:

enter image description here

No es un problema de optimización ridículamente alta D - en esta aplicación, cada uno de mis seis "nuevos colores" vive en un reescalado y logit-transformado tono-saturación-luminosidad espacio de color, mi función objetivo es la media armónica distancia euclídea a todos los demás colores (tanto existentes como propuestos) en el espacio cartesiano (convertido de cilíndrica), Tengo una penalización doble exponencial débil centrada en 0 para ayudar a regularizar en caso de que un color realmente ocupe los valores límite para que la optimización no persiga el infinito sin límite, y estoy tomando el mínimo de múltiples ejecuciones de optimx y explorar el rendimiento de los distintos métodos incluidos en él.

Algunas otras notas:

En los ejemplos anteriores, los círculos son colores existentes y los cuadrados son colores propuestos; el tamaño de esos puntos es proporcional a su luminosidad; y su ubicación viene dada por algún ángulo [matiz] y radio [saturación] en un círculo de luminosidad = 50%.

Existe un problema general de "no identificabilidad" entre los nuevos colores propuestos. Intenté resolverlo tomando mi vector de colores y exponenciando y sumando acumulativamente todos sus valores de luminosidad, excepto el primero, antes de aplicar el logaritmo inverso al espacio de color HSL, para que el primer color fuera el más oscuro y cada uno de los siguientes, más claro que el anterior.

Si se añade sólo un color en 3D, una búsqueda en cuadrícula podría funcionar bien, y supongo que podría haber garantías teóricas de cómo de pobre puede ser el rendimiento máximo de algún algoritmo codicioso, pero no creo que encontrar un óptimo en 18 (o las que sean) dimensiones sea mucho pedir.

Probé otros tipos de medias (geométricas, aritméticas) y otros tipos de funciones (por ejemplo, maximizar la distancia mínima a un punto), pero me pareció que la armónica era la más intuitivamente satisfactoria.

También tengo algunos otros botones que, por ejemplo, reducen y amplían la separación entre puntos en las dimensiones de luminosidad y saturación, ya que mi intuición es que el tono es más importante para separar los colores a simple vista, y otro que hace que la optimización prefiera puntos que sean más similares en luminosidad y saturación a los puntos existentes, ya que no serviría de nada tener una paleta agradable, tenue y terrosa y obtener una sugerencia de rosa neón, o un montón de pasteles que te digan oye, el azul oscuro quedaría muy contrastado aquí.

Si consigo que esta versión más sencilla funcione correctamente, también podría intentar ponderar el espectro de luz visible sobre el del ojo humano función de luminosidad fotópica para que la distancia angular se integre / transforme de acuerdo con esas curvas, o intente meter también algo de ponderación del daltonismo).

Gracias por su ayuda.

0voto

user777 Puntos 10934

Los criterios de convergencia sólo comprueban si el algoritmo ha encontrado un óptimo local. Como has descubierto, esta tarea no es convexa, por lo que hay múltiples óptimos locales. Los optimizadores que estás utilizando son todos optimizadores locales, por lo que sólo encontrarán una solución globalmente óptima por casualidad.

Cuando la función objetivo es barata y la precisión no es primordial, puede hacer lo que ya está haciendo: ejecutar un optimizador local varias veces y elegir la mejor. Esto se llama a veces "multiarranque".

Alternativamente, si la función de coste es cara, puede probar uno de los métodos de Optimización cuando la función de costes es lenta de evaluar . Para decidir si un óptimo local es también un óptimo global, tendrá que demostrar que el óptimo global es al menos tan extremo como cualquier otro óptimo local. En general, esto es difícil. Cada una de las estrategias de la Pregunta enlazada tiene su propia heurística que se utiliza para informar la búsqueda.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X