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_ARIMApara 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
INFEASIBLEna saída da funçãoML.TRIAL_INFO.Erro interno de avaliação: se mais de 10% do valor de
NUM_TRIALSfalharem devido aINTERNAL_ERROR, a tarefa de preparação para e devolve um erro do utilizador.Se menos de 10% do valor
NUM_TRIALSfalharem devido aINTERNAL_ERROR, a formação continua com as tentativas falhadas marcadas comoFAILEDna 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_IDcomo um argumento para a função fornecida. Pode obter oTRIAL_IDa 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.