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:
- Regressão linear e logística
- K-means
- Fatorização de matrizes
- Autoencoder
- Árvores otimizadas
- Floresta aleatória
- Rede neural profunda (DNN)
- Rede Wide & Deep
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 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 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 valorARRAY(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_ (explícito)
|
MEAN_SQUARED_ERROR
|
NUM_FACTORS
L2_REG
|
[2, 200]
(0, ∞)
|
[2, 20]
(0, 10]
|
LINEAR
LOG
|
MATRIX_ (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_
|
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_
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predefinição)
EXPLAINED_VARIANCE
|
||||
BOOSTED_TREE_
|
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_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predefinição)
EXPLAINED_VARIANCE
|
||||
RANDOM_FOREST_
|
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_ |
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âmetroWALS_ALPHA
, a pesquisa começa em40
, 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 de30
, que é o valor mais próximo do valor predefinido de40
.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çãoML.TRIAL_INFO
.Erro interno de avaliação: se mais de 10% do valor de
NUM_TRIALS
falharem devido aINTERNAL_ERROR
, a tarefa de preparação para e devolve um erro do utilizador.Se menos de 10% do valor
NUM_TRIALS
falharem devido aINTERNAL_ERROR
, a formação continua com as tentativas falhadas marcadas comoFAILED
na saída da funçãoML.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 oTRIAL_ID
a partir do resultado da funçãoML.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?
- Para experimentar a execução do ajuste de hiperparâmetros, consulte o artigo Use o ajuste de hiperparâmetros do BigQuery ML para melhorar o desempenho do modelo.
- Para mais informações sobre as funções e as declarações SQL suportadas para modelos de ML, consulte o artigo Percursos do utilizador completos para modelos de ML.