Optimización de Hiperparámetros

Publicado por Ferran Pla - 03/06/2019

En aprendizaje automático (Machine Learning), durante el proceso de aprendizaje se evalúan y mejoran numerosos parámetros. Por el contrario, un hiperparámetro es una variable cuyo valor se establece antes del entrenamiento, por lo que ni se evalúa ni se corrige.

En este post explico diferentes enfoques empleados para llevar a cabo optimización de hiperparámetros con ayuda de unos cuantos ejemplos visuales. Intento ceñirme a ecuaciones sencillas, y aporto enlaces a artículos originales por si el lector desea conocer más detalles. También ofrezco una comparación de su desempeño en distintos espacios simulados de hiperparámetros.  

Introducción

Los modelos de redes neuronales son excepcionalmente eficaces y maleables, lo que es a la vez una bendición y una maldición. Aunque las redes neuronales son capaces de resolver numerosos problemas complejos, también están compuestas por una abrumadora cantidad de configuraciones. A menudo, la capacidad de elegir el conjunto adecuado de parámetros del modelo es lo que determina si la red puede acometer tareas difíciles.

El éxito en el aprendizaje profundo se consigue, especialmente, gracias a la posibilidad de usar el algoritmo de retropropagación para calcular eficientemente el gradiente de una función objetiva para cada parámetro del modelo. En nuestra mano está diseñar el marco en que aprenderá la red. En la mayor parte de los casos, debemos determinar:

  • Ingeniería de funciones: La calidad y cantidad de las funciones extraídas de nuestros datos son esenciales, e influirán radicalmente en los resultados que vamos a conseguir. Es un proceso difícil y caro, que a menudo se aborda mediante la utilización de nuestro conocimiento de los dominios (ej., cuando tratamos con un objeto que se mueve, tanto la velocidad como la aceleración son buenas candidatas a función).
  • Arquitectura del modelo: Debemos afrontar el problema de elegir el algoritmo más apropiado para nuestro problema concreto. Existen muchos algoritmos disponibles, y cada uno de ellos ofrece multitud de hiperparámetros que deben ajustarse. La búsqueda de soluciones en problemas similares puede ser un buen punto de partida, pero no es infrecuente que no se consigan los resultados más adecuados y sea necesario efectuar ajustes.
  • Configuración del entrenamiento: La eficiencia del aprendizaje del algoritmo vendrá determinada por la configuración del entrenamiento.
  • Método de evaluación: Con el fin de elegir el mejor modelo, debe definirse un método de comparación que determine la idoneidad de los modelos (ej., a menudo se emplean métricas como precisión y ROC AUC sobre las configuraciones de prueba para comparar modelos).

Por tanto, es necesario tomar una amplia variedad de decisiones antes del proceso de entrenamiento y evaluación. Al combinar todas estas decisiones en un espacio multidimensional y definir una función a partir de este espacio para nuestra métrica de evaluación, nuestro objetivo es seleccionar un conjunto de decisiones óptimas, de modo que nuestro algoritmo de aprendizaje sea el más adecuado. Sin embargo, este espacio no es una estructura algebraica en que se puedan definir muchas dimensiones, ni siquiera operaciones (ej., a la hora de decidir si usar una Red Neuronal Convolucional o una Red Secuencial, no existe una operación definida entre ellas; a diferencia del espacio de decisión de la tasa de aprendizaje, un número real en un Espacio de Cauchy, en que tenemos operaciones de suma y multiplicación definidas).

Para simplificar, centrémonos en el proceso después de haber establecido ya la ingeniería de funciones y el algoritmo de aprendizaje, es decir, en la optimización de hiperparámetros. La optimización, o perfeccionamiento de parámetros, es el problema de elegir el conjunto de hiperparámetros óptimos para un algoritmo de aprendizaje.

 

Enfoques en optimización de hiperparámetros

Con el fin de explicar los métodos visualmente, utilizaré una sencilla función de prueba para optimización como una hipotética función de caja negra que representa la métrica final sobre el método de evaluación definido dada una configuración determinada. En este caso, nuestra configuración es un solo hiperparámetro: tasa de aprendizaje, y la métrica de evaluación es la exactitud a lo largo del conjunto de pruebas:

equation

donde lambda es la tasa de aprendizaje, y deseamos maximizar el valor de la función (que representa la exactitud). Las estrategias que se muestran son aplicables a espacios mixtos (numéricos y categóricos), a menos que se indique lo contrario.

El aspecto esencial es contar con un conjunto ordenado y, en caso de una variable categórica, el redondeo e indexado de la muestra de parámetros respecto al conjunto actual cumple la extensión.

Búsqueda en cuadrícula

Este es el método tradicional de llevar a cabo la optimización de hiperparámetros: la búsqueda en cuadrícula o barrido de parámetros, que es, simplemente, una búsqueda que funciona por fuerza bruta a través de un subconjunto del espacio de hiperparámetros especificado manualmente. En nuestro ejemplo, definimos manualmente los siguientes 5 valores de tasa de aprendizaje y evaluamos, guardando el mejor resultado.

valores_lambda

grid_search-1

Lo que significa que la búsqueda en cuadrícula entrenaría un modelo con cada uno de los valores de tasa de aprendizaje y daría como resultado la tasa que consiguiera la puntuación más alta en el método de evaluación definido; en nuestro ejemplo, el resultado sería 1r = 0,5. Existe, no obstante, una decisión que hay que tomar antes de la exploración: debemos definir la cuadrícula manualmente, lo que no solo es cuestión de la cantidad de evaluaciones (en nuestro caso, 5 muestras), sino también una cuestión de escala en función de hiperparámetro que se ajusta (ej., la tasa de aprendizaje normalmente se muestrea a escala logarítmica y tiene un amplísimo dominio de utilidades).

Obviamente, la búsqueda en cuadrícula sufre la maldición de la dimensionalidad teniendo en cuenta la independencia del hiperparámetro de cada iteración, el proceso se paraleliza siempre que es posible.

En este enlace puede encontrarse una guía sobre máquinas de soporte vectorial que utilizan búsqueda en cuadrícula.

 

Búsqueda aleatoria

La búsqueda aleatoria muestrea valores seleccionados aleatoriamente del dominio de los hiperparámetros. Puede aplicarse a una configuración discreta definida manualmente como se describía anteriormente, pero también se generaliza bien en espacios continuos y mixtos. Es necesario definir un mecanismo de terminación, normalmente mediante el establecimiento de un número de iteraciones o estableciendo un límite objetivo a conseguir. Funciona bien cuando el problema de optimización tiene una baja dimensionalidad intrínseca En nuestro ejemplo, las muestras se seleccionan aleatoriamente dentro del dominio mediante una distribución uniforme y estableciendo el límite a una exactitud del 0,99: 

random_search

La búsqueda aleatoria también permite paralelismo, así como compartir la maldición de la dimensionalidad con el método de búsqueda en cuadrícula; además, permite incluir los conocimientos previos especificando la distribución a partir de la que muestrear.

En este enlace hay un ejemplo del uso académico de este método.

 

Optimización bayesiana

La optimización bayesiana es una metodología para llevar a cabo la optimización global de funciones de caja negra multimodales. Como tal, es aplicable a la optimización de hiperparámetros. Combina 4 pasos:

  • Elegir alguna medida previa en el espacio de posibles funciones de métodos de evaluación. Como se desconoce nuestra función objetiva (métrica de evaluación sobre la función de configuraciones), este paso supone tratarla como una función aleatoria con una distribución previa seleccionada. Esto captura nuestras creencias sobre el comportamiento de la función (ej., a menudo se utiliza una distribución gaussiana multivariable).
  • Combinar la distribución previa con algunas observaciones dadas (configuraciones probadas) para obtener una distribución posterior en el objetivo (estimación de dónde reside la verdadera función).
  • Usar la distribución posterior para decidir dónde probar la siguiente configuración según alguna función de adquisición. Una función de adquisición es una herramienta que nos dice la configuración a probar en que se conseguirá la mayor cantidad de información.
  • Evaluar la configuración seleccionada en el paso 3. 

Después de haber probado algunas configuraciones iniciales (al menos 2) y haber concluido por primera vez todos los pasos, iterar entre 2 y 4 hasta que se activa el mecanismo de terminación y se cierra la optimización bayesiana.

Sin algunos conocimientos estadísticos, el proceso podría sonar complicado, pero el objetivo es, básicamente, encontrar la configuración óptima usando un modelo probabilístico y evaluando iterativamente una configuración de hiperparámetros interesante basada en la información actual. 

Permitidme demostrároslo en nuestro ejemplo paso a paso. Primero, suponemos todas las distribuciones como distribuciones normales multivariables. A continuación, elegimos 2 configuraciones iniciales al azar (en este caso, 2 valores de tasa de aprendizaje dentro del dominio). Tras algunas evaluaciones iniciales, iteramos el proceso (siguiendo los pasos anteriores):

  • Usar las evaluaciones para estimar la función de exactitud en un intervalo de confianza (región verde) en torno a la media estimada (línea negra discontinua).
  • Usar la estimación y la función de adquisición (línea marrón en la figura inferior) para obtener como resultado el valor más interesante (estrella dorada sobre la línea marrón).
  • Evaluar el punto y verificar el mecanismo de terminación (En este caso, establecimos el límite en 0,9995).

bayesian_optimization

Se trata de una herramienta muy potente y flexible que ofrece una solución intermedia entre dos conceptos clave, exploración y explotación, de modo que se minimice el número de evaluaciones:

  • Exploración: Evalúa en los lugares en que la varianza es amplia, es decir, donde nuestra estimación tenga mayor probabilidad de ser inexacta (en nuestro ejemplo, las regiones verdes más amplias)
  • Explotación: Evalúa en los lugares en que la estimación está más cerca de nuestro objetivo (en nuestro ejemplo, los puntos más altos de la línea discontinua).

Ponderar estos dos conceptos es clave en todo problema de optimización; en función de nuestro espacio objetivo, podría ser muy beneficioso fortalecer un concepto respecto al otro. Esta compensación se ofrece gracias a la función de adquisición; entre sus ejemplos se incluyen probabilidad de mejora, mejora esperada, pérdidas bayesianas esperadas, límites superiores de confianza (UCB), muestreos de Thompson y combinaciones de éstos.

Para una breve explicación, sugiero leer estas notas.

Para entender mejor el proceso completo, inténtalo por ti mismo en esta implementación de código abierto Python puro .

Este enfoque se ha empleado en una amplia variedad de situaciones, incluso fuera del aprendizaje automático, y ha demostrado ser muy eficaz. La optimización bayesiana realmente brilla cuando el tiempo de evaluación es largo y el espacio de hiperparámetros es amplio y mixto, lo que suele ser el caso de la optimización de hiperparámetros en AP (aprendizaje profundo).

 

Optimización evolutiva

Emulando a Charles Darwin, una estrategia de evolución es un algoritmo que proporciona las versiones más fuertes de una población y, a continuación, produce la siguiente generación basándose en estas versiones. A partir de una población aleatoria, el proceso iterativo de seleccionar las más fuertes y producir la siguiente generación se detendrá una vez la mejor solución conocida sea satisfactoria para el usuario. 

En optimización de hiperparámetros, la optimización evolutiva es una metodología para la optimización global de funciones ruidosas de caja negra. Buscando en el espacio de hiperparámetros, este método es un proceso secuencial en lotes que pretende optimizar la función objetiva.

Existen múltiples estrategias evolutivas; voy a mostraros una de las que más éxito han obtenido hasta la fecha: la Estrategia Evolutiva de Adaptación de Matriz de Covarianza (CMA-ES, del inglés), Como muchas estrategias, toma las muestras a partir de una distribución normal; sin embargo, este enfoque es flexible y puede tomar las observaciones de cada generación, e incrementar o decrementar adaptativamente el espacio de búsqueda para la siguiente generación. No solo se adaptará para los parámetros medio y sigma de cada hiperparámetro, sino que calculará toda la matriz de covarianza del espacio de hiperparámetros.

CMA-ES modifica la fórmula de cálculo de covarianza de forma inteligente para hacer que se adapte bien a un problema de optimización. Para simplificar, supongamos 2 hiperparámetros, y que estamos filtrando el 25% de la población mediante iteración. Primero, se calcula la media de las muestras más fuertes:

Mean

donde h1 es el primer hiperparámetro, h2 el segundo hiperparámetro, y Ñ es el número de muestras filtradas de cada población. El acento circunflejo sobre las variables indica la población más fuerte. A continuación, en vez de calcular la matriz usual de covarianza: 

expected_variance

calcula la varianza sobre la media de toda la generación actual, en vez de la media sobre las observaciones más fuertes:

expected_variance

Armados con las métricas calculadas, muestreamos una nueva población a partir de una distribución normal con las medias y la covarianza estimadas.

Echemos un vistazo al proceso completo en nuestro ejemplo siguiente. Primero muestreamos un número arbitrario de observaciones en una distribución predefinida en nuestro espacio de hiperparámetros; en nuestro caso, tomemos 10 muestras aleatorias de una distribución normal centrada en una varianza de 0,85 y 0,005. A continuación, comencemos el proceso iterativo: 

  • Dejamos que la evolución haga su trabajo y filtre las 3 muestras más fuertes (los 3 puntos verdes con mayor exactitud).
  • Calculamos la media y la sigma modificadas sobre la población fuerte (línea negra vertical discontinua y región verde respectivamente).
  • Muestreamos un nuevo conjunto de 10 muestras procedentes de la distribución normal con las métricas calculadas (marcadores rojos sobre el eje horizontal).
  • Evaluamos y verificamos el mecanismo de terminación (en nuestro caso, sobrepasar las 100 evaluaciones).

 

evolutionary_strategy

Al observar visualmente el progreso del algoritmo, podemos entender el motivo de modificar sobre la matriz de covarianza. Durante las primeras etapas, la varianza modificada crece con el fin de alcanzar un rango más amplio de tasas de aprendizaje; a medida que nos acercamos al punto óptimo, la varianza decrece para converger en cero.

Este algoritmo es un algoritmo muy popular de optimización de caja negra. Funciona bien en muchas situaciones y ha sido probado por muchos investigadores en todo tipo de situaciones. Como algoritmo de optimización de hiperparámetros, es un algoritmo con buen rendimiento en espacios inestables.

Para más detalles, recomiendo leer este tutorial sobre CMA-ES preparado por

 

Otros algoritmos 

Las optimizaciones basadas en gradiente han sido los algoritmos más eficaces en el entorno de aprendizaje automático; incluso en funciones de caja negra, puede estimarse el gradiente con excelentes resultados. En optimización de hiperparámetros, no obstante, el espacio origen normalmente no es algebraico, y con el fin de navegar en modo gradiente, se necesitan las operaciones de suma y multiplicación, así como un espacio de convergencia (ej., la decisión de usar abandono o no, no puede explorarse de modo continuo).

En los casos en que nuestro espacio de hiperparámetros es algebraico (ej., la tasa de aprendizaje combinada con el peso de la regularización), recomiendo usar optimizaciones basadas en gradiente. Para más detalles, consulta la teoría sobre el método Broyden, como método cuasinewtoniano (estimar la matriz jacobiana), y ¡siéntete libre de probarlo en tus problemas!

 

Comparación de métodos

En matemáticas aplicadas, las funciones de prueba, conocidas como paisajes artificiales, son útiles para evaluar características de algoritmos de optimización. Voy a explotar tres funciones de prueba diferente que se ofrecen en un dominio público con el fin de evaluar los algoritmos explicados. Más concretamente, las funciones objetivo hipotéticas que se eligen para alcanzar una amplia variedad de situaciones, son las que siguen;

 

Función de esfera:

Sphere_function_equation

Sphere_function

Función de Himmelblau:

 

Himmelblau_function_equation

Himmelblau_function

Función de Rastrigin:

Rastrigin_function_equation

Rastrigin_function  

Para facilitar la visualización, se supone un espacio de hiperparámetros bidimensional.

Ejemplos

He aquí algunos ejemplos de la optimización de hiperparámetros:

 

CMA-ES sobre la función de Himmelblau. Configuración: 50 muestras por generación y guardar el 20% de las mejores (10 muestras).

Example_Himmelblau_Evol La versión modificada de la matriz de covarianza produce inicialmente una nube dispersa de puntos y, cuando se aproxima a un punto mínimo, la nube se concentra en torno a él.

Optimización bayesiana sobre la función de Rastrigin. Configuración: Usar un kernel de límite superior de confianza (UCB) que favorezca la explotación (kappa = 5).

Example_Rastrigin_Bayes_ucb5El algoritmo se centra en mejorar el objetivo en torno a los mínimos explorados en vez de explorar nuevas zonas de interés.

Optimización bayesiana sobre la función de Rastrigin. Configuración: kernel UCB que favorezca la exploración (kappa = 25).

Example_Rastrigin_Bayes_ucb25 

Método de evaluación

Cada uno de los algoritmos se aplica varios miles de veces hasta que las métricas que se muestran se estabilizan. Como algunos de los algoritmos necesitan una creencia previa sobre la función objetivo (ej., exploración vs explotación en optimización bayesiana, definición de cuadrícula en algoritmo de búsqueda en cuadrícula), se elegirán antes las creencias previas (ej., distancia de cuadrícula aleatoria dentro de un dominio predeterminado). La importancia de esta elección también se demostrará y comparará. Las métricas que se muestran son como sigue:

 

  • Importancia de la creencia previa (PBI): La influencia de nuestra creencia previa sobre la tasa de éxito del algoritmo. Este valor se calcula como la varianza de probabilidad de éxito en todas las creencias previas seleccionadas a partir de un rango predeterminado de valores escalados mediante un escenario de máxima varianza. Una PBI más alta implica una mayor dependencia del algoritmo para el usuario.
  • Tasa de éxito (SR): Probabilidad de llegar al límite marcado en una configuración que demuestre poder tener éxito para la función objetivo en concreto.
  • Evaluaciones medias necesarias (MER): Número promedio de evaluaciones de función necesarias con el fin de sobrepasar el límite deseado sobre la función objetivo en intentos con éxito. En otras palabras, la velocidad a la que converge el algoritmo.

 

Función

Algoritmo

PBI

SR

MER

Esfera

Búsqueda en cuadrícula

0,4

0,5%

1720,9

 

Búsqueda aleatoria

1,6

4,6%

1944,9

 

Optimización bayesiana

0,1

99,9%

29,3

 

Optimización evolutiva

26,6

99,8%

213,2

Himmelblau

Búsqueda en cuadrícula

0,0

0,0%

1765,1

 

Búsqueda aleatoria

0,1

0,1%

1917,0

 

Optimización bayesiana

0,1

99,9%

53,5

 

Optimización evolutiva

60,4

99,7%

554,1

Rastrigin

Búsqueda en cuadrícula

14,0

25,5%

1766,0

 

Búsqueda aleatoria

57,8

42,1%

1178,1

 

Optimización bayesiana

42,4

87,5%

214,4

 

Optimización evolutiva

40,7

96,2%

1045,9

 

Por ejemplo, al optimizar sobre la función de Himmelblau, la optimización bayesiana normalmente demuestra mejor desempeño: muy baja importancia de las elecciones del usuario (0,1), muy alta probabilidad de alcanzar el objetivo (99,9%), y un promedio bajo de evaluaciones requeridas (53,5); es decir, independientemente de los parámetros seleccionados manualmente por el usuario, la optimización bayesiana alcanza constantemente el límite marcado y de manera muy rápida. 

CMA-ES ofrece mejores resultados sobre la función de Rastrigin. Como se muestra en la tabla, el algoritmo alcanza el óptimo con más constancia que sus contrapartes; sin embargo, también ofrece una convergencia lenta. 

Para concluir, los algoritmos evolutivos pueden ser ventajosos en funciones objetivas altamente volátiles, pero en general es evidente que la optimización bayesiana es la opción más sólida y eficiente. 

 

La experiencia de Buguroo

En el departamento de AI de Buguroo, se ha adoptado una versión modificada de la optimización bayesiana que equilibra la exploración y la explotación a lo largo del tiempo para perfeccionar el desempeño de nuestros modelos. En nuestra experiencia, este enfoque ha demostrado ser satisfactorio en la mayoría de los casos. Nuestros modelos de dinámica de tecleo (los agentes encargados de confirmar la identidad de una persona basándose en la manera y el ritmo de escritura en un teclado), son un ejemplo de uso con éxito.

 

Temas: deep learning, Cybersecurity

 

 

Deep Learning for Online Fraud Prevention


Últimos artículos

Un nuevo troyano bancario “BANKER RTC PORTAL” ataca a bancos latinoamericanos y europeos

read more

Hackeando el cerebro I: Principios de persuasión

read more

Cryptojacking y ransomware: Escenarios de ciberamenazas en 2019

read more