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:
- Regresión lineal y logística
- K-medias
- Factorización de matriz
- Autoencoder
- Árboles de potenciación
- Bosque aleatorio
- Red neuronal profunda (DNN)
- Red amplia y profunda
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
: valorARRAY(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 deARRAY(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_ (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 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_
|
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_
|
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
N/A LINEAR
|
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
. 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ámetroWALS_ALPHA
, la búsqueda empieza en40
, 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ámetroWALS_ALPHA
, la búsqueda empieza por30
, que es el valor más cercano al valor predeterminado de40
.
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ó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 devuelve un error de usuario.Si menos del 10% del valor de
NUM_TRIALS
falla debido aINTERNAL_ERROR
, el entrenamiento continúa con las pruebas fallidas marcadas comoFAILED
en la salida de la funciónML.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 elTRIAL_ID
del resultado de la funciónML.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
- Para probar el ajuste de hiperparámetros, consulta el artículo Usar el ajuste de hiperparámetros de BigQuery ML para mejorar el rendimiento de los modelos.
- Para obtener más información sobre las instrucciones y funciones de SQL admitidas para los modelos de aprendizaje automático, consulta Recorridos de usuario completos para modelos de aprendizaje automático.