Informações gerais 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:
- Regressão linear e logística
- K-means
- Fatoração de matrizes
- Codificador automático
- Árvores aprimoradas
- Floresta aleatória
- Rede neural profunda (DNN)
- Rede ampla e profunda
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
.
Para tentar executar o ajuste de hiperparâmetros em um modelo de regressão linear, consulte Use o ajuste de hiperparâmetros do BigQuery ML para melhorar o desempenho do modelo.
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 valorARRAY(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 valorARRAY(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_ (explícito)
|
MEAN_SQUARED_ERROR
|
NUM_FACTORS
L2_REG
|
[2, 200]
(0, ∞)
|
[2, 20]
(0, 10]
|
LINEAR
LOG
|
MATRIX_ (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_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (padrão)
|
BATCH_SIZE
DROPOUT
HIDDEN_UNITS
L1_REG
L2_REG
ACTIVATION_FN
|
(0, ∞)
|
[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 (padrão)
EXPLAINED_VARIANCE
|
||||
BOOSTED_TREE_
|
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_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (padrão)
EXPLAINED_VARIANCE
|
||||
RANDOM_FOREST_
|
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_ |
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âmetroWALS_ALPHA
, a pesquisa começará no40
, 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âmetroWALS_ALPHA
, a pesquisa começará em30
, que é o valor mais próximo do valor padrão de40
.
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çãoML.TRIAL_INFO
.Erro interno de teste: se mais de 10% do valor
NUM_TRIALS
falhar devido aINTERNAL_ERROR
, o job de treinamento será interrompido e retornará um erro de usuário.Se menos de 10% do valor
NUM_TRIALS
falhar devido aINTERNAL_ERROR
, o treinamento continuará com os testes com falha marcados comoFAILED
na saída da funçãoML.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 oTRIAL_ID
da saída da funçãoML.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.