Descripción general del ajuste de hiperparámetros
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:
- Regresión logística y lineal
- k-means
- factorización de matrices
- Codificador automático
- Árboles con boosting
- Bosque aleatorio
- Red neuronal profunda (DNN)
- Red profunda y amplia
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 valorARRAY(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 valorARRAY(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_ (explícito)
|
MEAN_SQUARED_ERROR
|
NUM_FACTORS
L2_REG
|
[2, 200]
(0, ∞)
|
[2, 20]
(0, 10]
|
LINEAR
LOG
|
MATRIX_ (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_
|
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 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_
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predeterminado)
EXPLAINED_VARIANCE
|
||||
BOOSTED_TREE_
|
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_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predeterminado)
EXPLAINED_VARIANCE
|
||||
RANDOM_FOREST_
|
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_ |
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ámetroWALS_ALPHA
, luego la búsqueda comienza en40
, 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ámetroWALS_ALPHA
, la búsqueda comienza desde30
, que es el valor más cercano al valor predeterminado de40
.
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ónML.TRIAL_INFO
.Error interno de prueba: Si más del 10% del valor de
NUM_TRIALS
falla debido aINTERNAL_ERROR
, el trabajo de entrenamiento se detiene y muestra un error de usuario.Si menos del 10% del valor
NUM_TRIALS
falla debido aINTERNAL_ERROR
, el entrenamiento continúa con las pruebas con errores marcadas comoFAILED
en el resultado de la funciónML.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 elTRIAL_ID
del resultado de la funciónML.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
En esta sección, se proporcionan respuestas a algunas preguntas frecuentes sobre el ajuste de hiperparámetros.
¿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.