El ajuste de hiperparámetros aprovecha la infraestructura de procesamiento de Google Cloud para probar diferentes configuraciones de hiperparámetros al entrenar tu modelo. Puede proporcionarte valores optimizados para los hiperparámetros, lo que maximiza la precisión 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 gestiona tres categorías de datos mientras entrena tu modelo:
Los datos de entrada (también llamados datos de entrenamiento) son un conjunto de registros individuales (instancias) que contienen las características importantes para tu problema de aprendizaje automático. Estos datos se usan durante el entrenamiento para configurar el modelo de forma que pueda hacer inferencias precisas sobre nuevas instancias de datos similares. Sin embargo, los valores de los datos de entrada nunca forman parte directamente del modelo.
Los parámetros de tu modelo son las variables que usa la técnica de aprendizaje automático que has elegido para adaptarse a tus datos. Por ejemplo, una red neuronal profunda (DNN) se compone de nodos de procesamiento (neuronas), cada uno de los cuales realiza una operación en los datos a medida que estos se desplazan por la red. Cuando se entrena tu DNN, cada nodo tiene un valor de peso que indica a tu modelo el impacto que tiene en la inferencia final. Esos pesos son un ejemplo de los parámetros de tu modelo. En muchos sentidos, los parámetros de tu modelo son el modelo. Son lo que distingue a tu modelo concreto de otros modelos del mismo tipo que trabajan con datos similares.
Los hiperparámetros son las variables que rigen el proceso de entrenamiento. Por ejemplo, al diseñar una DNN, se debe decidir cuántas capas ocultas de nodos se van a usar entre las capas de entrada y salida, y cuántos nodos debe usar cada capa oculta. Estas variables no están relacionadas directamente con los datos de entrenamiento. Son variables de configuración. Ten en cuenta que los parámetros cambian durante una tarea de entrenamiento, mientras que los hiperparámetros suelen ser constantes durante una tarea.
El proceso de entrenamiento optimiza (o ajusta) los parámetros del modelo: se introducen datos en las operaciones del modelo, se compara la inferencia resultante con el valor real de cada instancia de datos, se evalúa la precisión y se ajusta hasta encontrar los mejores valores. Los hiperparámetros se ajustan ejecutando toda la tarea de entrenamiento, analizando la precisión agregada y haciendo los ajustes necesarios. En ambos casos, modificas la composición de tu modelo para encontrar la mejor combinación que te permita resolver el problema.
Si no utilizas una tecnología automatizada como el ajuste de hiperparámetros de Vertex AI, tendrás que hacer ajustes manuales en los hiperparámetros a lo largo de muchas ejecuciones de entrenamiento para llegar a los valores óptimos. El ajuste de hiperparámetros facilita y agiliza el proceso de determinar los mejores ajustes de hiperparámetros.
Cómo funciona el ajuste de hiperparámetros
El ajuste de hiperparámetros funciona ejecutando varias pruebas de tu aplicación de entrenamiento con valores de los hiperparámetros que elijas, definidos dentro de los límites que especifiques. Vertex AI hace un seguimiento de los resultados de cada prueba y realiza ajustes para las pruebas posteriores. Cuando la tarea finalice, podrás obtener un resumen de todas las pruebas junto con la configuración de valores más eficaz según los criterios que especifiques.
Para ajustar los hiperparámetros, es necesario que haya una comunicación explícita entre Vertex AI y tu aplicación de entrenamiento. Tu aplicación de entrenamiento define toda la información que necesita tu modelo. Defines los hiperparámetros (variables) que quieres ajustar y las variables de destino que se usan para evaluar cada prueba.
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 las tareas de ajuste de hiperparámetros. Si ajustas los hiperparámetros de modelos similares, cambiando solo la función objetivo o añadiendo una nueva columna de entrada, Vertex AI puede mejorar con el tiempo y hacer que el ajuste de hiperparámetros sea más eficiente.
Qué optimiza el ajuste de hiperparámetros
El ajuste de hiperparámetros optimiza las variables de destino que especifiques, llamadas métricas de hiperparámetros. La precisión del modelo, calculada a partir de una pasada de evaluación, es una métrica habitual. Las métricas deben ser numéricas.
Cuando configuras una tarea de ajuste de hiperparámetros, defines el nombre y el objetivo de cada métrica. El objetivo especifica si quieres ajustar el modelo para maximizar o minimizar el valor de esta métrica.
Cómo obtiene Vertex AI tus métricas
Usa el paquete de Python cloudml-hypertune
para enviar métricas a Vertex AI. Esta biblioteca proporciona funciones auxiliares para
enviar métricas a Vertex AI.
Más información sobre cómo generar informes de métricas de hiperparámetros
El flujo de valores de hiperparámetros
Si no ajustas los hiperparámetros, puedes definirlos como quieras en tu aplicación de entrenamiento. Por ejemplo, puedes configurar los hiperparámetros pasando argumentos de línea de comandos al módulo de la aplicación principal o proporcionándolos a la aplicación en un archivo de configuración.
Cuando utilice el ajuste de hiperparámetros, debe seguir este procedimiento para definir los valores de los hiperparámetros que va a usar para el ajuste:
Define un argumento de línea de comandos en el módulo de entrenamiento principal para cada hiperparámetro ajustado.
Usa el valor que se ha pasado en esos argumentos para definir el hiperparámetro correspondiente en el código de tu aplicación.
Cuando configuras una tarea de ajuste de hiperparámetros, defines cada hiperparámetro que se va a ajustar, su tipo de datos y el intervalo de valores que se va a probar. Para identificar cada hiperparámetro, debe usar el mismo nombre que el argumento correspondiente que haya definido en el módulo principal. El servicio de entrenamiento incluye argumentos de línea de comandos que usan estos nombres cuando ejecuta tu aplicación.
Más información sobre los requisitos para analizar argumentos de línea de comandos
Seleccionar los hiperparámetros que se van a ajustar
No hay consejos universales sobre cómo elegir los hiperparámetros que debes ajustar. Si tienes experiencia con la técnica de aprendizaje automático que estás usando, puede que sepas cómo se comportan sus hiperparámetros. También puedes encontrar consejos en comunidades de aprendizaje automático.
Independientemente de cómo los elijas, es importante que conozcas las implicaciones. Cada hiperparámetro que elijas ajustar puede aumentar el número de pruebas necesarias para que el trabajo de ajuste se realice correctamente. Cuando ejecutas una tarea de ajuste de hiperparámetros en Vertex AI, el importe que se te cobra se basa en la duración de las pruebas iniciadas por tu tarea de ajuste de hiperparámetros. Si eliges cuidadosamente los hiperparámetros que quieres ajustar, puedes reducir el tiempo y el coste de la tarea de ajuste de hiperparámetros.
Tipos de datos de hiperparámetros
En un objeto ParameterSpec, especifica el tipo de datos del hiperparámetro como una instancia de una especificación de valor de parámetro. En la siguiente tabla se enumeran las especificaciones de valores de parámetros admitidas.
Tipo | Tipo de datos | Intervalos de valores | Datos de valor |
---|---|---|---|
DoubleValueSpec |
DOUBLE |
minValue y maxValue |
Valores de punto flotante |
IntegerValueSpec |
INTEGER |
minValue y maxValue |
Valores enteros |
CategoricalValueSpec |
CATEGORICAL |
categoricalValues |
Lista de cadenas de categorías |
DiscreteValueSpec |
DISCRETE |
discreteValues |
Lista de valores en orden ascendente |
Hiperparámetros de escala
En un objeto ParameterSpec
, puede especificar que se aplique un escalado a este hiperparámetro. Se recomienda usar la función de escalado con los tipos de datos DOUBLE e INTEGER. Los tipos de escalado disponibles son los siguientes:
SCALE_TYPE_UNSPECIFIED
: no se aplica ningún escalado a este hiperparámetro.UNIT_LINEAR_SCALE
: escala el espacio factible de forma lineal de 0 a 1.UNIT_LOG_SCALE
: escala el espacio factible de forma logarítmica entre 0 y 1. Todo el espacio factible debe ser estrictamente positivo.UNIT_REVERSE_LOG_SCALE
: escala el espacio factible "inverso" logarítmicamente 0 a 1. El resultado es que los valores cercanos a la parte superior del espacio factible se dispersan más que los puntos cercanos a la parte inferior. Todo el espacio factible debe ser estrictamente positivo.
Hiperparámetros condicionales
El objeto ConditionalParameterSpec
te permite añadir hiperparámetros a una prueba cuando el valor de su hiperparámetro principal coincida con una condición que especifiques.
Por ejemplo, puedes definir una tarea 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 que el trabajo de ajuste pueda especificar el método de entrenamiento, define un hiperparámetro categórico llamado training_method
con las siguientes opciones: LINEAR_REGRESSION
y DNN
. Cuando el training_method
es LINEAR_REGRESSION
, tu tarea de ajuste debe especificar un hiperparámetro para la tasa de aprendizaje. Cuando training_method
es DNN
, el trabajo de ajuste debe especificar parámetros para la tasa de aprendizaje y el número de capas ocultas.
Como el número de capas ocultas solo se aplica cuando el training_method
de una prueba es DNN
, define un parámetro condicional que añade un hiperparámetro llamado num_hidden_layers
cuando el training_method
es DNN
.
Como la tasa de aprendizaje se usa en ambas opciones de training_method
, debes decidir si este hiperparámetro condicional se debe compartir. Si el hiperparámetro se comparte, la tarea de ajuste usa lo que ha aprendido de las pruebas LINEAR_REGRESSION
y DNN
para ajustar la tasa de aprendizaje. En este caso, tiene más sentido tener tasas de aprendizaje independientes para cada training_method
, ya que la tasa de aprendizaje para entrenar un modelo con LINEAR_REGRESSION
no debería afectar a la tasa de aprendizaje para entrenar un modelo con DNN
. Por lo tanto, define los siguientes hiperparámetros condicionales:
- Un hiperparámetro llamado
learning_rate
que se añade cuandotraining_method
esLINEAR_REGRESSION
. - Un hiperparámetro llamado
learning_rate
que se añade cuandotraining_method
esDNN
.
Los hiperparámetros condicionales te permiten definir los hiperparámetros de tu trabajo de ajuste como un gráfico. De esta forma, puedes ajustar el proceso de entrenamiento con 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 usará 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 eficaz en el espacio de parámetros.
Valores disponibles:
ALGORITHM_UNSPECIFIED
: es lo mismo que no especificar ningún 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 de cuadrícula en el espacio factible. Esta opción es especialmente útil si quieres especificar una cantidad de pruebas que sea mayor que el número de puntos del espacio factible. En estos casos, si no especificas una búsqueda de cuadrícula, el algoritmo predeterminado de Vertex AI puede generar sugerencias duplicadas. Para usar la búsqueda en cuadrícula, todos los parámetros deben ser de tipoINTEGER
,CATEGORICAL
oDISCRETE
.RANDOM_SEARCH
: una búsqueda aleatoria dentro del espacio factible.
Siguientes pasos
- Consulta cómo implementar el ajuste de hiperparámetros en tus trabajos de entrenamiento.
- Lee una entrada de blog sobre la optimización bayesiana y el ajuste de hiperparámetros.