Descripción general del ajuste de hiperparámetros

En esta página, se describen los conceptos involucrados en el ajuste de hiperparámetros, que es el optimizador de modelos automatizado proporcionado por Cloud Machine Learning Engine. El ajuste de hiperparámetros aprovecha la infraestructura de procesamiento de Google Cloud Platform para probar diferentes configuraciones de hiperparámetros cuando entrenas tu modelo. Puede proporcionarte valores optimizados para los hiperparámetros, lo que optimiza la exactitud predictiva de tu modelo.

¿Qué es un hiperparámetro?

Los hiperparámetros contienen los datos que rigen el proceso de entrenamiento.

Tu aplicación de entrenamiento controla tres categorías de datos a medida que entrena tu modelo:

  • Tus datos de entrada (también llamados datos de entrenamiento) son una colección de registros individuales (instancias) que contiene las características importantes para tu problema de aprendizaje automático. Estos datos se usan durante el entrenamiento para configurar tu modelo con el fin de que haga predicciones precisas sobre las instancias nuevas de datos similares. Sin embargo, los valores en tus datos de entrada nunca forman parte directamente de tu modelo.

  • Los parámetros de tu modelo son las variables que tu técnica de aprendizaje automático seleccionada usa para ajustarse a tus datos. Por ejemplo, una red neuronal profunda (DNN) está compuesta por nodos de procesamiento (neuronas), cada uno con una operación realizada en los datos a medida que viaja a través de la red. Cuando tu DNN está entrenada, cada nodo tiene un valor de peso que le dice a tu modelo el impacto que tiene en la predicción final. Esos pesos son un ejemplo de los parámetros de tu modelo. En muchos aspectos, los parámetros de tu modelo son el modelo: son los que distinguen tu modelo particular de otros modelos del mismo tipo que trabajan con datos similares.

  • Tus hiperparámetros son las variables que rigen el proceso de entrenamiento en sí. Por ejemplo, parte de la configuración de una red neuronal profunda es decidir cuántas capas ocultas de nodos usar entre la capa de entrada y la de salida, y cuántos nodos debe usar cada capa. Estas variables no están directamente relacionadas con los datos de entrenamiento. Son variables de configuración. Ten en cuenta que los parámetros cambian durante un trabajo de entrenamiento, mientras que los hiperparámetros suelen ser constantes durante un trabajo.

Los parámetros de tu modelo se optimizan (podrías decir "ajustan") mediante el proceso de entrenamiento: ejecutas datos a través de las operaciones del modelo, comparas la predicción obtenida con el valor real para cada instancia de datos, evalúas la precisión y te adaptas hasta que encuentras los mejores valores. Los hiperparámetros se ajustan cuando ejecutas todo tu trabajo de entrenamiento, observas la precisión global y te adaptas. En ambos casos, estás modificando la composición de tu modelo en un esfuerzo por encontrar la mejor combinación para controlar tu problema.

Sin una tecnología automatizada como el ajuste de los hiperparámetros de Cloud ML Engine, necesitas hacer ajustes manuales a los hiperparámetros a lo largo de muchas ejecuciones de entrenamiento para alcanzar los valores óptimos. El ajuste de los hiperparámetros hace que el proceso de determinar la mejor configuración de los hiperparámetros sea más fácil y menos tedioso.

Cómo funciona el ajuste de los hiperparámetros

El ajuste de los hiperparámetros funciona ejecutando varias pruebas en un solo trabajo de entrenamiento. Cada prueba es una ejecución completa de tus aplicaciones de entrenamiento con valores para tus hiperparámetros elegidos, configurada dentro de los límites que especifiques. El servicio de entrenamiento de Cloud ML Engine realiza un seguimiento de los resultados de cada prueba y ajustes para las pruebas posteriores. Cuando se completa el trabajo, puedes obtener un resumen de todas las pruebas junto con la configuración más efectiva de los valores según los criterios que especificaste.

El ajuste de los hiperparámetros requiere una comunicación explícita entre el servicio de entrenamiento de Cloud ML Engine y tu aplicación de entrenamiento. Tu aplicación de entrenamiento define toda la información que necesita tu modelo. Debes definir los hiperparámetros (variables) que deseas ajustar y un valor objetivo para cada hiperparámetro.

Para obtener más información sobre cómo Cloud ML Engine usa la optimización bayesiana para el ajuste de los hiperparámetros, consulta la entrada de blog llamada Ajuste de hiperparámetros en Cloud Machine Learning Engine mediante la optimización bayesiana.

Además de la optimización bayesiana, Cloud ML Engine optimiza los trabajos de ajuste de los hiperparámetros. Si realizas el ajuste de los hiperparámetros en modelos similares, cambias solo la función objetiva o agregas una columna de entrada nueva, Cloud ML Engine es capaz de mejorar con el tiempo y hacer que el ajuste de los hiperparámetros sea más eficiente.

Qué optimiza el ajuste de los hiperparámetros

El ajuste de los hiperparámetros optimiza una sola variable de destino, también llamada métrica del hiperparámetro, que especificaste. La precisión del modelo, como se calcula a partir de un pase de evaluación, es una métrica común. La métrica debe ser un valor numérico y puedes especificar si deseas ajustar tu modelo para maximizar o minimizar tu métrica.

Cuando inicias un trabajo con el ajuste de hiperparámetros, estableces el nombre de tu métrica del hiperparámetro. Este es el nombre que asignas al resumen escalar que agregas a tu aplicación de entrenamiento.

El nombre predeterminado de la métrica es training/hptuning/metric. Recomendamos que asignes un nombre personalizado. La única diferencia funcional es que si usas un nombre personalizado, debes configurar el valor hyperparameterMetricTag en el objeto HyperparameterSpec en tu solicitud de trabajo para que coincida con el nombre que elegiste.

Cómo obtiene tu métrica Cloud ML Engine

Puedes observar que no hay instrucciones en esta documentación para pasar tu métrica del hiperparámetro al servicio de entrenamiento de Cloud ML Engine. Esto se debe a que el servicio supervisa los eventos de resumen de TensorFlow generados por tu aplicación de entrenamiento y recupera la métrica.

El flujo de los valores de hiperparámetros

Sin el ajuste de los hiperparámetros, puedes configurar tus hiperparámetros por el medio que prefieras en tu aplicación de entrenamiento. Por ejemplo, puedes configurar los hiperparámetros si pasas los argumentos de la línea de comandos a tu módulo de aplicación principal, o si se los proporcionas a tu aplicación en un archivo de configuración.

Cuando usas el ajuste de los hiperparámetros, debes seguir el procedimiento que se indica a continuación para configurar los valores de los hiperparámetros que estás usando para el ajuste:

  • Define un argumento de la línea de comandos en tu módulo de entrenamiento principal para cada hiperparámetro ajustado.

  • Usa el valor que pasaste en esos argumentos para configurar el hiperparámetro correspondiente en el código de TensorFlow de tu aplicación.

Cuando configuras un trabajo de entrenamiento con el ajuste de los hiperparámetros, defines cada hiperparámetro que se va a ajustar, su tipo y el rango de valores para probar. Identificas cada hiperparámetro mediante el uso del mismo nombre que el argumento correspondiente que definiste en tu módulo principal. El servicio de entrenamiento incluye argumentos de la línea de comandos que usan estos nombres cuando ejecuta tu aplicación.

Cómo seleccionar los hiperparámetros para ajustar

Existen muy pocos consejos sobre cómo elegir qué hiperparámetros debes ajustar. Si tienes experiencia con la técnica de aprendizaje automático que estás usando, puedes conocer cómo se comportan sus hiperparámetros. Es posible que también puedas encontrar consejos en las comunidades de aprendizaje automático.

Independientemente de cómo los elijas, es importante que comprendas las consecuencias. Cada hiperparámetro que seleccionas para ajustar tiene el potencial de aumentar el número de pruebas necesario para un trabajo de ajuste exitoso. Cuando entrenas en Cloud ML Engine, se te aplican cargos por la duración del trabajo; una selección cuidadosa de hiperparámetros para ajustar puede reducir el tiempo y el costo del entrenamiento de tu modelo.

Tipos de hiperparámetros

Los tipos de hiperparámetros compatibles se enumeran en la documentación de referencia del trabajo. En el objeto ParameterSpec, especificas el tipo de cada hiperparámetro y los rangos de valor relacionados como se describe en la tabla a continuación:

Tipo Rangos de valor Datos de valor
DOUBLE minValue & maxValue Valores de punto flotante
INTEGER minValue & maxValue Valores enteros
CATEGORICAL categoricalValues Lista de strings de categoría
DISCRETE discreteValues Lista de valores en orden ascendente

Escalamiento de los hiperparámetros

Puedes especificar el tipo de escalamiento que se realizará en un hiperparámetro. Se recomienda el escalamiento para los tipos DOBLE y ENTERO. Los tipos de escalamiento disponibles son:

  • UNIT_LINEAR_SCALE
  • UNIT_LOG_SCALE
  • UNIT_REVERSE_LOG_SCALE

Algoritmos de búsqueda

Puedes especificar un algoritmo de búsqueda en el objeto HyperparameterSpec. Si no especificas un algoritmo, tu trabajo usa el algoritmo predeterminado de Cloud ML Engine, que impulsa la búsqueda de parámetros para llegar a la solución óptima con una búsqueda más efectiva sobre el espacio de los parámetros.

Los valores disponibles son:

  • ALGORITHM_UNSPECIFIED: genera el mismo comportamiento que cuando no especificas un algoritmo de búsqueda. Cloud ML Engine usa un algoritmo predeterminado, que aplica la optimización bayesiana para buscar el espacio de valores de hiperparámetros posibles, lo que da lugar a la técnica más efectiva para tu conjunto de hiperparámetros.

  • GRID_SEARCH: una búsqueda por cuadrícula simple dentro del espacio posible. Esta opción es particularmente útil si deseas especificar un número de pruebas que sea mayor que el número de puntos en el espacio posible. En tales casos, si no especificas una búsqueda por cuadrícula, el algoritmo predeterminado de Cloud ML Engine podría generar sugerencias duplicadas. Para usar la búsqueda por cuadrícula, todos los parámetros deben ser del tipo INTEGER, CATEGORICAL o DISCRETE.

  • RANDOM_SEARCH: una búsqueda aleatoria simple dentro del espacio posible.

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Cloud ML Engine para TensorFlow