Información general sobre el ajuste de hiperparámetros

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

El ajuste de hiperparámetros te permite dedicar menos tiempo a iterar hiperparámetros manualmente y más tiempo a explorar las estadísticas de los datos.

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

En estos tipos de modelos, la optimización de hiperparámetros se habilita cuando se especifica un valor para la opción NUM_TRIALS en la instrucción CREATE MODEL.

Para probar el ajuste de hiperparámetros en un modelo de regresión lineal, consulta el artículo Usar el ajuste de hiperparámetros de BigQuery ML para mejorar el rendimiento de los modelos.

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

  • Los modelos de AutoML Tables tienen el ajuste automático de hiperparámetros integrado en el entrenamiento del modelo de forma predeterminada.
  • Los modelos ARIMA_PLUS te permiten definir el argumento AUTO_ARIMA para ajustar los hiperparámetros mediante el algoritmo auto.ARIMA. Este algoritmo ajusta los hiperparámetros del módulo de tendencia. La optimización de hiperparámetros no se admite en todo el proceso de modelización.

Ubicaciones

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

Definir hiperparámetros

Para ajustar un hiperparámetro, debe especificar un intervalo 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 al definir el hiperparámetro en la instrucción CREATE MODEL, en lugar de proporcionar un solo valor:

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

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

Hiperparámetros y objetivos

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

Tipo de modelo Objetivos de hiperparámetros Hiperparámetro Intervalo válido Intervalo 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 of [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)

Matriz 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)

Matriz de [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


N/A


LINEAR
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. Puedes seguir definiendo 0 como límite inferior usando la palabra clave HPARAM_RANGE para definir el intervalo del hiperparámetro. Por ejemplo, en un modelo de clasificador de árbol reforzado, puedes definir el intervalo del hiperparámetro L1_REG como L1_REG = HPARAM_RANGE(0, 5). El valor 0 se convierte en 1e-14.

Se admiten hiperparámetros condicionales. Por ejemplo, en un modelo de regresión de árbol reforzado, solo puedes ajustar el hiperparámetro DART_NORMALIZE_TYPE cuando el valor del hiperparámetro BOOSTER_TYPE es DART. En este caso, se especifican los espacios de búsqueda y las condiciones se gestionan automáticamente, como se muestra en el siguiente ejemplo:

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

Buscar punto de partida

Si no especifica un espacio de búsqueda para un hiperparámetro mediante HPARAM_RANGE o HPARAM_CANDIDATES, la búsqueda se inicia desde el valor predeterminado de ese hiperparámetro, tal como se describe en el tema CREATE MODEL de ese tipo de modelo. Por ejemplo, si estás ajustando los hiperparámetros de un modelo de árbol reforzado y no especificas ningún valor para el hiperparámetro L1_REG, la búsqueda empezará por 0, que es el valor predeterminado.

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

  • Si el intervalo especificado contiene el valor predeterminado, la búsqueda empezará en ese punto. Por ejemplo, si estás ajustando los hiperparámetros de un modelo de factorización de matrices implícito y especificas el valor [20, 30, 40, 50] para el hiperparámetro WALS_ALPHA, la búsqueda empieza en 40, el valor predeterminado.
  • Si el intervalo especificado no contiene el valor predeterminado, la búsqueda empieza en el punto del intervalo especificado que esté más cerca del valor predeterminado. Por ejemplo,si especifica el valor [10, 20, 30] para el hiperparámetro WALS_ALPHA, la búsqueda empieza por 30, que es el valor más cercano al valor predeterminado de 40.

División de datos

Cuando especifica un valor para la opción NUM_TRIALS, el servicio identifica que está realizando un ajuste de hiperparámetros y divide automáticamente los datos de entrada en tres partes para dividirlos en conjuntos de entrenamiento, evaluación y prueba. De forma predeterminada, los datos de entrada se aleatorizan y, a continuación, se dividen en un 80% para el entrenamiento, un 10% para la evaluación y un 10% para las pruebas.

Los conjuntos de entrenamiento y evaluación se usan en cada entrenamiento de prueba, al igual que en los modelos que no usan el ajuste de hiperparámetros. Las sugerencias de hiperparámetros de prueba se calculan en función de las métricas de evaluación del modelo de ese tipo de modelo. Al final de cada entrenamiento de prueba, se usa el conjunto de datos de prueba para probar la prueba y registrar sus métricas en el modelo. De esta forma, se asegura la objetividad de las métricas de evaluación de los informes finales, ya que se usan datos que el modelo aún no ha analizado. Los datos de evaluación se usan para calcular las métricas intermedias de las sugerencias de hiperparámetros, mientras que los datos de prueba se usan para calcular las métricas finales y objetivas del modelo.

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

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

Las métricas de los modelos generados a partir de una tarea de entrenamiento normal y las de una tarea 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 parámetros que no son 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 de los modelos cuando se usa el ajuste de hiperparámetros suele ser igual o mejor que 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 en el rendimiento del modelo que proporciona el ajuste de hiperparámetros, compara la prueba óptima del modelo de ajuste de hiperparámetros con la primera prueba del modelo sin ajuste de hiperparámetros.

Aprendizaje por transferencia

El aprendizaje por transferencia está habilitado de forma predeterminada cuando se define la opción HPARAM_TUNING_ALGORITHM en la instrucción CREATE MODEL como VIZIER_DEFAULT. El ajuste de hiperparámetros de un modelo se beneficia de los modelos ajustados anteriormente si cumple los siguientes requisitos:

  • Tiene el mismo tipo de modelo que los modelos ajustados anteriormente.
  • Se encuentra en el mismo proyecto que los modelos ajustados anteriormente.
  • Utiliza el mismo espacio de búsqueda de hiperparámetros o un subconjunto del espacio de búsqueda de hiperparámetros de los modelos ajustados anteriormente. Un subconjunto usa los mismos nombres y tipos de hiperparámetros, pero no tiene por qué tener los mismos intervalos. Por ejemplo, (a:[0, 10]) se considera 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 del arranque 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 conocimientos iniciales sobre los hiperparámetros y sus objetivos. Para mejorar continuamente la calidad del modelo, entrena siempre un nuevo modelo 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 ayudar a que converjan los submodelos.

Gestión de errores

El ajuste de hiperparámetros gestiona los errores de las siguientes formas:

  • Cancelación: si se cancela una tarea de entrenamiento mientras se está ejecutando, todas las pruebas que se hayan completado correctamente seguirán siendo utilizables.

  • Entrada no válida: si la entrada del usuario no es válida, el servicio devuelve un error de usuario.

  • Hiperparámetros no válidos: si los hiperparámetros no son válidos para una prueba, se omitirá y se marcará 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 devuelve un error de usuario.

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

Funciones de aplicación de modelos

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

  • Cuando la función recibe datos de entrada, solo se devuelve el resultado de una prueba. De forma predeterminada, esta es la prueba óptima, pero también puedes elegir una prueba concreta especificando el TRIAL_ID como argumento de la función correspondiente. Puedes obtener el TRIAL_ID del resultado de la función ML.TRIAL_INFO. Se admiten las siguientes funciones:

  • Cuando la función no recibe datos de entrada, se devuelven todos los resultados de la prueba y la primera columna de salida 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 con los datos de prueba, mientras que ML.TRIAL_INFO se ejecuta con 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 devuelve información de 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 las pruebas.

Exportación de modelos

Puede exportar los modelos creados con la optimización de hiperparámetros a ubicaciones de Cloud Storage mediante la instrucción EXPORT MODEL. Puedes exportar la prueba óptima predeterminada o cualquier prueba especificada.

Precios

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

Preguntas frecuentes

En esta sección se responden algunas preguntas frecuentes sobre la optimización de hiperparámetros.

¿Cuántas pruebas necesito para optimizar un modelo?

Recomendamos usar al menos 10 pruebas para un hiperparámetro, por lo que el número total de pruebas debe ser al menos 10 * num_hyperparameters. Si utiliza el espacio de búsqueda predeterminado, consulte la columna Hiperparámetros de la tabla Hiperparámetros y objetivos para ver el número de hiperparámetros que se ajustan de forma predeterminada para un tipo de modelo concreto.

¿Qué ocurre si no veo mejoras en el rendimiento al usar el ajuste de hiperparámetros?

Sigue las directrices de este documento para hacer una comparación justa. Si sigues sin ver mejoras en el rendimiento, puede que los hiperparámetros predeterminados ya funcionen bien en tu caso. Puede que quieras centrarte en la ingeniería de funciones o probar otros tipos de modelos antes de volver a ajustar los hiperparámetros.

¿Qué ocurre si quiero seguir ajustando un modelo?

Entrena un nuevo modelo de ajuste de hiperparámetros con el mismo espacio de búsqueda. El aprendizaje por transferencia integrado te ayuda a seguir ajustando los modelos que hayas ajustado previamente.

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

Depende de los siguientes factores:

  • Los modelos de k-medias ya usan todos los datos como datos de entrenamiento, por lo que no es necesario 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 mejorar la cobertura de usuarios y elementos.

  • En el resto de los tipos de modelos, no suele ser necesario volver a entrenar el modelo. El servicio ya conserva el 80% de los datos de entrada para el entrenamiento durante la división aleatoria de datos predeterminada. Si tu conjunto de datos es pequeño, puedes volver a entrenar el modelo con más datos de entrenamiento y los hiperparámetros seleccionados, pero dejar pocos datos de evaluación para la parada anticipada puede empeorar el sobreajuste.

Siguientes pasos