Vista geral do aperfeiçoamento de hiperparâmetros

Na aprendizagem automática, o aperfeiçoamento de hiperparâmetros identifica um conjunto de hiperparâmetros ideais para um algoritmo de aprendizagem. Um hiperparâmetro é um argumento do modelo cujo valor é definido antes do início do processo de aprendizagem. Por outro lado, os valores de outros parâmetros, como os coeficientes de um modelo linear, são aprendidos.

O aperfeiçoamento de hiperparâmetros permite-lhe passar menos tempo a iterar manualmente os hiperparâmetros e mais tempo a concentrar-se na exploração de estatísticas a partir dos dados.

Pode especificar opções de otimização de hiperparâmetros para os seguintes tipos de modelos:

Para estes tipos de modelos, o ajuste de hiperparâmetros é ativado quando especifica um valor para a opção NUM_TRIALS na declaração CREATE MODEL.

Para experimentar a execução do ajuste de hiperparâmetros num modelo de regressão linear, consulte o artigo Use o ajuste de hiperparâmetros do BigQuery ML para melhorar o desempenho do modelo.

Os seguintes modelos também suportam o ajuste de hiperparâmetros, mas não permitem especificar valores particulares:

  • Os modelos do AutoML Tables têm a otimização automática de hiperparâmetros incorporada na preparação de modelos por predefinição.
  • Os modelos ARIMA_PLUS permitem definir o argumento AUTO_ARIMA para realizar o ajuste de hiperparâmetros através do algoritmo auto.ARIMA. Este algoritmo faz o aperfeiçoamento de hiperparâmetros para o módulo de tendência. A otimização de hiperparâmetros não é suportada para toda a pipeline de modelagem.

Localizações

Para informações sobre as localizações que suportam o ajuste de hiperparâmetros, consulte o artigo Localizações do BigQuery ML.

Defina hiperparâmetros

Para ajustar um hiperparâmetro, tem de especificar um intervalo de valores para esse hiperparâmetro que o modelo pode usar para um conjunto de testes. Pode fazê-lo usando uma das seguintes palavras-chave quando definir o hiperparâmetro na declaraçã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 esta 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 esta opção para especificar um conjunto de valores para um hiperparâmetro, por exemplo, OPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL']).

Hiperparâmetros e objetivos

A tabela seguinte indica os hiperparâmetros e os objetivos suportados para cada tipo de modelo que suporta o ajuste de hiperparâmetros:

Tipo de modelo Objetivos de hiperparâmetros Hiperparâmetro Intervalo válido Intervalo predefinido Tipo de escala
LINEAR_REG MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predefiniçã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 (predefiniçã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 (predefiniçã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 (predefiniçã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)

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 (predefinição)
BATCH_SIZE

DROPOUT

HIDDEN_UNITS

LEARN_RATE

OPTIMIZER



L1_REG

L2_REG

ACTIVATION_FN
(0, ∞)

[0, 1)

Array of [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 (predefinição)

EXPLAINED_VARIANCE
DNN_LINEAR_
COMBINED_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

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

EXPLAINED_VARIANCE
BOOSTED_TREE_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

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

EXPLAINED_VARIANCE
RANDOM_FOREST_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

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

EXPLAINED_VARIANCE

A maioria dos hiperparâmetros de escala usa o limite inferior aberto de 0.LOG Ainda pode definir 0 como o limite inferior através da palavra-chave HPARAM_RANGE para definir o intervalo de hiperparâmetros. Por exemplo, num modelo de classificador de árvore melhorada, pode definir o intervalo para o 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 suportados. Por exemplo, num modelo de regressão de árvore melhorada, só pode otimizar o hiperparâmetro DART_NORMALIZE_TYPE quando o valor do hiperparâmetro BOOSTER_TYPE for DART. Neste caso, especifica os espaços de pesquisa e as condições são processadas automaticamente, conforme mostrado no exemplo seguinte:

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

Pesquise o ponto de partida

Se não especificar um espaço de pesquisa para um hiperparâmetro através de HPARAM_RANGE ou HPARAM_CANDIDATES, a pesquisa começa a partir do valor predefinido desse hiperparâmetro, conforme documentado no tópico CREATE MODEL para esse tipo de modelo. Por exemplo, se estiver a executar o ajuste de hiperparâmetros para um modelo de árvore com reforço e não especificar um valor para o hiperparâmetro L1_REG, a pesquisa começa a partir de 0, o valor predefinido.

Se especificar um espaço de pesquisa para um hiperparâmetro através de HPARAM_RANGE ou HPARAM_CANDIDATES, os pontos de partida da pesquisa dependem de o espaço de pesquisa especificado incluir o valor predefinido desse hiperparâmetro, conforme documentado no tópico CREATE MODEL para esse tipo de modelo:

  • Se o intervalo especificado contiver o valor predefinido, é aí que a pesquisa começa. Por exemplo, se estiver a executar o ajuste de hiperparâmetros para um modelo de fatorização de matrizes implícito e especificar o valor [20, 30, 40, 50] para o hiperparâmetro WALS_ALPHA, a pesquisa começa em 40, o valor predefinido.
  • Se o intervalo especificado não contiver o valor predefinido, a pesquisa começa a partir do ponto no intervalo especificado mais próximo do valor predefinido. Por exemplo,se especificar o valor [10, 20, 30] para o hiperparâmetro, a pesquisa começa a partir de 30, que é o valor mais próximo do valor predefinido de 40.WALS_ALPHA

Divisão de dados

Quando especifica um valor para a opção NUM_TRIALS, o serviço identifica que está a fazer o ajuste de hiperparâmetros e executa automaticamente uma divisão tripartida nos dados de entrada para os dividir em conjuntos de preparação, avaliação e teste. Por predefinição, os dados de entrada são aleatorizados e, em seguida, divididos em 80% para preparação, 10% para avaliação e 10% para testes.

Os conjuntos de preparação e avaliação são usados em cada preparação de teste, tal como nos modelos que não usam o ajuste de hiperparâmetros. As sugestões de hiperparâmetros de avaliação são calculadas com base nas métricas de avaliação do modelo para esse tipo de modelo. No final de cada preparação de avaliação, o conjunto de testes é usado para testar a avaliação e registar as respetivas métricas no modelo. Isto garante a objetividade das métricas de avaliação de relatórios finais através da utilização de dados que ainda não foram analisados pelo modelo. Os dados de avaliação são usados para calcular as métricas intermédias para a sugestão de hiperparâmetros, enquanto os dados de teste são usados para calcular as métricas finais e objetivas do modelo.

Se quiser usar apenas um conjunto de preparação, especifique NO_SPLIT para a opção DATA_SPLIT_METHOD da declaração CREATE MODEL.

Se quiser usar apenas conjuntos de preparação e avaliação, especifique 0 para a DATA_SPLIT_TEST_FRACTION opção da declaração CREATE MODEL. Quando o conjunto de teste está vazio, o conjunto de avaliação é usado como o conjunto de teste para a criação de relatórios das métricas de avaliação final.

As métricas de modelos gerados a partir de uma tarefa de preparação normal e de uma tarefa de preparação 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:

  • Aperfeiçoamento de não hiperparâmetros: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
  • Aperfeiçoamento de hiperparâmetros: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0

Desempenho

Normalmente, o desempenho do modelo quando usa o ajuste de hiperparâmetros não é pior do que o desempenho do modelo quando usa o espaço de pesquisa predefinido e não usa o ajuste de hiperparâmetros. Um modelo que usa o espaço de pesquisa predefinido e não usa o ajuste de hiperparâmetros usa sempre os hiperparâmetros predefinidos na primeira tentativa.

Para confirmar as melhorias no desempenho do modelo fornecidas pelo aperfeiçoamento de hiperparâmetros, compare a tentativa ideal do modelo de aperfeiçoamento de hiperparâmetros com a primeira tentativa do modelo sem aperfeiçoamento de hiperparâmetros.

Aprendizagem por transferência

A aprendizagem por transferência está ativada por predefinição quando define a opção HPARAM_TUNING_ALGORITHM na declaração CREATE MODEL como VIZIER_DEFAULT. A otimização dos hiperparâmetros de um modelo beneficia do conhecimento adquirido com modelos otimizados anteriormente se cumprir os seguintes requisitos:

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

A aprendizagem por transferência não requer que os dados de entrada sejam os mesmos.

A aprendizagem por transferência ajuda a resolver o problema de arranque a frio em que o sistema realiza uma exploração aleatória durante o primeiro lote de testes. A aprendizagem por transferência fornece ao sistema alguns conhecimentos iniciais sobre os hiperparâmetros e os respetivos objetivos. Para melhorar continuamente a qualidade do modelo, forme sempre um novo modelo de ajuste de hiperparâmetros com o mesmo conjunto de hiperparâmetros ou um subconjunto.

A aprendizagem por transferência ajuda a otimização dos hiperparâmetros a convergir mais rapidamente, em vez de ajudar os submodelos a convergir.

Processamento de erros

O aperfeiçoamento de hiperparâmetros processa os erros das seguintes formas:

  • Cancelamento: se uma tarefa de preparação for cancelada durante a execução, todas as tentativas bem-sucedidas permanecem utilizáveis.

  • Entrada inválida: se a entrada do utilizador for inválida, o serviço devolve um erro do utilizador.

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

  • Erro interno de avaliação: se mais de 10% do valor de NUM_TRIALS falharem devido a INTERNAL_ERROR, a tarefa de preparação para e devolve um erro do utilizador.

  • Se menos de 10% do valor NUM_TRIALS falharem devido a INTERNAL_ERROR, a formação continua com as tentativas falhadas marcadas como FAILED na saída da função ML.TRIAL_INFO.

Funções de publicação de modelos

Pode usar modelos de resultados da otimização de hiperparâmetros com várias funções de publicação de modelos existentes. Para usar estas funções, siga estas regras:

  • Quando a função recebe dados de entrada, apenas é devolvido o resultado de um teste. Por predefinição, esta é a avaliação ideal, mas também pode escolher uma avaliação específica especificando o TRIAL_ID como um argumento para a função fornecida. Pode obter o TRIAL_ID a partir do resultado da função ML.TRIAL_INFO. As seguintes funções são suportadas:

  • Quando a função não recebe dados de entrada, são devolvidos todos os resultados do teste, e a primeira coluna de saída é TRIAL_ID. As seguintes funções são suportadas:

O resultado de ML.FEATURE_INFO não se altera, porque todas as experiências partilham os mesmos dados de entrada.

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

Funções não suportadas

A função ML.TRAINING_INFO devolve informações para cada iteração e os resultados das iterações não são guardados nos modelos de otimização de hiperparâmetros. Em alternativa, são guardados os resultados do teste. Pode usar a função ML.TRIAL_INFO para obter informações sobre os resultados do teste.

Exportação de modelos

Pode exportar modelos criados com o ajuste de hiperparâmetros para localizações do Cloud Storage usando a declaração EXPORT MODEL. Pode exportar a avaliação ideal predefinida ou qualquer avaliação especificada.

Preços

O custo da preparação da otimização de hiperparâmetros é a soma do custo de todas as avaliações executadas. O preço de uma avaliação é consistente com o modelo de preços do BigQuery ML existente.

Perguntas frequentes

Esta secção apresenta respostas a algumas Perguntas frequentes sobre o ajuste de hiperparâmetros.

Quantas experiências preciso para otimizar um modelo?

Recomendamos que use, pelo menos, 10 testes para um hiperparâmetro, pelo que o número total de testes deve ser, pelo menos, 10 * num_hyperparameters. Se estiver a usar o espaço de pesquisa predefinido, consulte a coluna Hiperparâmetros na tabela Hiperparâmetros e objetivos para saber o número de hiperparâmetros otimizados por predefinição para um determinado tipo de modelo.

E se não vir melhorias no desempenho com a otimização de hiperparâmetros?

Certifique-se de que segue as orientações neste documento para obter uma comparação justa. Se ainda não vir melhorias no desempenho, pode significar que os hiperparâmetros predefinidos já funcionam bem para si. Pode querer focar-se na engenharia de funcionalidades ou experimentar outros tipos de modelos antes de tentar outra ronda de ajuste de hiperparâmetros.

E se quiser continuar a otimizar um modelo?

Preparar um novo modelo de otimização de hiperparâmetros com o mesmo espaço de pesquisa. A aprendizagem por transferência integrada ajuda a continuar a otimização com base nos modelos que otimizou anteriormente.

Tenho de voltar a formar o modelo com todos os dados e os hiperparâmetros ideais?

Depende dos seguintes fatores:

  • Os modelos de K-means já usam todos os dados como dados de preparação, por isso, não é necessário voltar a preparar o modelo.

  • Para modelos de fatorização de matrizes, pode voltar a preparar o modelo com os hiperparâmetros selecionados e todos os dados de entrada para uma melhor cobertura de utilizadores e artigos.

  • Para todos os outros tipos de modelos, normalmente, não é necessário voltar a fazer o treino. O serviço já mantém 80% dos dados de entrada para preparação durante a divisão aleatória de dados predefinida. Ainda pode voltar a preparar o modelo com mais dados de preparação e os hiperparâmetros selecionados se o conjunto de dados for pequeno, mas deixar poucos dados de avaliação para a paragem antecipada pode piorar o sobreajuste.

O que se segue?