Descripción general del ajuste de hiperparámetro

En el aprendizaje automático, el ajuste de hiperparámetros identifica un conjunto de hiperparámetros óptimos de un algoritmo de aprendizaje. Un hiperparámetro es un argumento de modelo cuyo valor se establece antes de que el proceso de aprendizaje comience. En cambio, los valores de otros parámetros, como los coeficientes de un modelo lineal, se aprenden.

El ajuste de hiperparámetros le permite dedicar menos tiempo a la iteración manual de hiperparámetros y más tiempo a enfocarse en el análisis de estadísticas de los datos.

Puedes especificar opciones de ajuste de hiperparámetros para los siguientes tipos de modelos:

Para estos tipos de modelos, el ajuste de hiperparámetros se habilita cuando especificas un valor para la opción NUM_TRIALS en la declaración CREATE MODEL.

Para intentar ejecutar el ajuste de hiperparámetros en un modelo de regresión lineal, consulta Usar el ajuste de hiperparámetros de BigQuery ML para mejorar el rendimiento del modelo

Los siguientes modelos también admiten el ajuste de hiperparámetros, pero no te permiten especificar valores específicos:

  • Los modelos de AutoML Tables tienen el ajuste automático de hiperparámetros incorporado en el entrenamiento del modelo de forma predeterminada.
  • Los modelos ARIMA_PLUS te permiten configurar el argumento AUTO_ARIMA para realizar el ajuste de hiperparámetros a través del algoritmo auto.ARIMA. Este algoritmo realiza el ajuste de hiperparámetros para el módulo de tendencia. El ajuste de hiperparámetros no es compatible con toda la canalización de modelado.

Para obtener información sobre las instrucciones y funciones de SQL compatibles para cada tipo de modelo, consulta Recorrido del usuario de extremo a extremo para cada modelo.

Ubicaciones

Para obtener información sobre las ubicaciones que admiten el ajuste de hiperparámetros, consulta Ubicaciones de BigQuery ML.

Configura hiperparámetros

Para ajustar un hiperparámetro, debes especificar un rango de valores para ese hiperparámetro que el modelo pueda usar en un conjunto de pruebas. Para ello, puedes usar una de las siguientes palabras clave cuando configures el hiperparámetro en la declaración CREATE MODEL, en lugar de proporcionar un solo valor:

  • HPARAM_RANGE: un valor ARRAY(FLOAT64) de dos elementos que define los límites mínimos y máximos del espacio de búsqueda de valores continuos para un hiperparámetro. Usa esta opción para especificar un rango de valores para un hiperparámetro, por ejemplo, LEARN_RATE = HPARAM_RANGE(0.0001, 1.0).

  • HPARAM_CANDIDATES: un valor ARRAY(STRUCT) que especifica el conjunto de valores discretos para el hiperparámetro. Usa esta opción para especificar un conjunto de valores para un hiperparámetro, por ejemplo, OPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL']).

Hiperparámetros y objetivos

En la siguiente tabla, se enumeran los hiperparámetros y objetivos admitidos para cada tipo de modelo que admite el ajuste de hiperparámetros:

Tipo de modelo Objetivos de los hiperparámetros Hiperparámetro Intervalo válido Rango predeterminado Tipo de escala
LINEAR_REG MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predeterminado)

EXPLAINED_VARIANCE
L1_REG

L2_REG
(0, ∞]

(0, ∞]
(0, 10]

(0, 10]
LOG

LOG
LOGISTIC_REG PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (predeterminado)
L1_REG

L2_REG
(0, ∞]

(0, ∞]
(0, 10]

(0, 10]
LOG

LOG
KMEANS DAVIES_BOULDIN_INDEX NUM_CLUSTERS [2, 100] [2, 10] LINEAR
MATRIX_
FACTORIZATION
(explícito)
MEAN_SQUARED_ERROR NUM_FACTORS

L2_REG
[2, 200]

(0, ∞)
[2, 20]

(0, 10]
LINEAR

LOG
MATRIX_
FACTORIZATION
(implícito)
MEAN_AVERAGE_PRECISION (predeterminado)

MEAN_SQUARED_ERROR

NORMALIZED_DISCOUNTED_CUMULATIVE_GAIN

AVERAGE_RANK
NUM_FACTORS

L2_REG

WALS_ALPHA
[2, 200]

(0, ∞)

[0, ∞)
[2, 20]

(0, 10]

[0, 100]
LINEAR

LOG

LINEAR
AUTOENCODER MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR (predeterminado)

MEAN_SQUARED_LOG_ERROR
LEARN_RATE

BATCH_SIZE

L1_REG

L2_REG

L1_REG_ACTIVATION

DROPOUT

HIDDEN_UNITS


OPTIMIZER



ACTIVATION_FN
[0, 1]

(0, ∞)

(0, ∞)

(0, ∞)

(0, ∞)


[0, 1)

Array de [1, ∞)

{ADAM, ADAGRAD, FTRL, RMSPROP, SGD}

{RELU, RELU6, CRELU, ELU, SELU, SIGMOID, TANH}
[0, 1]

[16, 1024]

(0, 10]

(0, 10]

(0, 10]


[0, 0.8]

N/A

{ADAM, ADAGRAD, FTRL, RMSPROP, SGD}

N/A
LOG

LOG

LOG

LOG

LOG


LINEAR

N/A

N/A



N/A
DNN_CLASSIFIER PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (predeterminado)
BATCH_SIZE

DROPOUT

HIDDEN_UNITS

LEARN_RATE

OPTIMIZER



L1_REG

L2_REG

ACTIVATION_FN
(0, ∞)

[0, 1)

Array de [1, ∞)

[0, 1]

{ADAM, ADAGRAD, FTRL, RMSPROP, SGD}

(0, ∞)

(0, ∞)

{RELU, RELU6, CRELU, ELU, SELU, SIGMOID, TANH}
[16, 1024]

[0, 0.8]

N/A

[0, 1]

{ADAM, ADAGRAD, FTRL, RMSPROP, SGD}

(0, 10]

(0, 10]

N/A
LOG

LINEAR

N/A

LINEAR

N/A



LOG

LOG

N/A
DNN_REGRESSOR MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predeterminado)

EXPLAINED_VARIANCE
DNN_LINEAR_
COMBINED_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (predeterminado)
BATCH_SIZE

DROPOUT

HIDDEN_UNITS

L1_REG

L2_REG

ACTIVATION_FN
(0, ∞)

[0, 1)

Array of [1, ∞)

(0, ∞)

(0, ∞)

{RELU, RELU6, CRELU, ELU, SELU, SIGMOID, TANH}
[16, 1024]

[0, 0.8]

N/A

(0, 10]

(0, 10]

N/A
LOG

LINEAR

N/A

LOG

LOG

N/A
DNN_LINEAR_
COMBINED_
REGRESSOR
MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predeterminado)

EXPLAINED_VARIANCE
BOOSTED_TREE_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (predeterminado)
LEARN_RATE

L1_REG

L2_REG

DROPOUT

MAX_TREE_DEPTHMAX_TREE_DEPTH

SUBSAMPLE

MIN_SPLIT_LOSS

NUM_PARALLEL_TREE

MIN_TREE_CHILD_WEIGHT

COLSAMPLE_BYTREE

COLSAMPLE_BYLEVEL

COLSAMPLE_BYNODE

BOOSTER_TYPE

DART_NORMALIZE_TYPE

TREE_METHOD
[0, ∞)

(0, ∞)

(0, ∞)

[0, 1]

[1, 20]



(0, 1]

[0, ∞)

[1, ∞)


[0, ∞)


[0, 1]


[0, 1]


[0, 1]


{GBTREE, DART}

{TREE, FOREST}

{AUTO, EXACT, APPROX, HIST}
[0, 1]

(0, 10]

(0, 10]

N/A

[1, 10]



(0, 1]

N/A

N/A


N/A


N/A


N/A


N/A


N/A

N/A

N/A
LINEAR

LOG

LOG

LINEAR

LINEAR



LINEAR

LINEAR

LINEAR


LINEAR


LINEAR


LINEAR


LINEAR


N/A

N/A

N/A
BOOSTED_TREE_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predeterminado)

EXPLAINED_VARIANCE
RANDOM_FOREST_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (predeterminado)
L1_REG

L2_REG

MAX_TREE_DEPTH

SUBSAMPLE

MIN_SPLIT_LOSS

NUM_PARALLEL_TREE

MIN_TREE_CHILD_WEIGHT

COLSAMPLE_BYTREE

COLSAMPLE_BYLEVEL

COLSAMPLE_BYNODE

TREE_METHOD
(0, ∞)

(0, ∞)

[1, 20]

(0, 1)

[0, ∞)

[2, ∞)


[0, ∞)


[0, 1]


[0, 1]


[0, 1]

{AUTO, EXACT, APPROX, HIST}
(0, 10]

(0, 10]

[1, 20]

(0, 1)

N/A

[2, 200]


N/A


N/A


N/A


N/A


N/A
LOG

LOG

LINEAR

LINEAR

LINEAR

LINEAR


LINEAR


LINEAR


LINEAR


LINEAR


N/A
RANDOM_FOREST_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predeterminado)

EXPLAINED_VARIANCE

La mayoría de los hiperparámetros de escala LOG usan el límite inferior abierto de 0. Aún puedes establecer 0 como el límite inferior; para esto; usa la palabra clave HPARAM_RANGE para establecer el rango de hiperparámetros. Por ejemplo, en un clasificador de árbol con boosting puedes establecer el rango para el hiperparámetro L1_REG como L1_REG = HPARAM_RANGE(0, 5). Un valor de 0 se convierte en 1e-14.

Se admiten hiperparámetros condicionales. Por ejemplo, en un modelo de regresor de árbol con boosting, solo puedes ajustar elDART_NORMALIZE_TYPE hiperparámetro cuando el valor del hiperparámetro BOOSTER_TYPE esDART. En este caso, se especifican los espacios de búsqueda y las condiciones se controlan automáticamente, como se muestra en el siguiente ejemplo:

BOOSTER_TYPE = HPARAM_CANDIDATES(['DART', 'GBTREE'])
DART_NORMALIZE_TYPE = HPARAM_CANDIDATES(['TREE', 'FOREST'])

Punto de partida de la búsqueda

Si no especificas un espacio de búsqueda para un hiperparámetro mediante HPARAM_RANGE o HPARAM_CANDIDATES, la búsqueda comienza desde el valor predeterminado de ese hiperparámetro, como se documenta en el tema CREATE MODEL para ese tipo de modelo. Por ejemplo, si ejecutas el ajuste de hiperparámetros para un modelo de árbol con boosting y no especificas un valor para el hiperparámetro L1_REG, entonces la búsqueda comenzará desde 0, el valor predeterminado.

Si especificas un espacio de búsqueda para un hiperparámetro mediante el uso de HPARAM_RANGE o HPARAM_CANDIDATES, los puntos de partida de la búsqueda dependen de si el espacio de búsqueda especificado incluye el valor predeterminado para ese hiperparámetro, como se documenta en el tema CREATE MODEL para ese tipo de modelo:

  • Si el rango especificado contiene el valor predeterminado, ahí empieza la búsqueda. Por ejemplo, si ejecutas el ajuste de hiperparámetros para un modelo de factorización de matrices implícita y especificas el valor [20, 30, 40, 50] para el hiperparámetro WALS_ALPHA, luego la búsqueda comienza en 40, el valor predeterminado.
  • Si el rango especificado no contiene el valor predeterminado, la búsqueda comienza desde el punto en el rango especificado que esté más cerca del valor predeterminado. Por ejemplo, si especificas el valor [10, 20, 30] para el hiperparámetro WALS_ALPHA, la búsqueda comienza desde 30, que es el valor más cercano al valor predeterminado de 40.

División de datos

Cuando especificas un valor para la opción NUM_TRIALS, el servicio identifica que estás haciendo un ajuste de hiperparámetros y realiza automáticamente una división de 3 vías en los datos de entrada para dividirlos en conjuntos de entrenamiento, evaluación y prueba. Según la configuración predeterminada, los datos de entrada son aleatorios y, luego, se dividen el 80% para el entrenamiento, el 10% para la evaluación y el 10% para las pruebas.

Los conjuntos de entrenamiento y evaluación se usan en cada entrenamiento de prueba de la misma manera que en los modelos que no usan el ajuste de hiperparámetros. Las sugerencias del hiperparámetro de prueba se calculan según las métricas de evaluación del modelo para ese tipo de modelo. Al final de cada entrenamiento de prueba, el conjunto de prueba se usa para probar la prueba y registrar sus métricas en el modelo. Esto garantiza la objetividad de las métricas de evaluación de los informes finales; para ello, se usan de datos que el modelo aún no ha analizado. Los datos de evaluación se usan para calcular las métricas intermedias de la sugerencia de hiperparámetros, mientras que los datos de prueba se usan para calcular las métricas finales del modelo objetivo.

Si solo deseas usar un conjunto de entrenamiento, especifica NO_SPLIT. para la DATA_SPLIT_METHOD opción de la declaración CREATE MODEL.

Si solo deseas usar conjuntos de entrenamiento y evaluación, especifica 0 para la opción DATA_SPLIT_TEST_FRACTION de la declaración CREATE MODEL. Cuando el conjunto de prueba está vacío, el conjunto de evaluación se utiliza como el conjunto de prueba para los informes finales de las métricas de evaluación.

Las métricas de los modelos que se generan a partir de un trabajo de entrenamiento normal y las de un trabajo de entrenamiento de ajuste de hiperparámetros solo se pueden comparar cuando las fracciones de división de datos son iguales. Por ejemplo, los siguientes modelos son comparables:

  • Ajuste de no de hiperparámetros: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
  • Ajuste de hiperparámetros: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0

Rendimiento

El rendimiento del modelo cuando se usa el ajuste de hiperparámetros no suele ser peor que el rendimiento del modelo cuando se usa el espacio de búsqueda predeterminado y no se usa el ajuste de hiperparámetros. Un modelo que usa el espacio de búsqueda predeterminado y no usa el ajuste de hiperparámetros siempre usa los hiperparámetros predeterminados en la primera prueba.

Para confirmar las mejoras de rendimiento del modelo que proporciona el ajuste de hiperparámetros, compara la prueba óptima para el modelo de ajuste de hiperparámetros con la primera prueba para el modelo de ajuste de hiperparámetros.

Aprendizaje por transferencia

El aprendizaje por transferencia se habilita de forma predeterminada cuando configuras la opción HPARAM_TUNING_ALGORITHM en la declaración CREATE MODEL como VIZIER_DEFAULT. El ajuste de hiperparámetros para un modelo se beneficia del aprendizaje de modelos previamente ajustados si cumple con los siguientes requisitos:

  • Tiene el mismo tipo de modelo que los modelos previamente ajustados.
  • Se encuentra en el mismo proyecto que los modelos ajustados con anterioridad.
  • Usa el mismo espacio de búsqueda de hiperparámetros O un subconjunto del el espacio de búsqueda de hiperparámetros de modelos previamente ajustados. Un subconjunto usa los mismos nombres y tipos de hiperparámetros, pero no es necesario que tenga los mismos rangos. Por ejemplo, (a:[0, 10]) se considera como un subconjunto de (a:[-1, 1], b:[0, 1]).

El aprendizaje por transferencia no requiere que los datos de entrada sean los mismos.

El aprendizaje por transferencia ayuda a resolver el problema de inicio en frío en el que el sistema realiza una exploración aleatoria durante el primer lote de prueba. El aprendizaje por transferencia proporciona al sistema algún conocimiento inicial sobre los hiperparámetros y sus objetivos. Para mejorar de forma continua la calidad del modelo, siempre entrena un modelo nuevo de ajuste de hiperparámetros con los mismos hiperparámetros o con un subconjunto de ellos.

El aprendizaje por transferencia ayuda a que el ajuste de hiperparámetros converja más rápido, en lugar de favorecer la convergencia de los submodelos.

Manejo de errores

El ajuste de hiperparámetros maneja los errores de las siguientes maneras:

  • Cancelación: Si se cancela un trabajo de entrenamiento mientras se ejecuta, todas las pruebas exitosas permanecen disponibles.

  • Entrada no válida: Si la entrada del usuario no es válida, el servicio muestra un error del usuario.

  • Hiperparámetros no válidos: Si los hiperparámetros no son válidos para una prueba, se omite la prueba y se marca como INFEASIBLE en el resultado de la función ML.TRIAL_INFO.

  • Error interno de prueba: Si más del 10% del valor de NUM_TRIALS falla debido a INTERNAL_ERROR, el trabajo de entrenamiento se detiene y muestra un error de usuario.

  • Si menos del 10% del valor NUM_TRIALS falla debido a INTERNAL_ERROR, el entrenamiento continúa con las pruebas con errores marcadas como FAILED en el resultado de la función ML.TRIAL_INFO.

Funciones de entrega de modelos

Puedes usar modelos de salida del ajuste de hiperparámetros con varias funciones de entrega de modelos existentes. Para usar estas funciones, sigue estas reglas:

  • Cuando la función toma datos de entrada, solo se muestra el resultado de una prueba. De forma predeterminada, esta es la prueba óptima, pero también puedes elegir una prueba en particular; para ello, especifica TRIAL_ID como un argumento para la función determinada. Puedes obtener el TRIAL_ID del resultado de la función ML.TRIAL_INFO. Se admiten las siguientes funciones:

  • Cuando la función no toma datos de entrada, se muestran todos los resultados de la prueba, y la primera columna de resultado es TRIAL_ID. Se admiten las siguientes funciones:

El resultado de ML.FEATURE_INFO no cambia, ya que todas las pruebas comparten los mismos datos de entrada.

Las métricas de evaluación de ML.EVALUATE y ML.TRIAL_INFO pueden ser diferentes debido a la forma en que se dividen los datos de entrada. De forma predeterminada, ML.EVALUATE se ejecuta en los datos de prueba, mientras que ML.TRIAL_INFO se ejecuta en los datos de evaluación. Para obtener más información, consulta División de datos.

Funciones no compatibles

La función ML.TRAINING_INFO muestra información para cada iteración, y los resultados de las iteraciones no se guardan en los modelos de ajuste de hiperparámetros. En su lugar, se guardan los resultados de la prueba. Puedes usar la función ML.TRIAL_INFO para obtener información sobre los resultados de la prueba.

Exportación de modelos

Puedes exportar modelos creados con ajuste de hiperparámetros a las ubicaciones de Cloud Storage con la declaración EXPORT MODEL. Puedes exportar la prueba óptima predeterminada o cualquier prueba específica.

Precios

El costo del entrenamiento de ajuste de hiperparámetros es la suma del costo de todas las pruebas ejecutadas. El precio de una prueba es coherente con el modelo de precios de BigQuery ML existente.

Preguntas frecuentes

¿Cuántas pruebas necesito para ajustar un modelo?

Recomendamos usar al menos 10 pruebas para un hiperparámetro, por lo que la cantidad total de pruebas debe ser al menos 10 * num_hyperparameters. Si usas el espacio de búsqueda predeterminado, consulta la columna Hiperparámetros en la tabla Hiperparámetros y objetivos para ver la cantidad de hiperparámetros ajustados de forma predeterminada para un tipo de modelo determinado.

¿Qué sucede si no veo mejoras en el rendimiento a través del ajuste de hiperparámetros?

Asegúrate de seguir las instrucciones de este documento para obtener una comparación justa. Si aún no ves las mejoras de rendimiento, es posible que los hiperparámetros predeterminados ya funcionen bien. Te recomendamos enfocarte en la ingeniería de atributos o probar otros tipos de modelos antes de probar otra ronda de ajuste de hiperparámetros.

¿Qué sucede si quiero seguir ajustando un modelo?

Entrena un modelo nuevo de ajuste de hiperparámetros con el mismo espacio de búsqueda. El aprendizaje por transferencia integrado ayuda a continuar con el ajuste según los modelos ajustados con anterioridad.

¿Tengo que volver a entrenar el modelo con todos los datos y los hiperparámetros óptimos?

Esto depende de los siguientes factores:

  • Los modelos k-means ya usan todos los datos como datos de entrenamiento, por lo que no hay necesidad de para volver a entrenar el modelo.

  • En el caso de los modelos de factorización de matrices, puedes volver a entrenar el modelo con los hiperparámetros seleccionados y todos los datos de entrada para obtener una mejor cobertura de los usuarios y los elementos.

  • Para todos los demás tipos de modelos, por lo general, no es necesario volver a entrenar. El servicio ya conserva el 80% de los datos de entrada para el entrenamiento durante la división de datos aleatoria predeterminada. Aún puedes volver a entrenar el modelo con más datos de entrenamiento y los hiperparámetros seleccionados si tu conjunto de datos es pequeño, pero dejar pocos datos de evaluación para la interrupción anticipada podría empeorar el sobreajuste.

¿Qué sigue?

Para intentar ejecutar el ajuste de hiperparámetros, consulta Usa el ajuste de hiperparámetros de BigQuery ML para mejorar el rendimiento del modelo.