Visão geral do ajuste de hiperparâmetro

No machine learning, o ajuste de hiperparâmetros identifica um conjunto de hiperparâmetros ideais para um algoritmo de aprendizado. Um hiperparâmetro é o argumento de um modelo cujo valor é definido antes do início do processo de aprendizado. Em contrapartida, os valores de outros parâmetros, como coeficientes de um modelo linear, são aprendidos.

O ajuste de hiperparâmetros possibilita que você passe menos tempo interagindo manualmente com os hiperparâmetros e mais tempo explorando insights provenientes de dados.

É possível especificar opções de ajuste de hiperparâmetros para os seguintes tipos de modelo:

Para esses tipos de modelos, o ajuste de hiperparâmetro é ativado quando você especifica um valor para a opção NUM_TRIALS na instrução CREATE MODEL.

Os modelos a seguir também permitem o ajuste de hiperparâmetros, mas não permitem especificar valores específicos:

  • Por padrão, os modelos do AutoML Tables têm o ajuste automático de hiperparâmetros incorporado ao treinamento do modelo.
  • Os modelos ARIMA_PLUS permitem que você defina o argumento AUTO_ARIMA para realizar o ajuste de hiperparâmetros usando o algoritmo auto.ARIMA. Esse algoritmo executa o ajuste de hiperparâmetros para o módulo de tendências. O ajuste de hiperparâmetro não é compatível com todo o pipeline de modelagem.

Para informações sobre as funções e instruções SQL compatíveis com cada tipo de modelo, consulte Jornada do usuário completa de cada modelo.

Locais

Para mais informações sobre quais locais são compatíveis com o ajuste de hiperparâmetros, consulte Locais do BigQuery ML.

Definir hiperparâmetros

Para ajustar um hiperparâmetro, especifique um intervalo de valores para ele que o modelo possa usar em um conjunto de testes. Para fazer isso, use uma das seguintes palavras-chave ao definir o hiperparâmetro na instrução CREATE MODEL, em vez de fornecer um único valor:

  • HPARAM_RANGE: um valor ARRAY(FLOAT64) de dois elementos que define os limites mínimo e máximo do espaço de pesquisa de valores contínuos para um hiperparâmetro. Use essa opção para especificar um intervalo de valores para um hiperparâmetro, por exemplo, LEARN_RATE = HPARAM_RANGE(0.0001, 1.0).

  • HPARAM_CANDIDATES: um valor ARRAY(STRUCT) que especifica o conjunto de valores discretos para o hiperparâmetro. Use essa opção para especificar um conjunto de valores para um hiperparâmetro, por exemplo, OPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL']).

Hiperparâmetros e objetivos

Na tabela a seguir, listamos os hiperparâmetros e objetivos compatíveis com cada tipo de modelo compatível com o ajuste de hiperparâmetros:

Tipo de modelo Objetivos do hiperparâmetro Hiperparâmetro Intervalo válido Intervalo padrão Tipo de escala
LINEAR_REG MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (padrão)

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 (padrão)
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 (padrão)

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 (padrão)

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)

Matriz 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 (padrão)
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 (padrão)

EXPLAINED_VARIANCE
DNN_LINEAR_
COMBINED_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (padrão)
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 (padrão)

EXPLAINED_VARIANCE
BOOSTED_TREE_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (padrão)
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 (padrão)

EXPLAINED_VARIANCE
RANDOM_FOREST_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (padrão)
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 (padrão)

EXPLAINED_VARIANCE

A maioria dos hiperparâmetros de escala LOG usa o limite inferior aberto de 0. Ainda é possível definir 0 como o limite inferior usando a palavra-chave HPARAM_RANGE para definir o intervalo de hiperparâmetro. Por exemplo, em um modelo de classificador de árvore otimizado, é possível definir o intervalo do hiperparâmetro L1_REG como L1_REG = HPARAM_RANGE(0, 5). Um valor de 0 é convertido em 1e-14.

Os hiperparâmetros condicionais são compatíveis. Por exemplo, em um modelo de regressor de árvore otimizado, só é possível ajustar o hiperparâmetro DART_NORMALIZE_TYPE quando o valor do hiperparâmetro BOOSTER_TYPE é DART. Nesse caso, você especifica os espaços de pesquisa e as condições são tratadas automaticamente, como mostrado no exemplo a seguir:

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

Ponto de partida da pesquisa

Se você não especificar um espaço de pesquisa para um hiperparâmetro usando HPARAM_RANGE ou HPARAM_CANDIDATES, a pesquisa começará a partir do valor padrão do hiperparâmetro, conforme documentado no tópico CREATE MODEL para esse tipo de modelo. Por exemplo, se você estiver executando o ajuste de hiperparâmetros para um modelo de árvore otimizada e você não especificar um valor para o hiperparâmetro L1_REG, a pesquisa começará no 0, o valor padrão.

Se você especificar um espaço de pesquisa para um hiperparâmetro usandoHPARAM_RANGE ou HPARAM_CANDIDATES, os pontos de partida da pesquisa dependerão de o espaço de pesquisa especificado incluir ou não o valor padrão do hiperparâmetro, conforme documentado no CREATE MODEL para esse tipo de modelo:

  • Se o intervalo especificado contiver o valor padrão, é aí que a pesquisa começará. Por exemplo, se você estiver executando o ajuste de hiperparâmetro para um modelo de fatoração de matrizes implícito e especifique o valor[20, 30, 40, 50] para o hiperparâmetro WALS_ALPHA, a pesquisa começará no 40, o valor padrão.
  • Se o intervalo especificado não contiver o valor padrão, a pesquisa começará do ponto no intervalo especificado mais próximo do valor padrão. Por exemplo, se você especificar o valor [10, 20, 30] para o hiperparâmetro WALS_ALPHA, a pesquisa começará em 30, que é o valor mais próximo do valor padrão de 40.

Divisão de dados

Quando você especifica um valor para a opção NUM_TRIALS, o serviço identifica que você está fazendo o ajuste de hiperparâmetros e realiza automaticamente uma divisão de três vias nos dados de entrada para dividi-los em conjuntos de treinamento, avaliação e teste. Por padrão, os dados de entrada são aleatórios e divididos em 80% para treinamento, 10% para avaliação e 10% para teste.

Os conjuntos de treinamento e avaliação são usados em cada treinamento de teste, da mesma forma que nos modelos que não usam o ajuste de hiperparâmetros. As sugestões de hiperparâmetros de teste são calculadas com base nas métricas de avaliação do modelo para esse tipo de modelo. No final de cada treinamento de teste, o conjunto de teste é usado para testar o teste e registrar as métricas no modelo. Isso garante a objetividade das métricas de avaliação de geração de relatórios finais usando dados que ainda não foram analisados pelo modelo. Os dados de avaliação são usados para calcular as métricas intermediárias para sugestão de hiperparâmetro, enquanto os dados de teste são usados para calcular as métricas finais do modelo objetivo.

Se você quiser usar apenas um conjunto de treinamento, especifique NO_SPLIT para a opção DATA_SPLIT_METHOD da instrução CREATE MODEL.

Se você quiser usar apenas conjuntos de treinamento e avaliação, especifique 0 para a opção DATA_SPLIT_TEST_FRACTION da instrução CREATE MODEL. Quando o conjunto de testes está vazio, o conjunto de avaliação é usado como o conjunto de teste para o relatório de métricas de avaliação final.

As métricas dos modelos gerados a partir de um job de treinamento normal e de um job de treinamento de ajuste de hiperparâmetros só são comparáveis quando as frações de divisão de dados são iguais. Por exemplo, os seguintes modelos são comparáveis:

  • Ajuste sem hiperparâmetro: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
  • Ajuste de hiperparâmetro: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0

Desempenho

O desempenho do modelo ao usar o ajuste de hiperparâmetros normalmente não é pior do que o desempenho do modelo quando você usa o espaço de pesquisa padrão e não o ajuste de hiperparâmetro. Um modelo que usa o espaço de pesquisa padrão e não usa o ajuste de hiperparâmetros sempre usa os hiperparâmetros padrão no primeiro teste.

Para confirmar as melhorias de desempenho do modelo fornecidas pelo ajuste de hiperparâmetro, compare o teste ideal do modelo de ajuste de hiperparâmetro com o primeiro teste do modelo de ajuste sem hiperparâmetro.

Aprendizado por transferência

O aprendizado por transferência é ativado por padrão quando você define a opção HPARAM_TUNING_ALGORITHM na instrução CREATE MODEL como VIZIER_DEFAULT. O ajuste de hiperparâmetro para um modelo se beneficia do aprendizado de modelos ajustados anteriormente, caso atenda aos seguintes requisitos:

  • Ele tem o mesmo tipo de modelo dos modelos ajustados anteriormente.
  • Ele reside no mesmo projeto que os modelos ajustados anteriormente.
  • Ele usa o mesmo espaço de pesquisa de hiperparâmetro OU um subconjunto do espaço de pesquisa de hiperparâmetro de modelos ajustados anteriormente. Um subconjunto usa os mesmos nomes e tipos de hiperparâmetros, mas não precisa ter os mesmos intervalos. Por exemplo, (a:[0, 10]) é considerado um subconjunto de (a:[-1, 1], b:[0, 1]).

O aprendizado por transferência não exige que os dados de entrada sejam os mesmos.

O aprendizado por transferência ajuda a resolver o problema de inicialização a frio em que o sistema realiza exploração aleatória durante o primeiro lote de teste. O aprendizado por transferência fornece ao sistema um conhecimento inicial sobre os hiperparâmetros e os objetivos deles. Para melhorar continuamente a qualidade do modelo, sempre treine um novo modelo de ajuste de hiperparâmetros com o mesmo ou um subconjunto de hiperparâmetros.

O aprendizado por transferência ajuda o ajuste de hiperparâmetros a convergir mais rapidamente, em vez de ajudar os submodelos a convergir.

Tratamento de erros

O ajuste de hiperparâmetro processa erros das seguintes maneiras:

  • Cancelamento: se um job de treinamento for cancelado durante a execução, todos os testes bem-sucedidos permanecerão utilizáveis.

  • Entrada inválida: se a entrada do usuário for inválida, o serviço retornará um erro.

  • Hiperparâmetros inválidos: se os hiperparâmetros forem inválidos para um teste, ele será ignorado e marcado como INFEASIBLE na saída da função ML.TRIAL_INFO.

  • Erro interno de teste: se mais de 10% do valor NUM_TRIALS falhar devido a INTERNAL_ERROR, o job de treinamento será interrompido e retornará um erro de usuário.

  • Se menos de 10% do valor NUM_TRIALS falhar devido a INTERNAL_ERROR, o treinamento continuará com os testes com falha marcados como FAILED na saída da função ML.TRIAL_INFO.

Funções de disponibilização de modelo

É possível usar modelos de saída do ajuste de hiperparâmetro com várias funções de disponibilização de modelos atuais. Para usar essas funções, siga estas regras:

  • Quando a função recebe dados de entrada, apenas o resultado de um teste é retornado. Por padrão, esse é o teste ideal, mas você também pode escolher um teste específico especificando o TRIAL_ID como argumento para a função em questão. É possível acessar o TRIAL_ID da saída da função ML.TRIAL_INFO. Há suporte para as seguintes funções:

  • Quando a função não recebe dados de entrada, todos os resultados do teste são retornados, e a primeira coluna de saída é TRIAL_ID. Há suporte para as seguintes funções:

A saída de ML.FEATURE_INFO não muda, porque todos os testes compartilham os mesmos dados de entrada.

As métricas de avaliação de ML.EVALUATE e ML.TRIAL_INFO podem ser diferentes devido à maneira como os dados de entrada são divididos. Por padrão, ML.EVALUATE é executado nos dados de teste, enquanto ML.TRIAL_INFO é executado nos dados de avaliação. Para mais informações, consulte Divisão de dados.

Funções não compatíveis

A função ML.TRAINING_INFO retorna informações para cada iteração, e os resultados da iteração não são salvos em modelos de ajuste de hiperparâmetros. Os resultados dos testes vão ser salvos. Use a função ML.TRIAL_INFO para receber informações sobre os resultados do teste.

Exportação de modelo

É possível exportar modelos criados com o ajuste de hiperparâmetros para locais do Cloud Storage usando a instrução EXPORT MODEL. É possível exportar o teste ideal padrão ou qualquer teste especificado.

Preços

O custo do treinamento de ajuste de hiperparâmetros é a soma do custo de todos os testes executados. O preço de um teste é consistente com o modelo de preços atual do BigQuery ML.

Perguntas frequentes

De quantos testes eu preciso para ajustar um modelo?

Recomendamos usar pelo menos 10 testes para um hiperparâmetro, de modo que o número total de testes precisa ser de pelo menos 10 * num_hyperparameters. Se você estiver usando o espaço de pesquisa padrão, consulte a coluna Hiperparâmetros na tabela Hiperparâmetros e objetivos para ver o número de hiperparâmetros ajustados padrão para um determinado tipo de modelo.

E se eu não perceber melhorias de performance com o ajuste de hiperparâmetros?

Siga as orientações deste documento para fazer uma comparação justa. Se ainda não houver melhorias de desempenho, isso pode significar que os hiperparâmetros padrão já funcionam bem para você. Concentre-se na engenharia de atributos ou teste outros tipos de modelos antes de tentar outra rodada de ajustes de hiperparâmetros.

E se eu quiser continuar ajustando um modelo?

Treine um novo modelo de ajuste de hiperparâmetros com o mesmo espaço de pesquisa. O aprendizado de transferência integrado ajuda a continuar o ajuste com base nos modelos anteriormente ajustados.

Preciso treinar novamente o modelo com todos os dados e os hiperparâmetros ideais?

Isso depende dos seguintes fatores:

  • Os modelos K-means já usam todos os dados como dados de treinamento, portanto, não é necessário treiná-lo novamente.

  • Para modelos de fatoração de matrizes, é possível treinar novamente o modelo com os hiperparâmetros selecionados e todos os dados de entrada para uma melhor cobertura de usuários e itens.

  • Para todos os outros tipos de modelo, não é necessário fazer um novo treinamento. O serviço já mantém 80% dos dados de entrada para treinamento durante a divisão de dados aleatória padrão. Ainda é possível treinar novamente o modelo com mais dados de treinamento e os hiperparâmetros selecionados se o conjunto de dados for pequeno. No entanto, deixar poucos dados de avaliação para parada antecipada pode piorar o overfitting.

A seguir

Para tentar executar o ajuste de hiperparâmetros, consulte Usar o ajuste de hiperparâmetros do BigQuery ML para melhorar o desempenho do modelo.