Descripción general del ajuste de hiperparámetro

El ajuste de hiperparámetros aprovecha la infraestructura de procesamiento de Google Cloud para probar diferentes opciones de configuración de hiperparámetros cuando se entrena el modelo. Puede proporcionarte valores optimizados para los hiperparámetros, lo que mejora la exactitud predictiva del 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 del modelo son el modelo, es decir, son lo que lo distinguen de otros modelos del mismo tipo que operan con datos similares.

  • Tus hiperparámetros son las variables que rigen el proceso de entrenamiento en sí. Por ejemplo, parte del diseño de una DNN es decidir cuántas capas ocultas de nodos usar entre las capas de entrada y salida, y cuántos nodos debe usar cada capa oculta. 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 el trabajo de entrenamiento, observas la exactitud global y realizas ajustes. En ambos casos, estás modificando la composición del modelo a fin de encontrar la mejor combinación para resolver tu problema.

Sin una tecnología automatizada como el ajuste de los hiperparámetros de Vertex AI, necesitas hacer ajustes manuales a los hiperparámetros durante 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 hiperparámetros

El ajuste de los hiperparámetros funciona ejecutando varias pruebas de la aplicación de entrenamiento con valores para los hiperparámetros elegidos, establecidos dentro de los límites que especifiques. Vertex AI realiza un seguimiento de los resultados de cada prueba y realiza 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 hiperparámetros requiere una comunicación explícita entre la IA de Vertex y tu aplicación de entrenamiento. La aplicación de entrenamiento define toda la información que necesita el modelo. Debes definir los hiperparámetros (variables) que deseas ajustar y las variables de destino que se usan para evaluar cada prueba.

Obtén más información sobre la optimización Bayesiana para el ajuste de hiperparámetros.

Además de la optimización Bayesiana, Vertex AI optimiza los trabajos de ajuste de hiperparámetros. Si realizas el ajuste de hiperparámetros en modelos similares, cambias solo la función objetiva o agregas una columna de entrada nueva, Vertex AI 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 hiperparámetros

El ajuste de hiperparámetros optimiza las variables de destino que especificas, llamadas métricas de hiperparámetro. La precisión del modelo, como se calcula a partir de un pase de evaluación, es una métrica común. Las métricas deben ser numéricas.

Cuando configuras un trabajo de ajuste de hiperparámetros, defines el nombre y el objetivo de cada métrica. El objetivo especifica si deseas ajustar tu modelo para maximizar o minimizar el valor de esta métrica.

Cómo Vertex AI obtiene tus métricas

Usa el paquete cloudml-hypertune de Python para pasar las métricas a Vertex AI. Esta biblioteca proporciona funciones auxiliares para informar las métricas a Vertex AI.

Obtén más información para informar métricas de hiperparámetros.

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 tu aplicación.

Cuando configuras un trabajo de ajuste de hiperparámetros, debes definir cada hiperparámetro que se ajustará, su tipo de datos y el rango de valores para probar. Identifica 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.

Obtén más información sobre los requisitos para analizar los argumentos de la línea de comandos.

Selecciona los hiperparámetros que deseas ajustar

Existen 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 ejecutas un trabajo de ajuste de hiperparámetros en Vertex AI, se te cobra en función de la duración de las pruebas que inició tu trabajo de ajuste de hiperparámetros. Una elección minuciosa de los hiperparámetros que se deben ajustar puede reducir el tiempo y el costo de tu trabajo de ajuste de hiperparámetros.

Tipos de datos de hiperparámetros

En un objeto ParameterSpec, especificas el tipo de datos de hiperparámetro como una instancia de una especificación de valor del parámetro. En la siguiente tabla, se enumeran las especificaciones del valor de parámetro admitidas.

Tipo Tipo de datos Rangos de valor Datos de valor
DoubleValueSpec DOUBLE minValue y maxValue Valores de punto flotante
IntegerValueSpec INTEGER minValue y maxValue Números enteros
CategoricalValueSpec CATEGORICAL categoricalValues Lista de strings de categoría
DiscreteValueSpec DISCRETE discreteValues Lista de valores en orden ascendente

Escala hiperparámetros

En un objeto ParameterSpec, puedes especificar que el escalamiento se debe realizar en este hiperparámetro. Se recomienda el escalamiento para los tipos de datos INTEGER y DOBLE. Los tipos de escalamiento disponibles son:

  • SCALE_TYPE_UNSPECIFIED: no se aplica el escalamiento a este hiperparámetro.
  • UNIT_LINEAR_SCALE: ajusta el espacio posible de forma lineal de 0 a 1.
  • UNIT_LOG_SCALE: ajusta el espacio posible de forma logarítmica de 0 a 1. Todo el espacio posible debe ser positivo, sin excepciones.
  • UNIT_REVERSE_LOG_SCALE: escala el espacio posible "reversible" de manera logarítmica de 0 a 1. El resultado es que los valores cercanos a la parte superior del espacio posible se extienden más que los puntos cercanos a la parte inferior. Todo el espacio posible debe ser positivo, sin excepciones.

Hiperparámetros condicionales

El objeto ConditionalParameterSpec te permite agregar hiperparámetros a una prueba cuando el valor de su hiperparámetro superior coincide con una condición que especifiques.

Por ejemplo, puedes definir un trabajo de ajuste de hiperparámetros con el objetivo de encontrar un modelo óptimo mediante una regresión lineal o una red neuronal profunda (DNN). Para permitir que el trabajo de ajuste especifique el método de entrenamiento, debes definir un hiperparámetro categórico llamado training_method con las siguientes opciones: LINEAR_REGRESSION y DNN. Cuando training_method es LINEAR_REGRESSION, el trabajo de ajuste debe especificar un hiperparámetro para la tasa de aprendizaje. Cuando training_method es DNN, el trabajo de ajuste debe especificar los parámetros para la tasa de aprendizaje y la cantidad de capas ocultas.

Debido a que la cantidad de capas ocultas es aplicable solo cuando el training_method de una prueba es DNN, debes definir un parámetro condicional que agregue un hiperparámetro llamado num_hidden_layers cuando el training_method es DNN.

Debido a que ambas opciones training_method usan la tasa de aprendizaje, debes decidir si se debe compartir este hiperparámetro condicional. Si el hiperparámetro se comparte, el trabajo de ajuste usa lo que aprendió de las pruebas LINEAR_REGRESSION y DNN para ajustar la tasa de aprendizaje. En este caso, tiene más sentido tener tasas de aprendizaje separadas para cada training_method, ya que la tasa de aprendizaje de entrenamiento de un modelo con LINEAR_REGRESSION no debería afectar la tasa de aprendizaje. un modelo con DNN. Por lo tanto, debes definir los siguientes hiperparámetros condicionales:

  • Un hiperparámetro llamado learning_rate que se agrega cuando training_method es LINEAR_REGRESSION
  • Un hiperparámetro llamado learning_rate que se agrega cuando training_method es DNN

Los hiperparámetros condicionales te permiten definir los hiperparámetros para tu trabajo de ajuste como un grafo. Esto te permite ajustar el proceso de entrenamiento mediante diferentes técnicas de entrenamiento, cada una con sus propias dependencias de hiperparámetros.

Algoritmos de búsqueda

Puedes especificar un algoritmo de búsqueda en el objeto StudySpec. Si no especificas un algoritmo, tu trabajo usa el algoritmo predeterminado de Vertex AI. El algoritmo predeterminado aplica la optimización Bayesiana para llegar a la solución óptima con una búsqueda más efectiva en el espacio de los parámetros.

Los valores disponibles son:

  • ALGORITHM_UNSPECIFIED: Igual que no especificar un algoritmo. Vertex AI elige el mejor algoritmo de búsqueda entre los bandidos de procesos gaussianos, la búsqueda de combinación lineal o sus variantes.

  • GRID_SEARCH: Una búsqueda por cuadrícula simple dentro del espacio posible. Esta opción es particularmente útil si deseas especificar una cantidad de pruebas que sea mayor que la cantidad de puntos en el espacio posible. En tales casos, si no especificas una búsqueda por cuadrícula, el algoritmo predeterminado de Vertex AI 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.

¿Qué sigue?