optimization machine-learning tensorflow deep-learning bayesian

optimization - Optimización de hiperparámetros para estructuras de aprendizaje profundo mediante la optimización bayesiana



machine-learning tensorflow (1)

He construido una estructura CLDNN (Convolutional, LSTM, Deep Neural Network) para la tarea de clasificación de señal sin procesar.

Cada época de entrenamiento dura unos 90 segundos y los hiperparámetros parecen ser muy difíciles de optimizar.

He investigado varias formas de optimizar los hiperparámetros (por ejemplo, búsqueda aleatoria o de cuadrícula) y descubrí la optimización bayesiana.

Aunque todavía no entiendo completamente el algoritmo de optimización, me alimento como si me fuera de gran ayuda.

Me gustaría hacer algunas preguntas sobre la tarea de optimización.

  1. ¿Cómo configuro la optimización bayesiana con respecto a una red profunda? (¿Cuál es la función de costo que estamos tratando de optimizar?)
  2. ¿Cuál es la función que estoy tratando de optimizar? ¿Es el costo del conjunto de validación después de N épocas?
  3. ¿Es la menta verde un buen punto de partida para esta tarea? ¿Alguna otra sugerencia para esta tarea?

Agradecería mucho cualquier idea sobre este problema.


Aunque todavía no entiendo completamente el algoritmo de optimización, me alimento como si me fuera de gran ayuda.

Primero, permítanme explicar brevemente esta parte. Los métodos de optimización bayesiana tienen como objetivo tratar con el intercambio de exploración-explotación en el problema de los bandidos con múltiples brazos . En este problema, hay una función desconocida , que podemos evaluar en cualquier punto, pero cada evaluación cuesta (penalización directa o costo de oportunidad), y el objetivo es encontrar su máximo utilizando la menor cantidad posible de ensayos. Básicamente, la compensación es esta: conoce la función en un conjunto finito de puntos (de los cuales algunos son buenos y otros son malos), por lo que puede probar un área alrededor del máximo local actual, con la esperanza de mejorarla (explotación), o puede probar un área de espacio completamente nueva, que potencialmente puede ser mucho mejor o mucho peor (exploración), o en algún punto intermedio.

Los métodos de optimización bayesiana (p. Ej. PI, EI, UCB), crean un modelo de la función objetivo utilizando un proceso gaussiano (GP) y en cada paso eligen el punto más "prometedor" en función de su modelo GP (tenga en cuenta que "prometedor" puede ser definido de manera diferente por diferentes métodos particulares).

Aquí hay un ejemplo:

La verdadera función es f(x) = x * sin(x) (curva negra) en el intervalo [-10, 10] . Los puntos rojos representan cada prueba, la curva roja es la media GP, la curva azul es la media más o menos una desviación estándar . Como puede ver, el modelo GP no coincide con la verdadera función en todas partes, pero el optimizador identificó rápidamente el área "caliente" alrededor de -8 y comenzó a explotarla.

¿Cómo configuro la optimización bayesiana con respecto a una red profunda?

En este caso, el espacio se define mediante hiperparámetros (posiblemente transformados), generalmente un hipercubo de unidad multidimensional.

Por ejemplo, suponga que tiene tres hiperparámetros: una velocidad de aprendizaje α in [0.001, 0.01] , el regularizador λ in [0.1, 1] (ambos continuos) y el tamaño de capa oculta N in [50..100] (entero). El espacio para la optimización es un cubo tridimensional [0, 1]*[0, 1]*[0, 1] . Cada punto (p0, p1, p2) en este cubo corresponde a una trinidad (α, λ, N) por la siguiente transformación:

p0 -> α = 10**(p0-3) p1 -> λ = 10**(p1-1) p2 -> N = int(p2*50 + 50)

¿Cuál es la función que estoy tratando de optimizar? ¿Es el costo del conjunto de validación después de N épocas?

Correcto, la función objetivo es la precisión de validación de la red neuronal. Claramente, cada evaluación es costosa, ya que requiere al menos varias épocas para la capacitación.

También tenga en cuenta que la función objetivo es estocástica , es decir, dos evaluaciones en el mismo punto pueden diferir ligeramente, pero no es un bloqueador para la optimización bayesiana, aunque obviamente aumenta la incertidumbre.

¿Es la menta verde un buen punto de partida para esta tarea? ¿Alguna otra sugerencia para esta tarea?

spearmint es una buena biblioteca, definitivamente puedes trabajar con eso. También puedo recomendar hyperopt .

En mi propia investigación, terminé escribiendo mi propia pequeña biblioteca, básicamente por dos razones: quería codificar el método bayesiano exacto para usar (en particular, encontré que una estrategia de cartera de UCB y PI convergía más rápido que cualquier otra cosa, en mi caso ); Además, existe otra técnica que puede ahorrar hasta un 50% del tiempo de entrenamiento llamada predicción de la curva de aprendizaje (la idea es saltear el ciclo de aprendizaje completo cuando el optimizador confía en que el modelo no aprende tan rápido como en otras áreas). No conozco ninguna biblioteca que implemente esto, así que lo codifiqué yo mismo y al final valió la pena. Si está interesado, el código está en GitHub .